You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/06/21 07:10:00 UTC

[servicecomb-toolkit] 44/49: Support generating microservice projects according to service type option

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 <18...@163.com>
AuthorDate: Thu Jun 6 18:47:24 2019 +0800

    Support generating microservice projects according to service type option
    
    Signed-off-by: kakulisen <18...@163.com>
---
 .../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