This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit 0dbc4e8e50b80c8de55b0f0f63a13bdb696e575a Author: kakulisen <[email protected]> AuthorDate: Thu Jun 6 18:47:24 2019 +0800 Support generating microservice projects according to service type option Signed-off-by: kakulisen <[email protected]> --- .../servicecomb/toolkit/cli/CodeGenerate.java | 13 ++++++-- .../toolkit/codegen/ProjectMetaConstant.java | 23 ++++++++++++++ .../toolkit/codegen/ServiceCombCodegen.java | 37 ++++++++++++++++------ 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java index b46b67e..ddecb36 100755 --- a/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java +++ b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java @@ -31,6 +31,7 @@ import java.util.Collections; import org.apache.servicecomb.toolkit.GeneratorFactory; import org.apache.servicecomb.toolkit.CodeGenerator; +import org.apache.servicecomb.toolkit.codegen.ProjectMetaConstant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,11 +81,15 @@ public class CodeGenerate implements Runnable { description = "model package in generated microservice project") private String modelPackage; + @Option(name = {"--service-type"}, title = "service type", + description = "microservice type of generated microservice project. optional value is provider,consumer,all") + private String serviceType; + @Override public void run() { CodegenConfigurator configurator = new CodegenConfigurator(); - CodeGenerator codegenerator = GeneratorFactory.getGenerator(CodeGenerator.class,"default"); + CodeGenerator codegenerator = GeneratorFactory.getGenerator(CodeGenerator.class, "default"); configurator.setOutputDir(output) .setGroupId(groupId) @@ -95,6 +100,8 @@ public class CodeGenerate implements Runnable { .setApiPackage(apiPackage) .setModelPackage(modelPackage); + configurator.addAdditionalProperty(ProjectMetaConstant.SERVICE_TYPE, serviceType); + if (isNotEmpty(specFile)) { File contractFile = new File(specFile); @@ -109,7 +116,7 @@ public class CodeGenerate implements Runnable { .addAdditionalProperty("apiName", file.toFile().getName().split("\\.")[0]); try { - codegenerator.configure(Collections.singletonMap("configurator",configurator)); + codegenerator.configure(Collections.singletonMap("configurator", configurator)); codegenerator.generate(); } catch (RuntimeException e) { throw new RuntimeException("Failed to generate code base on file " + file.toFile().getName()); @@ -124,7 +131,7 @@ public class CodeGenerate implements Runnable { } } else { configurator.setInputSpec(specFile); - codegenerator.configure(Collections.singletonMap("configurator",configurator)); + codegenerator.configure(Collections.singletonMap("configurator", configurator)); codegenerator.generate(); } diff --git a/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ProjectMetaConstant.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ProjectMetaConstant.java new file mode 100644 index 0000000..748600f --- /dev/null +++ b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ProjectMetaConstant.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.servicecomb.toolkit.codegen; + +public class ProjectMetaConstant { + + public static final String SERVICE_TYPE = "serviceType"; +} diff --git a/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java index cbfbb46..ebecd71 100755 --- a/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java +++ b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java @@ -20,6 +20,7 @@ package org.apache.servicecomb.toolkit.codegen; import java.io.File; import java.util.List; import java.util.Map; +import java.util.Optional; import io.swagger.codegen.CliOption; import io.swagger.codegen.CodegenConfig; @@ -68,9 +69,6 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo private String pojoApiImplTemplate = "apiImpl.mustache"; - private int modelSwitch = 1; - - @Override public CodegenType getTag() { return CodegenType.SERVER; @@ -184,17 +182,38 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo additionalProperties.put("microserviceName", microserviceName); processParentProjectOpts(); - processProviderProjectOpts(); - processConsumerOpts(); + switch ((String) Optional.ofNullable(additionalProperties.get(ProjectMetaConstant.SERVICE_TYPE)).orElse("")) { + case "provider": + processProviderProjectOpts(); + processPojoProvider(); + break; + case "consumer": + processConsumerOpts(); + processPojoConsumer(); + apiTemplateFiles().remove("api.mustache"); + break; + case "all": + default: + processProviderProjectOpts(); + processPojoProvider(); + processConsumerOpts(); + processPojoConsumer(); + } processModelProjectOpts(); - processPojo(); } - private void processPojo() { + private void processPojoProvider() { if (!POJO_LIBRARY.equals(getLibrary())) { return; } apiTemplateFiles.put(pojoApiImplTemplate, ".java"); + additionalProperties.put("isPOJO", true); + } + + private void processPojoConsumer() { + if (!POJO_LIBRARY.equals(getLibrary())) { + return; + } apiTemplateFiles.remove(apiConsumerTemplate); apiTemplateFiles.put(apiConsumerTemplateForPojo, "Consumer.java"); additionalProperties.put("isPOJO", true); @@ -242,8 +261,6 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo resourcesFolder(providerProject), "microservice.yaml") ); - - apiTemplateFiles.put(apiConsumerTemplate, "Consumer.java"); } private void processConsumerOpts() { @@ -273,6 +290,8 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo resourcesFolder(consumerProject), "microservice.yaml") ); + + apiTemplateFiles.put(apiConsumerTemplate, "Consumer.java"); } @Override
