Search in sources :

Example 11 with InterfaceContext

use of com.google.api.codegen.config.InterfaceContext 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);
}
Also used : Arrays(java.util.Arrays) HashMap(java.util.HashMap) StaticLangApiMethodView(com.google.api.codegen.viewmodel.StaticLangApiMethodView) Function(java.util.function.Function) ArrayList(java.util.ArrayList) InterfaceContext(com.google.api.codegen.config.InterfaceContext) SampleEntryPointView(com.google.api.codegen.viewmodel.SampleEntryPointView) MethodSampleView(com.google.api.codegen.viewmodel.MethodSampleView) ImmutableList(com.google.common.collect.ImmutableList) MethodContext(com.google.api.codegen.config.MethodContext) MethodModel(com.google.api.codegen.config.MethodModel) ViewModel(com.google.api.codegen.viewmodel.ViewModel) Map(java.util.Map) StaticLangSampleClassView(com.google.api.codegen.viewmodel.StaticLangSampleClassView) StaticLangFileView(com.google.api.codegen.viewmodel.StaticLangFileView) SampleConfig(com.google.api.codegen.config.SampleConfig) Nullable(javax.annotation.Nullable) GapicCodePathMapper(com.google.api.codegen.gapic.GapicCodePathMapper) InitCodeOutputType(com.google.api.codegen.metacode.InitCodeContext.InitCodeOutputType) SampleContext(com.google.api.codegen.config.SampleContext) CallingForm(com.google.api.codegen.viewmodel.CallingForm) Streams(com.google.common.collect.Streams) GapicProductConfig(com.google.api.codegen.config.GapicProductConfig) ProtoApiModel(com.google.api.codegen.config.ProtoApiModel) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext) List(java.util.List) Paths(java.nio.file.Paths) SampleSpec(com.google.api.codegen.config.SampleSpec) ImmutableTable(com.google.common.collect.ImmutableTable) MoreObjects.firstNonNull(com.google.common.base.MoreObjects.firstNonNull) ClientMethodType(com.google.api.codegen.viewmodel.ClientMethodType) ImmutableList(com.google.common.collect.ImmutableList) InterfaceContext(com.google.api.codegen.config.InterfaceContext) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext) ViewModel(com.google.api.codegen.viewmodel.ViewModel)

Example 12 with InterfaceContext

use of com.google.api.codegen.config.InterfaceContext in project toolkit by googleapis.

the class StaticLangGapicSamplesTransformer method generateSamplesFromSampleConfigs.

private List<ViewModel> generateSamplesFromSampleConfigs(List<InterfaceContext> interfaceContexts, GapicProductConfig productConfig) {
    SurfaceNamer namer = newSurfaceNamer.apply(productConfig);
    List<SampleContext> sampleContexts = getSampleContexts(interfaceContexts, productConfig);
    List<ViewModel> sampleFileViews = new ArrayList<>();
    for (SampleContext sampleContext : sampleContexts) {
        StaticLangApiMethodView methodView = apiMethodTransformer.generateApiMethod(sampleContext.methodContext(), sampleContext);
        MethodSampleView methodSampleView = methodView.samples().get(0);
        String fileName = namer.getApiSampleFileName(sampleContext.uniqueSampleId());
        String className = namer.getApiSampleClassName(sampleContext.uniqueSampleId());
        InterfaceContext interfaceContext = sampleContext.methodContext().getSurfaceInterfaceContext();
        sampleFileViews.add(newSampleFileView(productConfig, interfaceContext, className, fileName, methodView, methodSampleView));
    }
    return sampleFileViews;
}
Also used : MethodSampleView(com.google.api.codegen.viewmodel.MethodSampleView) SampleContext(com.google.api.codegen.config.SampleContext) StaticLangApiMethodView(com.google.api.codegen.viewmodel.StaticLangApiMethodView) ArrayList(java.util.ArrayList) ViewModel(com.google.api.codegen.viewmodel.ViewModel) InterfaceContext(com.google.api.codegen.config.InterfaceContext) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext)

Example 13 with InterfaceContext

use of com.google.api.codegen.config.InterfaceContext in project toolkit by googleapis.

the class DynamicLangGapicSamplesTransformer method generateSamplesFromSampleConfigs.

