-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ggj][codegen] fix: support singleton resnames' patterns in parsing a…
…nd codegen (#574) * fix: handle empty method_signature in parsing protos * fix: add google/type:type_java_proto as default test dep * fix: support singleton resource names in parsing and codegen
- Loading branch information
Showing
4 changed files
with
287 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
249 changes: 249 additions & 0 deletions
249
src/test/java/com/google/api/generator/gapic/composer/goldens/AgentName.golden
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,249 @@ | ||
package com.google.cloud.dialogflow.v2beta1; | ||
|
||
import com.google.api.core.BetaApi; | ||
import com.google.api.pathtemplate.PathTemplate; | ||
import com.google.api.pathtemplate.ValidationException; | ||
import com.google.api.resourcenames.ResourceName; | ||
import com.google.common.base.Preconditions; | ||
import com.google.common.collect.ImmutableMap; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Map; | ||
import java.util.Objects; | ||
import javax.annotation.Generated; | ||
|
||
// AUTO-GENERATED DOCUMENTATION AND CLASS. | ||
@Generated("by gapic-generator-java") | ||
public class AgentName implements ResourceName { | ||
private static final PathTemplate PROJECT_LOCATION = | ||
PathTemplate.createWithoutUrlEncoding("projects/{project}/locations/{location}/agent"); | ||
private static final PathTemplate PROJECT = | ||
PathTemplate.createWithoutUrlEncoding("projects/{project}/agent"); | ||
private volatile Map<String, String> fieldValuesMap; | ||
private PathTemplate pathTemplate; | ||
private String fixedValue; | ||
private final String project; | ||
private final String location; | ||
|
||
@Deprecated | ||
protected AgentName() { | ||
project = null; | ||
location = null; | ||
} | ||
|
||
private AgentName(Builder builder) { | ||
project = Preconditions.checkNotNull(builder.getProject()); | ||
location = Preconditions.checkNotNull(builder.getLocation()); | ||
pathTemplate = PROJECT_LOCATION; | ||
} | ||
|
||
private AgentName(ProjectBuilder builder) { | ||
project = Preconditions.checkNotNull(builder.getProject()); | ||
location = null; | ||
pathTemplate = PROJECT; | ||
} | ||
|
||
public String getProject() { | ||
return project; | ||
} | ||
|
||
public String getLocation() { | ||
return location; | ||
} | ||
|
||
public static Builder newBuilder() { | ||
return new Builder(); | ||
} | ||
|
||
@BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") | ||
public static Builder newProjectLocationBuilder() { | ||
return new Builder(); | ||
} | ||
|
||
@BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") | ||
public static ProjectBuilder newProjectBuilder() { | ||
return new ProjectBuilder(); | ||
} | ||
|
||
public Builder toBuilder() { | ||
return new Builder(this); | ||
} | ||
|
||
public static AgentName of(String project, String location) { | ||
return newBuilder().setProject(project).setLocation(location).build(); | ||
} | ||
|
||
@BetaApi("The static create methods are not stable yet and may be changed in the future.") | ||
public static AgentName ofProjectLocationName(String project, String location) { | ||
return newBuilder().setProject(project).setLocation(location).build(); | ||
} | ||
|
||
@BetaApi("The static create methods are not stable yet and may be changed in the future.") | ||
public static AgentName ofProjectName(String project) { | ||
return newProjectBuilder().setProject(project).build(); | ||
} | ||
|
||
public static String format(String project, String location) { | ||
return newBuilder().setProject(project).setLocation(location).build().toString(); | ||
} | ||
|
||
@BetaApi("The static format methods are not stable yet and may be changed in the future.") | ||
public static String formatProjectLocationName(String project, String location) { | ||
return newBuilder().setProject(project).setLocation(location).build().toString(); | ||
} | ||
|
||
@BetaApi("The static format methods are not stable yet and may be changed in the future.") | ||
public static String formatProjectName(String project) { | ||
return newProjectBuilder().setProject(project).build().toString(); | ||
} | ||
|
||
public static AgentName parse(String formattedString) { | ||
if (formattedString.isEmpty()) { | ||
return null; | ||
} | ||
if (PROJECT_LOCATION.matches(formattedString)) { | ||
Map<String, String> matchMap = PROJECT_LOCATION.match(formattedString); | ||
return ofProjectLocationName(matchMap.get("project"), matchMap.get("location")); | ||
} else if (PROJECT.matches(formattedString)) { | ||
Map<String, String> matchMap = PROJECT.match(formattedString); | ||
return ofProjectName(matchMap.get("project")); | ||
} | ||
throw new ValidationException("AgentName.parse: formattedString not in valid format"); | ||
} | ||
|
||
public static List<AgentName> parseList(List<String> formattedStrings) { | ||
List<AgentName> list = new ArrayList<>(formattedStrings.size()); | ||
for (String formattedString : formattedStrings) { | ||
list.add(parse(formattedString)); | ||
} | ||
return list; | ||
} | ||
|
||
public static List<String> toStringList(List<AgentName> values) { | ||
List<String> list = new ArrayList<>(values.size()); | ||
for (AgentName value : values) { | ||
if (Objects.isNull(value)) { | ||
list.add(""); | ||
} else { | ||
list.add(value.toString()); | ||
} | ||
} | ||
return list; | ||
} | ||
|
||
public static boolean isParsableFrom(String formattedString) { | ||
return PROJECT_LOCATION.matches(formattedString) || PROJECT.matches(formattedString); | ||
} | ||
|
||
@Override | ||
public Map<String, String> getFieldValuesMap() { | ||
if (Objects.isNull(fieldValuesMap)) { | ||
synchronized (this) { | ||
if (Objects.isNull(fieldValuesMap)) { | ||
ImmutableMap.Builder<String, String> fieldMapBuilder = ImmutableMap.builder(); | ||
if (!Objects.isNull(project)) { | ||
fieldMapBuilder.put("project", project); | ||
} | ||
if (!Objects.isNull(location)) { | ||
fieldMapBuilder.put("location", location); | ||
} | ||
fieldValuesMap = fieldMapBuilder.build(); | ||
} | ||
} | ||
} | ||
return fieldValuesMap; | ||
} | ||
|
||
public String getFieldValue(String fieldName) { | ||
return getFieldValuesMap().get(fieldName); | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return !Objects.isNull(fixedValue) ? fixedValue : pathTemplate.instantiate(getFieldValuesMap()); | ||
} | ||
|
||
@Override | ||
public boolean equals(Object o) { | ||
if (o == this) { | ||
return true; | ||
} | ||
if (o != null || getClass() == o.getClass()) { | ||
AgentName that = ((AgentName) o); | ||
return Objects.equals(this.project, that.project) | ||
&& Objects.equals(this.location, that.location); | ||
} | ||
return false; | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
int h = 1; | ||
h *= 1000003; | ||
h ^= Objects.hashCode(fixedValue); | ||
h *= 1000003; | ||
h ^= Objects.hashCode(project); | ||
h *= 1000003; | ||
h ^= Objects.hashCode(location); | ||
return h; | ||
} | ||
|
||
/** Builder for projects/{project}/locations/{location}/agent. */ | ||
public static class Builder { | ||
private String project; | ||
private String location; | ||
|
||
protected Builder() {} | ||
|
||
public String getProject() { | ||
return project; | ||
} | ||
|
||
public String getLocation() { | ||
return location; | ||
} | ||
|
||
public Builder setProject(String project) { | ||
this.project = project; | ||
return this; | ||
} | ||
|
||
public Builder setLocation(String location) { | ||
this.location = location; | ||
return this; | ||
} | ||
|
||
private Builder(AgentName agentName) { | ||
Preconditions.checkArgument( | ||
Objects.equals(agentName.pathTemplate, PROJECT_LOCATION), | ||
"toBuilder is only supported when AgentName has the pattern of projects/{project}/locations/{location}/agent"); | ||
project = agentName.project; | ||
location = agentName.location; | ||
} | ||
|
||
public AgentName build() { | ||
return new AgentName(this); | ||
} | ||
} | ||
|
||
/** Builder for projects/{project}/agent. */ | ||
@BetaApi("The per-pattern Builders are not stable yet and may be changed in the future.") | ||
public static class ProjectBuilder { | ||
private String project; | ||
|
||
protected ProjectBuilder() {} | ||
|
||
public String getProject() { | ||
return project; | ||
} | ||
|
||
public ProjectBuilder setProject(String project) { | ||
this.project = project; | ||
return this; | ||
} | ||
|
||
public AgentName build() { | ||
return new AgentName(this); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters