|
| 1 | +package com.algolia.codegen.cts.lambda; |
| 2 | + |
| 3 | +import com.algolia.codegen.cts.tests.ParametersWithDataType; |
| 4 | +import com.algolia.codegen.exceptions.CTSException; |
| 5 | +import com.samskivert.mustache.Mustache; |
| 6 | +import com.samskivert.mustache.Template; |
| 7 | +import io.swagger.v3.core.util.Json; |
| 8 | +import java.io.IOException; |
| 9 | +import java.io.Writer; |
| 10 | +import java.util.Map; |
| 11 | +import org.openapitools.codegen.CodegenModel; |
| 12 | +import org.openapitools.codegen.CodegenOperation; |
| 13 | +import org.openapitools.codegen.DefaultCodegen; |
| 14 | +import org.openapitools.codegen.TemplateManager; |
| 15 | +import org.openapitools.codegen.api.TemplatePathLocator; |
| 16 | +import org.openapitools.codegen.api.TemplatingEngineAdapter; |
| 17 | +import org.openapitools.codegen.api.TemplatingExecutor; |
| 18 | +import org.openapitools.codegen.templating.CommonTemplateContentLocator; |
| 19 | +import org.openapitools.codegen.templating.GeneratorTemplateContentLocator; |
| 20 | +import org.openapitools.codegen.templating.TemplateManagerOptions; |
| 21 | + |
| 22 | +public class DynamicSnippetLambda implements Mustache.Lambda { |
| 23 | + |
| 24 | + private final TemplatingExecutor executor; |
| 25 | + private final TemplatingEngineAdapter adaptor; |
| 26 | + |
| 27 | + private ParametersWithDataType paramsType; |
| 28 | + private Map<String, CodegenOperation> operations; |
| 29 | + |
| 30 | + public DynamicSnippetLambda( |
| 31 | + DefaultCodegen generator, |
| 32 | + Map<String, CodegenModel> models, |
| 33 | + Map<String, CodegenOperation> operations, |
| 34 | + String language, |
| 35 | + String client |
| 36 | + ) { |
| 37 | + this.operations = operations; |
| 38 | + this.paramsType = new ParametersWithDataType(models, language, client, true); |
| 39 | + |
| 40 | + // we can't access the default template manager, so we have to create our own |
| 41 | + TemplateManager templateManager = new TemplateManager( |
| 42 | + new TemplateManagerOptions(generator.isEnableMinimalUpdate(), generator.isSkipOverwrite()), |
| 43 | + generator.getTemplatingEngine(), |
| 44 | + new TemplatePathLocator[] { new GeneratorTemplateContentLocator(generator), new CommonTemplateContentLocator() } |
| 45 | + ); |
| 46 | + |
| 47 | + this.executor = templateManager; |
| 48 | + this.adaptor = generator.getTemplatingEngine(); |
| 49 | + } |
| 50 | + |
| 51 | + @Override |
| 52 | + public void execute(Template.Fragment fragment, Writer writer) throws IOException, CTSException { |
| 53 | + String snippet = fragment.execute(); |
| 54 | + String operationId = snippet.split(" ", 2)[0]; |
| 55 | + |
| 56 | + CodegenOperation operation = operations.get(operationId); |
| 57 | + if (operation == null) { |
| 58 | + throw new CTSException("Cannot find operation for method: " + operationId); |
| 59 | + } |
| 60 | + |
| 61 | + // set the method attributes |
| 62 | + Map<String, Object> context = (Map<String, Object>) fragment.context(); |
| 63 | + context.put("method", operationId); |
| 64 | + context.put("isAsyncMethod", (boolean) operation.vendorExtensions.getOrDefault("x-asynchronous-helper", true)); |
| 65 | + context.put("isHelper", (boolean) operation.vendorExtensions.getOrDefault("x-helper", false)); |
| 66 | + context.put("hasParams", operation.hasParams); |
| 67 | + |
| 68 | + // set the parameters |
| 69 | + Map<String, Object> parameters = Json.mapper().readValue(params, Map.class); |
| 70 | + System.out.println("parameters: " + parameters); |
| 71 | + context.put("parameters", params); |
| 72 | + |
| 73 | + writer.write(adaptor.compileTemplate(executor, context, "tests/client/method.mustache")); |
| 74 | + } |
| 75 | +} |
0 commit comments