private List<ViewModel> generateSamplesFromSampleConfigs(List<InterfaceContext> interfaceContexts, GapicProductConfig productConfig) {
    SurfaceNamer namer = newSurfaceNamer.apply(productConfig);
    List<SampleContext> sampleContexts = getSampleContexts(interfaceContexts, productConfig);
    ImmutableList.Builder<ViewModel> sampleFileViews = ImmutableList.builder();
    for (SampleContext sampleContext : sampleContexts) {
        OptionalArrayMethodView methodView = apiMethodTransformer.generateApiMethod(sampleContext.methodContext(), sampleContext);
        MethodSampleView methodSampleView = methodView.samples().get(0);
        String fileName = namer.getApiSampleFileName(sampleContext.uniqueSampleId());
        InterfaceContext interfaceContext = sampleContext.methodContext().getSurfaceInterfaceContext();
        sampleFileViews.add(newSampleFileView(productConfig, interfaceContext, fileName, methodView, methodSampleView));
    }
    return sampleFileViews.build();
}
Also used : MethodSampleView(com.google.api.codegen.viewmodel.MethodSampleView) OptionalArrayMethodView(com.google.api.codegen.viewmodel.OptionalArrayMethodView) SampleContext(com.google.api.codegen.config.SampleContext) ImmutableList(com.google.common.collect.ImmutableList) ViewModel(com.google.api.codegen.viewmodel.ViewModel) InterfaceContext(com.google.api.codegen.config.InterfaceContext) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext)

Example 14 with InterfaceContext

use of com.google.api.codegen.config.InterfaceContext in project toolkit by googleapis.

the class DynamicLangGapicSamplesTransformer method getSampleContexts.

public List<SampleContext> getSampleContexts(List<InterfaceContext> interfaceContexts, GapicProductConfig productConfig) {
    SurfaceNamer namer = newSurfaceNamer.apply(productConfig);
    ImmutableTable<String, String, ImmutableList<SampleConfig>> sampleConfigTable = productConfig.getSampleConfigTable();
    ImmutableList.Builder<SampleContext> sampleContexts = ImmutableList.builder();
    // Loop through sample configs and and map each sample ID to its matching calling forms.
    // We need this information when we need to create, in a language-specific way, unique
    // sample ids when one sample id has multiple matching calling forms
    Map<String, List<CallingForm>> configsAndMatchingForms = new HashMap<>();
    for (InterfaceContext interfaceContext : interfaceContexts) {
        for (MethodModel method : interfaceContext.getSupportedMethods()) {
            MethodContext methodContext = interfaceContext.asRequestMethodContext(method);
            String interfaceName = interfaceContext.getInterfaceConfig().getInterfaceModel().getFullName();
            String methodName = method.getSimpleName();
            List<SampleConfig> sampleConfigs = sampleConfigTable.get(interfaceName, methodName);
            sampleConfigs = firstNonNull(sampleConfigs, ImmutableList.<SampleConfig>of());
            for (SampleConfig config : sampleConfigs) {
                List<CallingForm> allMatchingCallingForms = namer.getMatchingCallingForms(methodContext, config.callingPattern());
                List<CallingForm> existingForms = configsAndMatchingForms.get(config.id());
                if (existingForms == null) {
                    existingForms = new ArrayList<>();
                    configsAndMatchingForms.put(config.id(), existingForms);
                }
                existingForms.addAll(allMatchingCallingForms);
            }
        }
    }
    SampleFileRegistry registry = new SampleFileRegistry(namer, configsAndMatchingForms);
    for (InterfaceContext interfaceContext : interfaceContexts) {
        for (MethodModel method : interfaceContext.getSupportedMethods()) {
            MethodContext methodContext = interfaceContext.asRequestMethodContext(method);
            String interfaceName = interfaceContext.getInterfaceConfig().getInterfaceModel().getFullName();
            String methodName = method.getSimpleName();
            ImmutableList<SampleConfig> sampleConfigs = sampleConfigTable.get(interfaceName, methodName);
            if (sampleConfigs == null) {
                continue;
            }
            for (SampleConfig sampleConfig : sampleConfigs) {
                List<CallingForm> allMatchingCallingForms = configsAndMatchingForms.get(sampleConfig.id());
                for (CallingForm form : allMatchingCallingForms) {
                    InitCodeOutputType initCodeOutputType = methodContext.getMethodModel().getRequestStreaming() ? InitCodeOutputType.SingleObject : InitCodeOutputType.FieldList;
                    SampleContext sampleContext = SampleContext.newBuilder().uniqueSampleId(registry.getUniqueSampleId(sampleConfig, form)).sampleType(SampleSpec.SampleType.STANDALONE).callingForm(form).sampleConfig(sampleConfig).initCodeOutputType(initCodeOutputType).methodContext(methodContext).build();
                    sampleContexts.add(sampleContext);
                }
            }
        }
    }
    return sampleContexts.build();
}
Also used : MethodModel(com.google.api.codegen.config.MethodModel) SampleConfig(com.google.api.codegen.config.SampleConfig) HashMap(java.util.HashMap) ImmutableList(com.google.common.collect.ImmutableList) MethodContext(com.google.api.codegen.config.MethodContext) InterfaceContext(com.google.api.codegen.config.InterfaceContext) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext) InitCodeOutputType(com.google.api.codegen.metacode.InitCodeContext.InitCodeOutputType) SampleContext(com.google.api.codegen.config.SampleContext) CallingForm(com.google.api.codegen.viewmodel.CallingForm) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) List(java.util.List)

