use of com.google.api.codegen.config.SingleResourceNameConfig in project toolkit by googleapis.
the class PathTemplateTransformer method addSingleResourceNameConfigsUsedByInterface.
private static void addSingleResourceNameConfigsUsedByInterface(MethodContext methodContext, String fieldNamePattern, Set<String> foundSet, List<ResourceNameConfig> resourceNameConfigs) {
SingleResourceNameConfig resourceNameConfig = methodContext.getSingleResourceNameConfig(fieldNamePattern);
if (resourceNameConfig != null && !foundSet.contains(resourceNameConfig.getEntityId())) {
resourceNameConfigs.add(resourceNameConfig);
foundSet.add(resourceNameConfig.getEntityId());
}
}
use of com.google.api.codegen.config.SingleResourceNameConfig in project toolkit by googleapis.
the class PathTemplateTransformer method generateFormatResourceFunctions.
public List<FormatResourceFunctionView> generateFormatResourceFunctions(InterfaceContext context) {
List<FormatResourceFunctionView> functions = new ArrayList<>();
if (!context.getFeatureConfig().enableStringFormatFunctions()) {
return functions;
}
SurfaceNamer namer = context.getNamer();
InterfaceConfig interfaceConfig = context.getInterfaceConfig();
for (SingleResourceNameConfig resourceNameConfig : getSingleResourceNameConfigsUsedByInterface(context)) {
FormatResourceFunctionView.Builder function = FormatResourceFunctionView.newBuilder().resourceName(namer.getResourceTypeName(resourceNameConfig)).entityName(resourceNameConfig.getEntityName().toLowerUnderscore()).name(namer.getFormatFunctionName(interfaceConfig, resourceNameConfig)).pathTemplateName(namer.getPathTemplateName(interfaceConfig, resourceNameConfig)).pathTemplateGetterName(namer.getPathTemplateNameGetter(interfaceConfig, resourceNameConfig)).pattern(resourceNameConfig.getNamePattern()).isResourceNameDeprecated(resourceNameConfig.getDeprecated());
List<ResourceIdParamView> resourceIdParams = new ArrayList<>();
for (String variable : resourceNameConfig.getNameTemplate().vars()) {
ResourceIdParamView param = ResourceIdParamView.newBuilder().name(namer.getParamName(variable)).docName(namer.getParamDocName(variable)).templateKey(variable).build();
resourceIdParams.add(param);
}
function.resourceIdParams(resourceIdParams);
functions.add(function.build());
}
return functions;
}
use of com.google.api.codegen.config.SingleResourceNameConfig in project toolkit by googleapis.
the class ApiCallableTransformer method generateHttpFields.
private HttpMethodView generateHttpFields(MethodContext context) {
if (context.getProductConfig().getTransportProtocol().equals(TransportProtocol.HTTP)) {
if (context.getMethodModel() instanceof DiscoveryMethodModel) {
// This section is only for DiscoGapic and will be deleted once the generator stops
// ingesting Discovery files.
Method method = ((DiscoveryMethodModel) context.getMethodModel()).getDiscoMethod();
HttpMethodView.Builder httpMethodView = HttpMethodView.newBuilder();
httpMethodView.fullMethodName(method.id());
httpMethodView.httpMethod(method.httpMethod());
List<String> pathParams = new ArrayList<>(method.pathParams().keySet());
List<String> queryParams = new ArrayList<>(method.queryParams().keySet());
Collections.sort(pathParams);
Collections.sort(queryParams);
httpMethodView.pathParams(pathParams);
httpMethodView.queryParams(queryParams);
httpMethodView.pathTemplate(method.path());
// TODO(andrealin): handle multiple resource names.
DiscoGapicInterfaceConfig interfaceConfig = (DiscoGapicInterfaceConfig) context.getSurfaceInterfaceContext().getInterfaceConfig();
SingleResourceNameConfig nameConfig = interfaceConfig.methodToResourceNameMap().get(context.getMethodConfig());
httpMethodView.resourceNameTypeName(context.getNamer().publicClassName(DiscoGapicParser.getResourceNameName(nameConfig)));
// Find the field with the resource name config.
for (FieldConfig fieldConfig : context.getMethodConfig().getRequiredFieldConfigs()) {
if (fieldConfig.getResourceNameConfig() != null && fieldConfig.getResourceNameConfig().equals(nameConfig)) {
httpMethodView.resourceNameFieldName(context.getNamer().privateFieldName(Name.anyCamel(fieldConfig.getField().getNameAsParameter())));
}
}
return httpMethodView.build();
} else if (context.getMethodModel() instanceof ProtoMethodModel) {
com.google.api.tools.framework.model.Method method = ((ProtoMethodModel) context.getMethodModel()).getProtoMethod();
HttpAttribute httpAttr = method.getAttribute(HttpAttribute.KEY);
HttpMethodView.Builder httpMethodView = HttpMethodView.newBuilder();
httpMethodView.httpMethod(httpAttr.getMethodKind().toString());
httpMethodView.fullMethodName(httpAttr.getRestMethod().getFullName());
SurfaceNamer namer = context.getNamer();
httpMethodView.pathTemplate(httpAttr.getPath().stream().map(pathSegment -> normalizePathSegment(pathSegment.toString())).collect(Collectors.joining("/", "/", "")));
httpMethodView.pathParamSelectors(populateMethodSelectors(namer, httpAttr.getPathSelectors()));
httpMethodView.queryParamSelectors(populateMethodSelectors(namer, httpAttr.getParamSelectors()));
httpMethodView.bodySelectors(populateMethodSelectors(namer, httpAttr.getBodySelectors()));
return httpMethodView.build();
}
}
return null;
}
use of com.google.api.codegen.config.SingleResourceNameConfig in project toolkit by googleapis.
the class StaticLangApiMethodTransformer method generatePathTemplateChecks.
private List<PathTemplateCheckView> generatePathTemplateChecks(MethodContext context, Iterable<FieldConfig> fieldConfigs) {
List<PathTemplateCheckView> pathTemplateChecks = new ArrayList<>();
if (!context.getFeatureConfig().enableStringFormatFunctions()) {
return pathTemplateChecks;
}
for (FieldConfig fieldConfig : fieldConfigs) {
if (!fieldConfig.useValidation()) {
// Don't generate a path template check if fieldConfig is not configured to use validation.
continue;
}
FieldModel field = fieldConfig.getField();
ImmutableMap<String, String> fieldNamePatterns = context.getFieldResourceEntityMap();
String entityName = fieldNamePatterns.get(field.getSimpleName());
if (entityName != null) {
SingleResourceNameConfig resourceNameConfig = context.getSingleResourceNameConfig(entityName);
if (resourceNameConfig == null) {
String methodName = context.getMethodModel().getSimpleName();
throw new IllegalStateException("No collection config with id '" + entityName + "' required by configuration for method '" + methodName + "'");
}
PathTemplateCheckView.Builder check = PathTemplateCheckView.newBuilder();
check.pathTemplateName(context.getNamer().getPathTemplateName(context.getInterfaceConfig(), resourceNameConfig));
check.paramName(context.getNamer().getVariableName(field));
check.allowEmptyString(shouldAllowEmpty(context, field));
check.validationMessageContext(context.getNamer().getApiMethodName(context.getMethodModel(), context.getMethodConfig().getVisibility()));
pathTemplateChecks.add(check.build());
}
}
return pathTemplateChecks;
}
use of com.google.api.codegen.config.SingleResourceNameConfig in project toolkit by googleapis.
the class PathTemplateTransformer method generatePathTemplates.
public List<PathTemplateView> generatePathTemplates(InterfaceContext context) {
List<PathTemplateView> pathTemplates = new ArrayList<>();
if (!context.getFeatureConfig().enableStringFormatFunctions()) {
return pathTemplates;
}
for (SingleResourceNameConfig resourceNameConfig : getSingleResourceNameConfigsUsedByInterface(context)) {
PathTemplateView.Builder pathTemplate = PathTemplateView.newBuilder();
pathTemplate.name(context.getNamer().getPathTemplateName(context.getInterfaceConfig(), resourceNameConfig));
pathTemplate.pattern(resourceNameConfig.getNamePattern());
pathTemplates.add(pathTemplate.build());
}
return pathTemplates;
}
Aggregations