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