Example 15 with InterfaceContext

use of com.google.api.codegen.config.InterfaceContext in project toolkit by googleapis.

the class DynamicLangGapicSamplesTransformer method generateSamplesFromGapicConfigs.

private List<ViewModel> generateSamplesFromGapicConfigs(List<InterfaceContext> interfaceContexts, GapicProductConfig productConfig, SurfaceNamer namer) {
    List<MethodSampleView> allSamples = interfaceContexts.stream().flatMap(c -> apiMethodTransformer.generateApiMethods(c).stream()).flatMap(m -> m.samples().stream()).collect(ImmutableList.toImmutableList());
    SampleFileRegistry registry = new SampleFileRegistry(namer, allSamples);
    ImmutableList.Builder<ViewModel> sampleFileViews = ImmutableList.builder();
    for (InterfaceContext context : interfaceContexts) {
        List<OptionalArrayMethodView> methods = apiMethodTransformer.generateApiMethods(context);
        for (OptionalArrayMethodView method : methods) {
            for (MethodSampleView sample : method.samples()) {
                sampleFileViews.add(newSampleFileView(productConfig, context, registry.getSampleFileName(sample, method.name()), method, sample));
            }
        }
    }
    return sampleFileViews.build();
}
Also used : Arrays(java.util.Arrays) HashMap(java.util.HashMap) Function(java.util.function.Function) ArrayList(java.util.ArrayList) InterfaceContext(com.google.api.codegen.config.InterfaceContext) MethodSampleView(com.google.api.codegen.viewmodel.MethodSampleView) ImmutableList(com.google.common.collect.ImmutableList) MethodContext(com.google.api.codegen.config.MethodContext) MethodModel(com.google.api.codegen.config.MethodModel) ViewModel(com.google.api.codegen.viewmodel.ViewModel) Map(java.util.Map) DynamicLangSampleView(com.google.api.codegen.viewmodel.DynamicLangSampleView) SampleConfig(com.google.api.codegen.config.SampleConfig) GapicCodePathMapper(com.google.api.codegen.gapic.GapicCodePathMapper) InitCodeOutputType(com.google.api.codegen.metacode.InitCodeContext.InitCodeOutputType) OptionalArrayMethodView(com.google.api.codegen.viewmodel.OptionalArrayMethodView) SampleContext(com.google.api.codegen.config.SampleContext) CallingForm(com.google.api.codegen.viewmodel.CallingForm) Streams(com.google.common.collect.Streams) GapicProductConfig(com.google.api.codegen.config.GapicProductConfig) ProtoApiModel(com.google.api.codegen.config.ProtoApiModel) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext) List(java.util.List) Paths(java.nio.file.Paths) SampleSpec(com.google.api.codegen.config.SampleSpec) ImmutableTable(com.google.common.collect.ImmutableTable) MoreObjects.firstNonNull(com.google.common.base.MoreObjects.firstNonNull) MethodSampleView(com.google.api.codegen.viewmodel.MethodSampleView) OptionalArrayMethodView(com.google.api.codegen.viewmodel.OptionalArrayMethodView) ImmutableList(com.google.common.collect.ImmutableList) ViewModel(com.google.api.codegen.viewmodel.ViewModel) InterfaceContext(com.google.api.codegen.config.InterfaceContext) GapicInterfaceContext(com.google.api.codegen.config.GapicInterfaceContext)

Aggregations

InterfaceContext (com.google.api.codegen.config.InterfaceContext)18 ArrayList (java.util.ArrayList)13 StaticLangApiMethodView (com.google.api.codegen.viewmodel.StaticLangApiMethodView)11 GapicInterfaceContext (com.google.api.codegen.config.GapicInterfaceContext)10 ViewModel (com.google.api.codegen.viewmodel.ViewModel)10 MethodContext (com.google.api.codegen.config.MethodContext)9 SampleContext (com.google.api.codegen.config.SampleContext)8 ImmutableList (com.google.common.collect.ImmutableList)8 List (java.util.List)8 MethodModel (com.google.api.codegen.config.MethodModel)7 CallingForm (com.google.api.codegen.viewmodel.CallingForm)7 GapicProductConfig (com.google.api.codegen.config.GapicProductConfig)6 ProtoApiModel (com.google.api.codegen.config.ProtoApiModel)6 InitCodeOutputType (com.google.api.codegen.metacode.InitCodeContext.InitCodeOutputType)6 FlatteningConfig (com.google.api.codegen.config.FlatteningConfig)5 MethodConfig (com.google.api.codegen.config.MethodConfig)5 SampleConfig (com.google.api.codegen.config.SampleConfig)5 GapicCodePathMapper (com.google.api.codegen.gapic.GapicCodePathMapper)5 SurfaceNamer (com.google.api.codegen.transformer.SurfaceNamer)5 HashMap (java.util.HashMap)5