use of com.google.api.codegen.config.ProtoApiModel in project toolkit by googleapis.
the class StaticLangGapicSamplesTransformer method transform.
@Override
public List<ViewModel> transform(ProtoApiModel apiModel, GapicProductConfig productConfig) {
String packageName = productConfig.getPackageName();
SurfaceNamer namer = newSurfaceNamer.apply(productConfig);
ModelTypeTable typeTable = newTypeTable.apply(packageName);
FeatureConfig featureConfig = newFeatureConfig.apply(productConfig);
List<InterfaceContext> interfaceContexts = Streams.stream(apiModel.getInterfaces(productConfig)).filter(iface -> productConfig.hasInterfaceConfig(iface)).map(iface -> GapicInterfaceContext.create(iface, productConfig, typeTable, namer, featureConfig)).collect(ImmutableList.toImmutableList());
ImmutableTable<String, String, ImmutableList<SampleConfig>> sampleConfigTable = productConfig.getSampleConfigTable();
List<ViewModel> sampleFiles;
if (sampleConfigTable.isEmpty()) {
// We don't have sample configs. Continue to use gapic config.
sampleFiles = generateSamplesFromGapicConfigs(interfaceContexts, productConfig, namer);
} else {
// Generate samples using sample configs.
sampleFiles = generateSamplesFromSampleConfigs(interfaceContexts, productConfig);
}
if (!interfaceContexts.isEmpty() && !sampleFiles.isEmpty()) {
ViewModel entryPoint = generateSampleEntryPoint(interfaceContexts.get(0));
if (entryPoint != null) {
sampleFiles.add(entryPoint);
}
}
return ImmutableList.copyOf(sampleFiles);
}
use of com.google.api.codegen.config.ProtoApiModel in project toolkit by googleapis.
the class RubyGapicSurfaceDocTransformer method generateDoc.
private ViewModel generateDoc(ProtoFile file, GapicProductConfig productConfig) {
ModelTypeTable typeTable = new ModelTypeTable(new RubyTypeTable(productConfig.getPackageName()), new RubyModelTypeNameConverter(productConfig.getPackageName()));
// Use file path for package name to get file-specific package instead of package for the API.
SurfaceNamer namer = new RubySurfaceNamer(typeTable.getFullNameFor(file));
String subPath = pathMapper.getOutputPath(file.getFullName(), productConfig);
String baseFilename = namer.getProtoFileName(file.getSimpleName());
GrpcDocView.Builder doc = GrpcDocView.newBuilder();
doc.templateFileName(DOC_TEMPLATE_FILENAME);
doc.outputPath(subPath + "/doc/" + baseFilename);
doc.fileHeader(fileHeaderTransformer.generateFileHeader(productConfig, ImportSectionView.newBuilder().build(), namer));
doc.elementDocs(elementDocTransformer.generateElementDocs(productConfig, typeTable, namer, file));
doc.modules(generateModuleViews(new ProtoApiModel(file.getModel()), productConfig, namer, isSourceApiInterfaceFile(file) ? file : null));
return doc.build();
}
use of com.google.api.codegen.config.ProtoApiModel in project toolkit by googleapis.
the class NodeJSSamplePackageMetadataTransformer method transform.
@Override
public List<ViewModel> transform(ProtoApiModel model, GapicProductConfig productConfig) {
boolean shouldGenerateSamplePackages = productConfig.getInterfaceConfigMap().values().stream().flatMap(config -> config.getMethodConfigs().stream()).anyMatch(config -> config.getSampleSpec().isConfigured());
if (!shouldGenerateSamplePackages) {
return Collections.emptyList();
}
NodeJSPackageMetadataNamer gapicPackageNamer = new NodeJSPackageMetadataNamer(productConfig.getPackageName(), productConfig.getDomainLayerLocation());
String outputPath = "samples/package.json";
ViewModel metadataView = metadataTransformer.generateMetadataView(gapicPackageNamer, packageConfig, model, TEMPLATE_FILE, outputPath, TargetLanguage.NODEJS).identifier(samplePackageIdentifier(productConfig)).hasMultipleServices(model.hasMultipleServices()).additionalDependencies(additionalDependencies(gapicPackageNamer)).build();
return Collections.singletonList(metadataView);
}
use of com.google.api.codegen.config.ProtoApiModel in project toolkit by googleapis.
the class GapicGenerator method generate.
@Override
public Map<String, GeneratedResult<Doc>> generate() {
// Establish required stage for generation.
model.establishStage(Merged.KEY);
if (model.getDiagReporter().getDiagCollector().getErrorCount() > 0) {
return null;
}
List<ViewModel> surfaceDocs = modelToViewTransformer.transform(new ProtoApiModel(model), productConfig);
if (model.getDiagReporter().getDiagCollector().getErrorCount() > 0) {
return null;
}
Map<String, GeneratedResult<Doc>> results = new TreeMap<>();
for (ViewModel surfaceDoc : surfaceDocs) {
results.putAll(snippetSetRunner.generate(surfaceDoc));
}
return results;
}
use of com.google.api.codegen.config.ProtoApiModel in project toolkit by googleapis.
the class GapicGeneratorFactory method create.
/**
* Create the GapicGenerators based on the given id.
*
* <p>If {@code devSamples} is set, standalone samples are generated for all languages, including
* those that currently have development stubs. Otherwise, samples are only produced in languages
* where they are production-ready.
*/
public static List<CodeGenerator<?>> create(TargetLanguage language, Model model, GapicProductConfig productConfig, PackageMetadataConfig packageConfig, ArtifactFlags artifactFlags) {
ArrayList<CodeGenerator<?>> generators = new ArrayList<>();
// Please keep the following IDs in alphabetical order
if (language.equals(CSHARP)) {
String packageName = productConfig.getPackageName();
Function<String, GapicCodePathMapper> newCodePathMapper = suffix -> CommonGapicCodePathMapper.newBuilder().setPrefix(packageName + File.separator + packageName + suffix).setPackageFilePathNameFormatter(new CSharpNameFormatter()).build();
Function<ModelToViewTransformer<ProtoApiModel>, CodeGenerator> newCsharpGenerator = transformer -> GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CSharpRenderingUtil())).setModelToViewTransformer(transformer).build();
if (artifactFlags.surfaceGeneratorEnabled()) {
GapicCodePathMapper clientPathMapper = newCodePathMapper.apply("");
if (artifactFlags.codeFilesEnabled()) {
generators.add(newCsharpGenerator.apply(new CSharpGapicClientTransformer(clientPathMapper)));
}
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newCsharpGenerator.apply(new CSharpGapicClientPackageTransformer(clientPathMapper, packageConfig)));
}
GapicCodePathMapper snippetPathMapper = newCodePathMapper.apply(".Snippets");
if (artifactFlags.codeFilesEnabled()) {
generators.add(newCsharpGenerator.apply(new CSharpGapicSnippetsTransformer(snippetPathMapper)));
}
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newCsharpGenerator.apply(CSharpBasicPackageTransformer.forSnippets(snippetPathMapper)));
}
}
if (artifactFlags.testGeneratorEnabled()) {
GapicCodePathMapper smokeTestPathMapper = newCodePathMapper.apply(".SmokeTests");
if (artifactFlags.codeFilesEnabled()) {
generators.add(newCsharpGenerator.apply(new CSharpGapicSmokeTestTransformer(smokeTestPathMapper)));
}
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newCsharpGenerator.apply(CSharpBasicPackageTransformer.forSmokeTests(smokeTestPathMapper)));
}
GapicCodePathMapper unitTestPathMapper = newCodePathMapper.apply(".Tests");
if (artifactFlags.codeFilesEnabled()) {
generators.add(newCsharpGenerator.apply(new CSharpGapicUnitTestTransformer(unitTestPathMapper)));
}
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newCsharpGenerator.apply(CSharpBasicPackageTransformer.forUnitTests(unitTestPathMapper)));
}
}
if (artifactFlags.devSamplesEnabled()) {
GapicCodePathMapper samplePathMapper = newCodePathMapper.apply(".Samples");
CSharpStandaloneSampleTransformer csharpSampleTransformer = new CSharpStandaloneSampleTransformer(samplePathMapper);
generators.add(newCsharpGenerator.apply(csharpSampleTransformer));
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newCsharpGenerator.apply(CSharpBasicPackageTransformer.forSamples(samplePathMapper)));
}
}
} else if (language.equals(GO)) {
if (artifactFlags.surfaceGeneratorEnabled()) {
CodeGenerator generator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new GoGapicSurfaceTransformer(new PackageNameCodePathMapper())).build();
generators.add(generator);
}
if (artifactFlags.testGeneratorEnabled()) {
CodeGenerator testGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new GoGapicSurfaceTestTransformer()).build();
generators.add(testGenerator);
}
} else if (language.equals(JAVA)) {
Function<ModelToViewTransformer<ProtoApiModel>, CodeGenerator> newJavaGenerator = transformer -> GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new JavaRenderingUtil())).setModelToViewTransformer(transformer).build();
if (artifactFlags.surfaceGeneratorEnabled()) {
GapicCodePathMapper javaPathMapper = JavaGapicCodePathMapper.newBuilder().prefix("src/main/java").build();
if (artifactFlags.codeFilesEnabled()) {
generators.add(newJavaGenerator.apply(new JavaGapicSurfaceTransformer(javaPathMapper)));
if (artifactFlags.devSamplesEnabled()) {
generators.add(newJavaGenerator.apply(new JavaGapicSamplesTransformer()));
generators.add(newJavaGenerator.apply(new JavaGapicSamplesPackageTransformer(packageConfig)));
generators.add(newJavaGenerator.apply(JavaGapicSamplesTransformer.createManifestTransformer()));
}
}
if (artifactFlags.packagingFilesEnabled()) {
generators.add(newJavaGenerator.apply(new JavaGapicPackageTransformer<>(packageConfig)));
CodeGenerator staticResourcesGenerator = new StaticResourcesGenerator(ImmutableMap.<String, String>builder().put("java/static/build.gradle", "../build.gradle").put("java/static/settings.gradle", "../settings.gradle").put("java/static/gradlew", "../gradlew").put("java/static/gradlew.bat", "../gradlew.bat").put("java/static/gradle/wrapper/gradle-wrapper.jar", "../gradle/wrapper/gradle-wrapper.jar").put("java/static/gradle/wrapper/gradle-wrapper.properties", "../gradle/wrapper/gradle-wrapper.properties").build(), ImmutableSet.of("../gradlew"));
generators.add(staticResourcesGenerator);
}
}
if (artifactFlags.testGeneratorEnabled()) {
if (artifactFlags.codeFilesEnabled()) {
GapicCodePathMapper javaTestPathMapper = JavaGapicCodePathMapper.newBuilder().prefix("src/test/java").build();
generators.add(newJavaGenerator.apply(new JavaSurfaceTestTransformer<>(javaTestPathMapper, new JavaGapicSurfaceTransformer(javaTestPathMapper), "java/test.snip")));
}
}
return generators;
} else if (language.equals(NODEJS)) {
if (artifactFlags.surfaceGeneratorEnabled()) {
GapicCodePathMapper nodeJSPathMapper = new NodeJSCodePathMapper();
CodeGenerator mainGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new NodeJSGapicSurfaceTransformer(nodeJSPathMapper, packageConfig)).build();
CodeGenerator metadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new NodeJSPackageMetadataTransformer(packageConfig)).build();
CodeGenerator clientConfigGenerator = LegacyGapicGenerator.newBuilder().setModel(model).setContext(new ClientConfigGapicContext(model, productConfig)).setSnippetSetRunner(new ClientConfigSnippetSetRunner<>(SnippetSetRunner.SNIPPET_RESOURCE_ROOT)).setSnippetFileNames(Arrays.asList("clientconfig/json.snip")).setCodePathMapper(nodeJSPathMapper).build();
generators.add(mainGenerator);
generators.add(metadataGenerator);
generators.add(clientConfigGenerator);
if (artifactFlags.devSamplesEnabled()) {
GapicCodePathMapper nodejsSamplePathMapper = new CommonSampleCodePathMapper();
NodeJSGapicSamplesTransformer nodejsGapicSamplesTransformer = new NodeJSGapicSamplesTransformer(nodejsSamplePathMapper);
CodeGenerator sampleGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(nodejsGapicSamplesTransformer).build();
CodeGenerator sampleMetadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new NodeJSSamplePackageMetadataTransformer(packageConfig)).build();
generators.add(sampleGenerator);
generators.add(sampleMetadataGenerator);
}
CodeGenerator messageGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new NodeJSGapicSurfaceDocTransformer()).build();
generators.add(messageGenerator);
}
if (artifactFlags.testGeneratorEnabled()) {
CodeGenerator testGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new NodeJSGapicSurfaceTestTransformer()).build();
generators.add(testGenerator);
}
} else if (language.equals(PHP)) {
if (artifactFlags.surfaceGeneratorEnabled()) {
if (artifactFlags.codeFilesEnabled()) {
GapicCodePathMapper phpPathMapper = PhpGapicCodePathMapper.newBuilder().setPrefix("src").build();
CodeGenerator generator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new PhpGapicSurfaceTransformer(productConfig, phpPathMapper, model)).build();
generators.add(generator);
GapicCodePathMapper phpClientConfigPathMapper = PhpGapicCodePathMapper.newBuilder().setPrefix("src").setSuffix("resources").build();
CodeGenerator clientConfigGenerator = LegacyGapicGenerator.newBuilder().setModel(model).setContext(new PhpClientConfigGapicContext(model, productConfig)).setSnippetSetRunner(new ClientConfigSnippetSetRunner<>(SnippetSetRunner.SNIPPET_RESOURCE_ROOT)).setSnippetFileNames(Arrays.asList("clientconfig/json.snip")).setCodePathMapper(phpClientConfigPathMapper).build();
generators.add(clientConfigGenerator);
}
if (artifactFlags.packagingFilesEnabled()) {
CodeGenerator metadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new PhpPackageMetadataTransformer(packageConfig)).build();
generators.add(metadataGenerator);
}
if (artifactFlags.devSamplesEnabled()) {
GapicCodePathMapper phpSamplePathMapper = PhpGapicCodePathMapper.newBuilder().setPrefix("samples").build();
PhpGapicSamplesTransformer phpGapicSamplesTransformer = new PhpGapicSamplesTransformer(phpSamplePathMapper);
CodeGenerator sampleGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(phpGapicSamplesTransformer).build();
generators.add(sampleGenerator);
}
}
if (artifactFlags.testGeneratorEnabled()) {
CodeGenerator testGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new PhpGapicSurfaceTestTransformer()).build();
generators.add(testGenerator);
}
} else if (language.equals(PYTHON)) {
if (artifactFlags.surfaceGeneratorEnabled()) {
GapicCodePathMapper pythonPathMapper = CommonGapicCodePathMapper.newBuilder().setShouldAppendPackage(true).build();
CodeGenerator mainGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new PythonRenderingUtil())).setModelToViewTransformer(new PythonGapicSurfaceTransformer(pythonPathMapper, packageConfig)).build();
CodeGenerator clientConfigGenerator = LegacyGapicGenerator.newBuilder().setModel(model).setContext(new ClientConfigGapicContext(model, productConfig)).setSnippetSetRunner(new ClientConfigSnippetSetRunner<>(SnippetSetRunner.SNIPPET_RESOURCE_ROOT)).setSnippetFileNames(Arrays.asList("clientconfig/python_clientconfig.snip")).setCodePathMapper(pythonPathMapper).build();
generators.add(mainGenerator);
generators.add(clientConfigGenerator);
if (artifactFlags.devSamplesEnabled()) {
GapicCodePathMapper pythonSamplePathMapper = new CommonSampleCodePathMapper();
PythonGapicSamplesTransformer pythonGapicSampleTransformer = new PythonGapicSamplesTransformer(pythonSamplePathMapper, packageConfig);
CodeGenerator sampleGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new PythonRenderingUtil())).setModelToViewTransformer(pythonGapicSampleTransformer).build();
generators.add(sampleGenerator);
}
CodeGenerator metadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new PythonRenderingUtil())).setModelToViewTransformer(new PythonPackageMetadataTransformer(packageConfig)).build();
generators.add(metadataGenerator);
}
if (artifactFlags.testGeneratorEnabled()) {
GapicCodePathMapper pythonTestPathMapper = CommonGapicCodePathMapper.newBuilder().setPrefix("test").setShouldAppendPackage(true).build();
CodeGenerator testGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new PythonGapicSurfaceTestTransformer(pythonTestPathMapper, packageConfig)).build();
generators.add(testGenerator);
}
} else if (language.equals(RUBY)) {
if (artifactFlags.surfaceGeneratorEnabled()) {
GapicCodePathMapper rubyPathMapper = CommonGapicCodePathMapper.newBuilder().setPrefix("lib").setShouldAppendPackage(true).setPackageFilePathNameFormatter(new RubyNameFormatter()).build();
CodeGenerator mainGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new RubyGapicSurfaceTransformer(rubyPathMapper, packageConfig)).build();
CodeGenerator clientConfigGenerator = LegacyGapicGenerator.newBuilder().setModel(model).setContext(new ClientConfigGapicContext(model, productConfig)).setSnippetSetRunner(new ClientConfigSnippetSetRunner<>(SnippetSetRunner.SNIPPET_RESOURCE_ROOT)).setSnippetFileNames(Arrays.asList("clientconfig/json.snip")).setCodePathMapper(rubyPathMapper).build();
CodeGenerator metadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new RubyPackageMetadataTransformer(packageConfig)).build();
if (artifactFlags.devSamplesEnabled()) {
GapicCodePathMapper rubySamplePathMapper = new CommonSampleCodePathMapper();
RubyGapicSamplesTransformer rubyGapicSamplesTransformer = new RubyGapicSamplesTransformer(rubySamplePathMapper);
CodeGenerator sampleGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(rubyGapicSamplesTransformer).build();
CodeGenerator sampleMetadataGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new RubySamplePackageMetadataTransformer(packageConfig)).build();
generators.add(sampleGenerator);
generators.add(sampleMetadataGenerator);
}
generators.add(mainGenerator);
generators.add(clientConfigGenerator);
generators.add(metadataGenerator);
CodeGenerator messageGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new RubyGapicSurfaceDocTransformer(rubyPathMapper, packageConfig)).build();
generators.add(messageGenerator);
}
if (artifactFlags.testGeneratorEnabled()) {
CommonGapicCodePathMapper.Builder rubyTestPathMapperBuilder = CommonGapicCodePathMapper.newBuilder().setShouldAppendPackage(true).setPackageFilePathNameFormatter(new RubyNameFormatter());
CodeGenerator testGenerator = GapicGenerator.newBuilder().setModel(model).setProductConfig(productConfig).setSnippetSetRunner(new CommonSnippetSetRunner(new CommonRenderingUtil())).setModelToViewTransformer(new RubyGapicSurfaceTestTransformer(rubyTestPathMapperBuilder.setPrefix("test").build(), rubyTestPathMapperBuilder.setPrefix("acceptance").build(), packageConfig)).build();
generators.add(testGenerator);
}
} else {
throw new UnsupportedOperationException("GapicGeneratorFactory: unsupported language \"" + language + "\"");
}
if (generators.isEmpty()) {
throw new IllegalArgumentException("No artifacts are enabled.");
}
return generators;
}
Aggregations