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 5e1fa09b126b93dfc0add65bf677e51c5f23daf5 Author: MabinGo <bin...@huawei.com> AuthorDate: Thu Jun 6 16:55:06 2019 +0800 code refactor Signed-off-by: MabinGo <bin...@huawei.com> --- LICENSE | 6 +- README-ZH.md | 4 +- README.md | 4 +- {toolkit-cli => cli}/pom.xml | 7 +- .../servicecomb/toolkit/cli/CodeGenerate.java | 22 ++++- .../servicecomb/toolkit/cli/DocGenerate.java | 41 ++++++---- .../servicecomb/toolkit/cli/ToolkitMain.java | 0 .../src/main/resources/application.properties | 0 {toolkit-cli => cli}/src/main/resources/log4j2.xml | 0 .../apache/servicecomb/toolkit/cli/CliTest.java | 0 .../resources/contracts/CalculateEndpoint.yaml | 0 .../test/resources/contracts/HelloEndPoint.yaml | 0 .../contracts/pojo/CodeFirstHelloEndPoint.yaml | 0 .../src/test/resources/swagger.yaml | 0 {code-generator => codegen}/pom.xml | 8 +- .../toolkit/codegen/DefaultCodeGenerator.java | 22 +++-- .../toolkit/codegen/GetGenericClassTypeLambda.java | 0 .../toolkit/codegen/RemoveImplSuffixLambda.java | 0 .../toolkit/codegen/ServiceCombCodegen.java | 0 .../services/io.swagger.codegen.CodegenConfig | 0 .../org.apache.servicecomb.toolkit.CodeGenerator | 2 +- .../ServiceComb/consumer/Application.mustache | 0 .../ServiceComb/consumer/apiConsumer.mustache | 0 .../consumer/bodyParamsConsumer.mustache | 0 .../consumer/formParamsConsumer.mustache | 0 .../consumer/headerParamsConsumer.mustache | 0 .../ServiceComb/consumer/microservice.mustache | 0 .../consumer/pathParamsConsumer.mustache | 0 .../ServiceComb/consumer/pojo/apiConsumer.mustache | 0 .../resources/ServiceComb/consumer/pom.mustache | 0 .../consumer/queryParamsConsumer.mustache | 0 .../consumer/springboot}/Application.mustache | 0 .../ServiceComb/consumer/springboot/pom.mustache | 0 .../main/resources/ServiceComb/enumClass.mustache | 0 .../resources/ServiceComb/enumOuterClass.mustache | 0 .../libraries/JAX-RS}/Application.mustache | 0 .../ServiceComb/libraries/JAX-RS/api.mustache | 0 .../libraries/JAX-RS}/bodyParams.mustache | 0 .../libraries/JAX-RS/formParams.mustache | 0 .../libraries/JAX-RS/headerParams.mustache | 0 .../libraries/JAX-RS/pathParams.mustache | 0 .../ServiceComb/libraries/JAX-RS/pom.mustache | 0 .../libraries/JAX-RS/queryParams.mustache | 0 .../libraries/POJO/Application.mustache | 0 .../ServiceComb/libraries/POJO/api.mustache | 0 .../ServiceComb/libraries/POJO/apiImpl.mustache | 0 .../libraries/POJO}/bodyParams.mustache | 0 .../ServiceComb/libraries/POJO/formParams.mustache | 0 .../libraries/POJO/headerParams.mustache | 0 .../ServiceComb/libraries/POJO/pathParams.mustache | 0 .../ServiceComb/libraries/POJO/pom.mustache | 0 .../libraries/POJO/queryParams.mustache | 0 .../libraries/SpringBoot}/Application.mustache | 0 .../ServiceComb/libraries/SpringBoot/api.mustache | 0 .../libraries/SpringBoot}/bodyParams.mustache | 0 .../libraries/SpringBoot}/formParams.mustache | 0 .../libraries/SpringBoot}/headerParams.mustache | 0 .../libraries/SpringBoot/operationMethod.mustache | 0 .../libraries/SpringBoot}/pathParams.mustache | 0 .../ServiceComb/libraries/SpringBoot/pom.mustache | 0 .../libraries/SpringBoot}/queryParams.mustache | 0 .../libraries/SpringMVC}/Application.mustache | 0 .../ServiceComb/libraries/SpringMVC/api.mustache | 0 .../libraries/SpringMVC}/bodyParams.mustache | 0 .../libraries/SpringMVC}/formParams.mustache | 0 .../libraries/SpringMVC}/headerParams.mustache | 0 .../libraries/SpringMVC}/pathParams.mustache | 0 .../ServiceComb/libraries/SpringMVC/pom.mustache | 0 .../libraries/SpringMVC}/queryParams.mustache | 0 .../src/main/resources/ServiceComb/log4j2.mustache | 0 .../resources/ServiceComb/model/model.mustache | 0 .../main/resources/ServiceComb/model/pom.mustache | 0 .../src/main/resources/ServiceComb/pojo.mustache | 0 .../resources/ServiceComb/project/pom.mustache | 0 .../ServiceComb/provider/microservice.mustache | 0 .../resources/ServiceComb/returnTypes.mustache | 0 .../servicecomb/toolkit/codegen/GeneratorTest.java | 22 ++++- .../servicecomb/toolkit/codegen/ReflectUtils.java | 0 .../toolkit/codegen/ServiceCombCodegenTest.java | 0 .../src/test/resources/swagger.yaml | 0 common/pom.xml | 6 ++ .../servicecomb/toolkit/common/ContractsUtils.java | 95 ---------------------- ...tsUtils.java => DefaultContractsGenerator.java} | 76 +++++++++-------- ...g.apache.servicecomb.toolkit.ContractsGenerator | 2 +- .../toolkit/common/ContractsGeneratorTest.java | 26 ++++-- .../toolkit/common/OtherContractsGenerator.java | 33 ++++---- ...g.apache.servicecomb.toolkit.ContractsGenerator | 2 +- {code-generator => core}/pom.xml | 31 ++----- .../apache/servicecomb/toolkit}/CodeGenerator.java | 13 +-- .../servicecomb/toolkit/ContractsGenerator.java | 10 +-- .../apache/servicecomb/toolkit}/DocGenerator.java | 10 +-- .../org/apache/servicecomb/toolkit/Generator.java | 10 ++- .../servicecomb/toolkit/GeneratorFactory.java | 61 ++++++++++++++ .../toolkit/docgen/DocGeneratorManager.java | 48 ----------- {doc-generator => docgen}/pom.xml | 8 +- .../toolkit/docgen/ContractsAsciidocGenerator.java | 28 ++++++- .../docgen/ContractsSwaggerUIGenerator.java | 27 +++++- .../org.apache.servicecomb.toolkit.DocGenerator | 0 .../src/main/resources/webroot/swagger-ui.html | 0 .../src/test/java/docgen/DocGeneratorTest.java | 45 +++++----- .../src/test/resources/HelloEndPoint.yaml | 0 pom.xml | 7 +- toolkit-maven-plugin/pom.xml | 2 +- .../toolkit/plugin/ContractGenerator.java | 12 ++- .../toolkit/plugin/GenerateContractsDocMojo.java | 17 ++-- 105 files changed, 367 insertions(+), 340 deletions(-) diff --git a/LICENSE b/LICENSE index 3d03b1b..7769b07 100755 --- a/LICENSE +++ b/LICENSE @@ -201,9 +201,9 @@ limitations under the License. ================================================================ -For code-generator/src/main/resources/ServiceComb/* -For toolkit-cli/src/test/resources/swagger.yaml -For code-generator/src/test/resources/swagger.yaml +For codegen/src/main/resources/ServiceComb/* +For cli/src/test/resources/swagger.yaml +For codegen/src/test/resources/swagger.yaml ================================================================ This product bundles files from swagger-codegen which is licensed under the Apache License v2. For details, see https://github.com/swagger-api/swagger-codegen diff --git a/README-ZH.md b/README-ZH.md index 2a97256..4e961f6 100755 --- a/README-ZH.md +++ b/README-ZH.md @@ -83,8 +83,8 @@ $ cd toolkit $ mvn clean install ``` -### 3.2 使用toolkit-cli工具 -可执行jar包位于toolkit/toolkit-cli/target/bin目录下 +### 3.2 使用toolkit cli工具 +可执行jar包位于toolkit/cli/target/bin目录下 ```shell $ java -jar toolkit-cli-{version}.jar help ``` diff --git a/README.md b/README.md index af77348..86558ba 100755 --- a/README.md +++ b/README.md @@ -82,8 +82,8 @@ $ cd toolkit $ mvn clean install ``` -### 3.2 Use the toolkit-cli -The executable jar package is located in the toolkit/toolkit-cli/target/bin directory +### 3.2 Use the toolkit cli +The executable jar package is located in the toolkit/cli/target/bin directory ```shell $ java -jar toolkit-cli-{version}.jar help ``` diff --git a/toolkit-cli/pom.xml b/cli/pom.xml similarity index 95% rename from toolkit-cli/pom.xml rename to cli/pom.xml index dc8ac81..474e22c 100755 --- a/toolkit-cli/pom.xml +++ b/cli/pom.xml @@ -26,7 +26,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>toolkit-cli</artifactId> + <artifactId>cli</artifactId> <properties> <main.class>org.apache.servicecomb.toolkit.cli.ToolkitMain</main.class> @@ -48,7 +48,7 @@ <dependency> <groupId>org.apache.servicecomb</groupId> - <artifactId>code-generator</artifactId> + <artifactId>codegen</artifactId> <version>${project.version}</version> </dependency> @@ -61,7 +61,7 @@ <dependency> <groupId>org.apache.servicecomb</groupId> - <artifactId>doc-generator</artifactId> + <artifactId>docgen</artifactId> <version>${project.version}</version> </dependency> @@ -113,6 +113,7 @@ <fork>true</fork> <mainClass>${main.class}</mainClass> <outputDirectory>target/bin</outputDirectory> + <finalName>toolkit-cli-${project.version}</finalName> </configuration> <executions> <execution> diff --git a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java similarity index 82% rename from toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java rename to cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java index df01175..b46b67e 100755 --- a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java +++ b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java @@ -27,8 +27,10 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.Collections; -import org.apache.servicecomb.toolkit.codegen.DefaultCodeGenerator; +import org.apache.servicecomb.toolkit.GeneratorFactory; +import org.apache.servicecomb.toolkit.CodeGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -70,18 +72,28 @@ public class CodeGenerate implements Runnable { description = "artifact version in generated microservice project") private String artifactVersion; + @Option(name = {"--api-package"}, title = "api package", + description = "api package in generated microservice project") + private String apiPackage; + + @Option(name = {"--model-package"}, title = "model package", + description = "model package in generated microservice project") + private String modelPackage; @Override public void run() { CodegenConfigurator configurator = new CodegenConfigurator(); + CodeGenerator codegenerator = GeneratorFactory.getGenerator(CodeGenerator.class,"default"); configurator.setOutputDir(output) .setGroupId(groupId) .setArtifactId(artifactId) .setArtifactVersion(artifactVersion) .setLibrary(programmingModel) - .setLang(framework); + .setLang(framework) + .setApiPackage(apiPackage) + .setModelPackage(modelPackage); if (isNotEmpty(specFile)) { @@ -97,7 +109,8 @@ public class CodeGenerate implements Runnable { .addAdditionalProperty("apiName", file.toFile().getName().split("\\.")[0]); try { - new DefaultCodeGenerator().opts(configurator).generate(); + codegenerator.configure(Collections.singletonMap("configurator",configurator)); + codegenerator.generate(); } catch (RuntimeException e) { throw new RuntimeException("Failed to generate code base on file " + file.toFile().getName()); } @@ -111,7 +124,8 @@ public class CodeGenerate implements Runnable { } } else { configurator.setInputSpec(specFile); - new DefaultCodeGenerator().opts(configurator).generate(); + codegenerator.configure(Collections.singletonMap("configurator",configurator)); + codegenerator.generate(); } LOGGER.info("Success to generate code, the directory is: {}", output); diff --git a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java similarity index 67% rename from toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java rename to cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java index ca007d6..290feea 100755 --- a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java +++ b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/DocGenerate.java @@ -26,10 +26,12 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.HashMap; +import java.util.Map; -import org.apache.commons.lang3.StringUtils; import org.apache.servicecomb.swagger.SwaggerUtils; -import org.apache.servicecomb.toolkit.docgen.DocGeneratorManager; +import org.apache.servicecomb.toolkit.GeneratorFactory; +import org.apache.servicecomb.toolkit.DocGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -60,19 +62,23 @@ public class DocGenerate implements Runnable { try { Path specPath = Paths.get(specFile); - String[] retValues = new String[1]; + boolean[] retValues = new boolean[1]; String[] fileName = new String[1]; + DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, format); + Map<String, Object> docGeneratorConfig = new HashMap<>(); + if (Files.isDirectory(specPath)) { Files.walkFileTree(specPath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - retValues[0] = DocGeneratorManager.generate(SwaggerUtils.parseSwagger(file.toUri().toURL()), - output + File.separator + file.toFile().getName().substring(0, file.toFile().getName().indexOf(".")), - format); - if (StringUtils.isEmpty(retValues[0])) { + docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(file.toUri().toURL())); + docGeneratorConfig.put("outputPath", output + File.separator + file.toFile().getName().substring(0, file.toFile().getName().indexOf("."))); + docGenerator.configure(docGeneratorConfig); + retValues[0] = docGenerator.generate(); + if (retValues[0]) { fileName[0] = file.toFile().getName(); return FileVisitResult.TERMINATE; } @@ -83,20 +89,23 @@ public class DocGenerate implements Runnable { } else if (Files.isRegularFile(specPath)) { fileName[0] = specPath.toFile().getName(); - retValues[0] = DocGeneratorManager.generate(SwaggerUtils.parseSwagger(specPath.toUri().toURL()), - output + File.separator + new File(specFile).getName() - .substring(0, new File(specFile).getName().indexOf(".")), - format); + docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(specPath.toUri().toURL())); + docGeneratorConfig.put("outputPath", output + File.separator + new File(specFile).getName() + .substring(0, new File(specFile).getName().indexOf("."))); + docGenerator.configure(docGeneratorConfig); + retValues[0] = docGenerator.generate(); + } else { fileName[0] = specFile; - retValues[0] = DocGeneratorManager.generate(SwaggerUtils.parseSwagger(URI.create(specFile).toURL()), - output + File.separator + new File(specFile).getName() - .substring(0, new File(specFile).getName().indexOf(".")), - format); + docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(URI.create(specFile).toURL())); + docGeneratorConfig.put("outputPath",output + File.separator + new File(specFile).getName() + .substring(0, new File(specFile).getName().indexOf("."))); + docGenerator.configure(docGeneratorConfig); + retValues[0] = docGenerator.generate(); } - if (StringUtils.isEmpty(retValues[0])) { + if (retValues[0]) { LOGGER.error("Failed to generate document base on file {}", fileName[0]); return; } diff --git a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java b/cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java similarity index 100% rename from toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java rename to cli/src/main/java/org/apache/servicecomb/toolkit/cli/ToolkitMain.java diff --git a/toolkit-cli/src/main/resources/application.properties b/cli/src/main/resources/application.properties similarity index 100% copy from toolkit-cli/src/main/resources/application.properties copy to cli/src/main/resources/application.properties diff --git a/toolkit-cli/src/main/resources/log4j2.xml b/cli/src/main/resources/log4j2.xml similarity index 100% rename from toolkit-cli/src/main/resources/log4j2.xml rename to cli/src/main/resources/log4j2.xml diff --git a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java b/cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java similarity index 100% rename from toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java rename to cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java diff --git a/toolkit-cli/src/test/resources/contracts/CalculateEndpoint.yaml b/cli/src/test/resources/contracts/CalculateEndpoint.yaml similarity index 100% rename from toolkit-cli/src/test/resources/contracts/CalculateEndpoint.yaml rename to cli/src/test/resources/contracts/CalculateEndpoint.yaml diff --git a/toolkit-cli/src/test/resources/contracts/HelloEndPoint.yaml b/cli/src/test/resources/contracts/HelloEndPoint.yaml similarity index 100% rename from toolkit-cli/src/test/resources/contracts/HelloEndPoint.yaml rename to cli/src/test/resources/contracts/HelloEndPoint.yaml diff --git a/toolkit-cli/src/test/resources/contracts/pojo/CodeFirstHelloEndPoint.yaml b/cli/src/test/resources/contracts/pojo/CodeFirstHelloEndPoint.yaml similarity index 100% rename from toolkit-cli/src/test/resources/contracts/pojo/CodeFirstHelloEndPoint.yaml rename to cli/src/test/resources/contracts/pojo/CodeFirstHelloEndPoint.yaml diff --git a/toolkit-cli/src/test/resources/swagger.yaml b/cli/src/test/resources/swagger.yaml similarity index 100% rename from toolkit-cli/src/test/resources/swagger.yaml rename to cli/src/test/resources/swagger.yaml diff --git a/code-generator/pom.xml b/codegen/pom.xml similarity index 93% copy from code-generator/pom.xml copy to codegen/pom.xml index ae53cd5..0a9348a 100755 --- a/code-generator/pom.xml +++ b/codegen/pom.xml @@ -26,7 +26,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>code-generator</artifactId> + <artifactId>codegen</artifactId> <properties> @@ -38,6 +38,12 @@ <dependencies> <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>core</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-codegen</artifactId> <version>${swagger-codegen-version}</version> diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java similarity index 74% rename from code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java rename to codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java index 04f14d3..05760c5 100755 --- a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java +++ b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/DefaultCodeGenerator.java @@ -17,8 +17,9 @@ package org.apache.servicecomb.toolkit.codegen; -import java.io.File; -import java.util.List; +import java.util.Map; + +import org.apache.servicecomb.toolkit.CodeGenerator; import io.swagger.codegen.DefaultGenerator; import io.swagger.codegen.config.CodegenConfigurator; @@ -28,15 +29,24 @@ public class DefaultCodeGenerator implements CodeGenerator { private DefaultGenerator generator = new DefaultGenerator(); @Override - public CodeGenerator opts(CodegenConfigurator opts) { + public boolean canProcess(String type) { + return "default".equals(type); + } + @Override + public void configure(Map<String, Object> config) { + CodegenConfigurator opts = (CodegenConfigurator) config.get("configurator"); generator.setGenerateSwaggerMetadata(false); generator.opts(opts.toClientOptInput()); - return this; } @Override - public List<File> generate() { - return generator.generate(); + public boolean generate() { + + if (generator.generate().size() > 0) { + return true; + } + + return false; } } diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/GetGenericClassTypeLambda.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/GetGenericClassTypeLambda.java similarity index 100% rename from code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/GetGenericClassTypeLambda.java rename to codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/GetGenericClassTypeLambda.java diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java similarity index 100% rename from code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java rename to codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java b/codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java similarity index 100% rename from code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java rename to codegen/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java diff --git a/code-generator/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig b/codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig similarity index 100% rename from code-generator/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig rename to codegen/src/main/resources/META-INF/services/io.swagger.codegen.CodegenConfig diff --git a/toolkit-cli/src/main/resources/application.properties b/codegen/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.CodeGenerator similarity index 93% copy from toolkit-cli/src/main/resources/application.properties copy to codegen/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.CodeGenerator index a278788..1216792 100755 --- a/toolkit-cli/src/main/resources/application.properties +++ b/codegen/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.CodeGenerator @@ -15,4 +15,4 @@ # limitations under the License. # -version=${project.version} \ No newline at end of file +org.apache.servicecomb.toolkit.codegen.DefaultCodeGenerator \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/consumer/Application.mustache b/codegen/src/main/resources/ServiceComb/consumer/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/Application.mustache rename to codegen/src/main/resources/ServiceComb/consumer/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/apiConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/apiConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/apiConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/apiConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/bodyParamsConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/bodyParamsConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/bodyParamsConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/bodyParamsConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/formParamsConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/formParamsConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/formParamsConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/formParamsConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/headerParamsConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/headerParamsConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/headerParamsConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/headerParamsConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/microservice.mustache b/codegen/src/main/resources/ServiceComb/consumer/microservice.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/microservice.mustache rename to codegen/src/main/resources/ServiceComb/consumer/microservice.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/pathParamsConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/pathParamsConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/pathParamsConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/pathParamsConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/pojo/apiConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/pojo/apiConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/pojo/apiConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/pojo/apiConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/pom.mustache b/codegen/src/main/resources/ServiceComb/consumer/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/pom.mustache rename to codegen/src/main/resources/ServiceComb/consumer/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/queryParamsConsumer.mustache b/codegen/src/main/resources/ServiceComb/consumer/queryParamsConsumer.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/queryParamsConsumer.mustache rename to codegen/src/main/resources/ServiceComb/consumer/queryParamsConsumer.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache b/codegen/src/main/resources/ServiceComb/consumer/springboot/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache rename to codegen/src/main/resources/ServiceComb/consumer/springboot/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/springboot/pom.mustache b/codegen/src/main/resources/ServiceComb/consumer/springboot/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/springboot/pom.mustache rename to codegen/src/main/resources/ServiceComb/consumer/springboot/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/enumClass.mustache b/codegen/src/main/resources/ServiceComb/enumClass.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/enumClass.mustache rename to codegen/src/main/resources/ServiceComb/enumClass.mustache diff --git a/code-generator/src/main/resources/ServiceComb/enumOuterClass.mustache b/codegen/src/main/resources/ServiceComb/enumOuterClass.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/enumOuterClass.mustache rename to codegen/src/main/resources/ServiceComb/enumOuterClass.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/Application.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/Application.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/api.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/api.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/api.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/api.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/bodyParams.mustache old mode 100644 new mode 100755 similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/bodyParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/formParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/formParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/formParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/formParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/headerParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/headerParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/headerParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/headerParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/pathParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/pathParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/pathParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/pathParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/pom.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/pom.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/queryParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/JAX-RS/queryParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/queryParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/JAX-RS/queryParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/Application.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/Application.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/api.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/api.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/api.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/api.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/apiImpl.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/apiImpl.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/apiImpl.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/apiImpl.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/bodyParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache old mode 100755 new mode 100644 similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/bodyParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/pom.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/pom.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/consumer/springboot/Application.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/consumer/springboot/Application.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/bodyParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/bodyParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/formParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/formParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/headerParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/headerParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/pathParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/pathParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/queryParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/queryParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/Application.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/Application.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/JAX-RS/Application.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/Application.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/api.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/api.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/api.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/api.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/bodyParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/bodyParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/formParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/formParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/headerParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/headerParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/pathParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/pathParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/pom.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringMVC/pom.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache b/codegen/src/main/resources/ServiceComb/libraries/SpringMVC/queryParams.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache rename to codegen/src/main/resources/ServiceComb/libraries/SpringMVC/queryParams.mustache diff --git a/code-generator/src/main/resources/ServiceComb/log4j2.mustache b/codegen/src/main/resources/ServiceComb/log4j2.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/log4j2.mustache rename to codegen/src/main/resources/ServiceComb/log4j2.mustache diff --git a/code-generator/src/main/resources/ServiceComb/model/model.mustache b/codegen/src/main/resources/ServiceComb/model/model.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/model/model.mustache rename to codegen/src/main/resources/ServiceComb/model/model.mustache diff --git a/code-generator/src/main/resources/ServiceComb/model/pom.mustache b/codegen/src/main/resources/ServiceComb/model/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/model/pom.mustache rename to codegen/src/main/resources/ServiceComb/model/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/pojo.mustache b/codegen/src/main/resources/ServiceComb/pojo.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/pojo.mustache rename to codegen/src/main/resources/ServiceComb/pojo.mustache diff --git a/code-generator/src/main/resources/ServiceComb/project/pom.mustache b/codegen/src/main/resources/ServiceComb/project/pom.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/project/pom.mustache rename to codegen/src/main/resources/ServiceComb/project/pom.mustache diff --git a/code-generator/src/main/resources/ServiceComb/provider/microservice.mustache b/codegen/src/main/resources/ServiceComb/provider/microservice.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/provider/microservice.mustache rename to codegen/src/main/resources/ServiceComb/provider/microservice.mustache diff --git a/code-generator/src/main/resources/ServiceComb/returnTypes.mustache b/codegen/src/main/resources/ServiceComb/returnTypes.mustache similarity index 100% rename from code-generator/src/main/resources/ServiceComb/returnTypes.mustache rename to codegen/src/main/resources/ServiceComb/returnTypes.mustache diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java b/codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java similarity index 78% rename from code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java rename to codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java index e7ae3d4..2e4a7db 100755 --- a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java +++ b/codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java @@ -17,14 +17,15 @@ package org.apache.servicecomb.toolkit.codegen; -import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.List; +import java.util.Collections; +import org.apache.servicecomb.toolkit.CodeGenerator; +import org.apache.servicecomb.toolkit.GeneratorFactory; import org.junit.Assert; import org.junit.Test; @@ -54,7 +55,8 @@ public class GeneratorTest { configurator.setOutputDir(tempDir.toFile().getCanonicalPath() + "/ServiceComb"); configurator.setInputSpec(specFilePath.toFile().getCanonicalPath()); DefaultCodeGenerator codeGenerator = new DefaultCodeGenerator(); - List<File> generatedFiles = codeGenerator.opts(configurator).generate(); + codeGenerator.configure(Collections.singletonMap("configurator",configurator)); + boolean generateResult = codeGenerator.generate(); Object internalGenerator = ReflectUtils.getProperty(codeGenerator, "generator"); Assert.assertEquals(DefaultGenerator.class, internalGenerator.getClass()); @@ -63,7 +65,19 @@ public class GeneratorTest { Assert.assertEquals("ServiceComb", ((ServiceCombCodegen) swaggerCodegenConfig).getName()); Assert.assertEquals(CodegenType.SERVER, ((ServiceCombCodegen) swaggerCodegenConfig).getTag()); - Assert.assertTrue(0 < generatedFiles.size()); + Assert.assertTrue(generateResult); tempDir.toFile().deleteOnExit(); } + + @Test + public void getCodeGeneratorInstanse() { + + CodeGenerator defaultCodeGenerator = GeneratorFactory.getGenerator(CodeGenerator.class,"default"); + Assert.assertNotNull(defaultCodeGenerator); + Assert.assertTrue(defaultCodeGenerator.canProcess("default")); + + CodeGenerator unknownCodeGenerator = GeneratorFactory.getGenerator(CodeGenerator.class,"unknown"); + Assert.assertNull(unknownCodeGenerator); + } } + diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java b/codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java similarity index 100% copy from code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java copy to codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java b/codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java similarity index 100% copy from code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java copy to codegen/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java diff --git a/code-generator/src/test/resources/swagger.yaml b/codegen/src/test/resources/swagger.yaml similarity index 100% rename from code-generator/src/test/resources/swagger.yaml rename to codegen/src/test/resources/swagger.yaml diff --git a/common/pom.xml b/common/pom.xml index 9a718c0..87a7655 100755 --- a/common/pom.xml +++ b/common/pom.xml @@ -30,6 +30,12 @@ <dependencies> <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>core</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>5.3.0.201903130848-r</version> diff --git a/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java b/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java index 01143f0..3dabb7b 100755 --- a/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java +++ b/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java @@ -19,8 +19,6 @@ package org.apache.servicecomb.toolkit.common; import java.io.File; import java.io.IOException; -import java.lang.reflect.Field; -import java.net.URL; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; @@ -29,25 +27,15 @@ import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.HashMap; import java.util.Map; -import java.util.Vector; -import org.apache.servicecomb.provider.pojo.RpcSchema; -import org.apache.servicecomb.provider.rest.common.RestSchema; import org.apache.servicecomb.swagger.SwaggerUtils; -import org.apache.servicecomb.swagger.generator.core.CompositeSwaggerGeneratorContext; -import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator; -import org.apache.servicecomb.swagger.generator.core.SwaggerGeneratorContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import io.swagger.models.Swagger; public class ContractsUtils { - private static CompositeSwaggerGeneratorContext compositeSwaggerGeneratorContext = new CompositeSwaggerGeneratorContext(); - private static Logger LOGGER = LoggerFactory.getLogger(ContractsUtils.class); public static Map<String, Swagger> getContractsFromFileSystem(String dir) throws IOException { @@ -81,87 +69,4 @@ public class ContractsUtils { return contracts; } - - public static void generateAndOutputContracts(String outputDir, String format, URL[] classpathUrls) { - - ImmediateClassLoader immediateClassLoader = new ImmediateClassLoader(classpathUrls, - Thread.currentThread().getContextClassLoader()); - - try { - - Vector allClass = getAllClass(immediateClassLoader); - - for (int i = 0; i < allClass.size(); i++) { - - Class loadClass = (Class) allClass.get(i); - if (!canProcess(loadClass)) { - continue; - } - - SwaggerGeneratorContext generatorContext = - compositeSwaggerGeneratorContext.selectContext(loadClass); - - SwaggerGenerator generator = new SwaggerGenerator(generatorContext, loadClass); - - String swaggerString = SwaggerUtils.swaggerToString(generator.generate()); - - File outputFile = new File(outputDir + File.separator + loadClass.getSimpleName() + format); - - if (!outputFile.exists()) { - if (!outputFile.getParentFile().exists()) { - outputFile.getParentFile().mkdirs(); - } - outputFile.createNewFile(); - } - - Files.write(Paths.get(outputFile.toURI()), swaggerString.getBytes()); - } - } catch (IOException e) { - LOGGER.error(e.getMessage()); - } - } - - private static boolean canProcess(Class<?> loadClass) { - - if (loadClass == null) { - return false; - } - RestSchema restSchema = loadClass.getAnnotation(RestSchema.class); - if (restSchema != null) { - return true; - } - - RestController controller = loadClass.getAnnotation(RestController.class); - if (controller != null) { - return true; - } - - RpcSchema rpcSchema = loadClass.getAnnotation(RpcSchema.class); - if (rpcSchema != null) { - return true; - } - - RequestMapping requestMapping = loadClass.getAnnotation(RequestMapping.class); - if (requestMapping != null) { - return true; - } - - return false; - } - - - private static Vector getAllClass(ClassLoader classLoader) { - Field classesField; - try { - classesField = ClassLoader.class.getDeclaredField("classes"); - classesField.setAccessible(true); - - if (classesField.get(classLoader) instanceof Vector) { - return (Vector) classesField.get(classLoader); - } - } catch (Exception e) { - LOGGER.warn("cannot get all class from ClassLoader " + classLoader.getClass()); - } - return new Vector<>(); - } } diff --git a/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java b/common/src/main/java/org/apache/servicecomb/toolkit/common/DefaultContractsGenerator.java similarity index 74% copy from common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java copy to common/src/main/java/org/apache/servicecomb/toolkit/common/DefaultContractsGenerator.java index 01143f0..590020f 100755 --- a/common/src/main/java/org/apache/servicecomb/toolkit/common/ContractsUtils.java +++ b/common/src/main/java/org/apache/servicecomb/toolkit/common/DefaultContractsGenerator.java @@ -21,13 +21,8 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.net.URL; -import java.nio.file.FileVisitResult; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.HashMap; import java.util.Map; import java.util.Vector; @@ -37,53 +32,56 @@ import org.apache.servicecomb.swagger.SwaggerUtils; import org.apache.servicecomb.swagger.generator.core.CompositeSwaggerGeneratorContext; import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator; import org.apache.servicecomb.swagger.generator.core.SwaggerGeneratorContext; +import org.apache.servicecomb.toolkit.ContractsGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import io.swagger.models.Swagger; +public class DefaultContractsGenerator implements ContractsGenerator { -public class ContractsUtils { + private static Logger LOGGER = LoggerFactory.getLogger(ContractsUtils.class); private static CompositeSwaggerGeneratorContext compositeSwaggerGeneratorContext = new CompositeSwaggerGeneratorContext(); - private static Logger LOGGER = LoggerFactory.getLogger(ContractsUtils.class); + private Map<String, Object> config; - public static Map<String, Swagger> getContractsFromFileSystem(String dir) throws IOException { + private URL[] classpathUrls; - Map<String, Swagger> contracts = new HashMap<>(); - File outputDir = new File(dir); + private String outputDir = "."; - Files.walkFileTree(Paths.get(outputDir.toURI()), new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - contracts.put(file.toFile().getName(), SwaggerUtils.parseSwagger(file.toUri().toURL())); - return super.visitFile(file, attrs); - } - }); + private String format = "yaml"; - return contracts; + @Override + public boolean canProcess(String type) { + return "default".equals(type); } - public static Map<String, byte[]> getFilesGroupByFilename(String dir) throws IOException { + @Override + public void configure(Map<String, Object> config) { + this.config = config; - Map<String, byte[]> contracts = new HashMap<>(); - File outputDir = new File(dir); + if (config == null) { + return; + } - Files.walkFileTree(Paths.get(outputDir.toURI()), new SimpleFileVisitor<Path>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - contracts.put(file.toFile().getName(), Files.readAllBytes(file)); - return super.visitFile(file, attrs); - } - }); + Object classpathUrlsObj = config.get("classpathUrls"); + if (classpathUrlsObj instanceof URL[]) { + classpathUrls = (URL[]) classpathUrlsObj; + } - return contracts; + Object outputDirObj = config.get("outputDir"); + if (outputDirObj instanceof String) { + outputDir = (String) outputDirObj; + } } - public static void generateAndOutputContracts(String outputDir, String format, URL[] classpathUrls) { + @Override + public boolean generate() { + if (!checkConfig()) { + return false; + } ImmediateClassLoader immediateClassLoader = new ImmediateClassLoader(classpathUrls, Thread.currentThread().getContextClassLoader()); @@ -118,7 +116,22 @@ public class ContractsUtils { } } catch (IOException e) { LOGGER.error(e.getMessage()); + return false; } + + return true; + } + + private boolean checkConfig() { + if (config == null) { + return false; + } + + if (classpathUrls == null) { + return false; + } + + return true; } private static boolean canProcess(Class<?> loadClass) { @@ -149,7 +162,6 @@ public class ContractsUtils { return false; } - private static Vector getAllClass(ClassLoader classLoader) { Field classesField; try { diff --git a/toolkit-cli/src/main/resources/application.properties b/common/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator similarity index 92% copy from toolkit-cli/src/main/resources/application.properties copy to common/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator index a278788..e465598 100755 --- a/toolkit-cli/src/main/resources/application.properties +++ b/common/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator @@ -15,4 +15,4 @@ # limitations under the License. # -version=${project.version} \ No newline at end of file +org.apache.servicecomb.toolkit.common.DefaultContractsGenerator \ No newline at end of file diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java b/common/src/test/java/org/apache/servicecomb/toolkit/common/ContractsGeneratorTest.java similarity index 53% rename from code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java rename to common/src/test/java/org/apache/servicecomb/toolkit/common/ContractsGeneratorTest.java index 5846136..d5ed5e6 100755 --- a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegenTest.java +++ b/common/src/test/java/org/apache/servicecomb/toolkit/common/ContractsGeneratorTest.java @@ -15,19 +15,27 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.codegen; +package org.apache.servicecomb.toolkit.common; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.Assert.*; -import io.swagger.codegen.CodegenConfig; -import io.swagger.codegen.CodegenConfigLoader; +import org.apache.servicecomb.toolkit.ContractsGenerator; +import org.apache.servicecomb.toolkit.GeneratorFactory; +import org.junit.Test; -public class ServiceCombCodegenTest { +public class ContractsGeneratorTest { @Test - public void loadImpl() { - CodegenConfig codegenConfig = CodegenConfigLoader.forName("ServiceComb"); - Assert.assertEquals(ServiceCombCodegen.class, codegenConfig.getClass()); + public void getContractsGeneratorInstance() { + + ContractsGenerator defaultGenerator = GeneratorFactory.getGenerator(ContractsGenerator.class,"default"); + assertNotNull(defaultGenerator); + + ContractsGenerator unknownGenerator = GeneratorFactory.getGenerator(ContractsGenerator.class,"unknown"); + assertNull(unknownGenerator); + + ContractsGenerator other = GeneratorFactory.getGenerator(ContractsGenerator.class,"other"); + assertNotNull(other); + assertTrue(other.canProcess("other")); } } diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java b/common/src/test/java/org/apache/servicecomb/toolkit/common/OtherContractsGenerator.java similarity index 63% rename from code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java rename to common/src/test/java/org/apache/servicecomb/toolkit/common/OtherContractsGenerator.java index b5892a3..ef8eb34 100755 --- a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/ReflectUtils.java +++ b/common/src/test/java/org/apache/servicecomb/toolkit/common/OtherContractsGenerator.java @@ -15,24 +15,29 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.codegen; +package org.apache.servicecomb.toolkit.common; -import java.lang.reflect.Field; +import java.util.Map; -class ReflectUtils { +import org.apache.servicecomb.toolkit.ContractsGenerator; - static Object getProperty(Object obj, String propName) { +public class OtherContractsGenerator implements ContractsGenerator { - try { - Field propFiled = obj.getClass().getDeclaredField(propName); - propFiled.setAccessible(true); - return propFiled.get(obj); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); + @Override + public boolean canProcess(String type) { + if ("other".equals(type)) { + return true; } + return false; + } + + @Override + public void configure(Map<String, Object> config) { + return; + } - return null; + @Override + public boolean generate() { + return false; } -} +} \ No newline at end of file diff --git a/toolkit-cli/src/main/resources/application.properties b/common/src/test/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator similarity index 92% rename from toolkit-cli/src/main/resources/application.properties rename to common/src/test/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator index a278788..0bbcaee 100755 --- a/toolkit-cli/src/main/resources/application.properties +++ b/common/src/test/resources/META-INF/services/org.apache.servicecomb.toolkit.ContractsGenerator @@ -15,4 +15,4 @@ # limitations under the License. # -version=${project.version} \ No newline at end of file +org.apache.servicecomb.toolkit.common.OtherContractsGenerator \ No newline at end of file diff --git a/code-generator/pom.xml b/core/pom.xml similarity index 76% rename from code-generator/pom.xml rename to core/pom.xml index ae53cd5..290baeb 100755 --- a/code-generator/pom.xml +++ b/core/pom.xml @@ -26,14 +26,10 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>code-generator</artifactId> - + <artifactId>core</artifactId> <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <swagger-codegen-version>2.4.3</swagger-codegen-version> - <maven-plugin-version>1.0.0</maven-plugin-version> - <junit-version>4.8.1</junit-version> </properties> <dependencies> @@ -52,13 +48,6 @@ </exclusion> </exclusions> </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.12</version> - <scope>test</scope> - </dependency> </dependencies> <build> @@ -66,21 +55,13 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> - <version>3.6.1</version> + <version>3.1</version> <configuration> - <source>8</source> - <target>8</target> + <source>1.8</source> + <target>1.8</target> </configuration> </plugin> </plugins> - - <resources> - <resource> - <directory>src/main/resources</directory> - <includes> - <include>**/*.*</include> - </includes> - </resource> - </resources> </build> -</project> + +</project> \ No newline at end of file diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/CodeGenerator.java b/core/src/main/java/org/apache/servicecomb/toolkit/CodeGenerator.java similarity index 75% rename from code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/CodeGenerator.java rename to core/src/main/java/org/apache/servicecomb/toolkit/CodeGenerator.java index 2ac18c5..f1f7078 100755 --- a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/CodeGenerator.java +++ b/core/src/main/java/org/apache/servicecomb/toolkit/CodeGenerator.java @@ -15,16 +15,7 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.codegen; +package org.apache.servicecomb.toolkit; -import java.io.File; -import java.util.List; - -import io.swagger.codegen.config.CodegenConfigurator; - -public interface CodeGenerator { - - CodeGenerator opts(CodegenConfigurator opts); - - List<File> generate(); +public interface CodeGenerator extends Generator { } diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java b/core/src/main/java/org/apache/servicecomb/toolkit/ContractsGenerator.java similarity index 79% copy from doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java copy to core/src/main/java/org/apache/servicecomb/toolkit/ContractsGenerator.java index 6fb053a..ad6bbea 100755 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java +++ b/core/src/main/java/org/apache/servicecomb/toolkit/ContractsGenerator.java @@ -15,13 +15,7 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.docgen; +package org.apache.servicecomb.toolkit; -import io.swagger.models.Swagger; - -public interface DocGenerator { - - boolean canProcess(String type); - - String generate(Swagger source, String outputPath); +public interface ContractsGenerator extends Generator { } diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java b/core/src/main/java/org/apache/servicecomb/toolkit/DocGenerator.java similarity index 79% copy from doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java copy to core/src/main/java/org/apache/servicecomb/toolkit/DocGenerator.java index 6fb053a..812c448 100755 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java +++ b/core/src/main/java/org/apache/servicecomb/toolkit/DocGenerator.java @@ -15,13 +15,7 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.docgen; +package org.apache.servicecomb.toolkit; -import io.swagger.models.Swagger; - -public interface DocGenerator { - - boolean canProcess(String type); - - String generate(Swagger source, String outputPath); +public interface DocGenerator extends Generator { } diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java b/core/src/main/java/org/apache/servicecomb/toolkit/Generator.java similarity index 83% rename from doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java rename to core/src/main/java/org/apache/servicecomb/toolkit/Generator.java index 6fb053a..7941d3a 100755 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGenerator.java +++ b/core/src/main/java/org/apache/servicecomb/toolkit/Generator.java @@ -15,13 +15,15 @@ * limitations under the License. */ -package org.apache.servicecomb.toolkit.docgen; +package org.apache.servicecomb.toolkit; -import io.swagger.models.Swagger; +import java.util.Map; -public interface DocGenerator { +public interface Generator { boolean canProcess(String type); - String generate(Swagger source, String outputPath); + void configure(Map<String, Object> config); + + boolean generate(); } diff --git a/core/src/main/java/org/apache/servicecomb/toolkit/GeneratorFactory.java b/core/src/main/java/org/apache/servicecomb/toolkit/GeneratorFactory.java new file mode 100755 index 0000000..fef3fbb --- /dev/null +++ b/core/src/main/java/org/apache/servicecomb/toolkit/GeneratorFactory.java @@ -0,0 +1,61 @@ +/* + * 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; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.concurrent.ConcurrentHashMap; + +public class GeneratorFactory { + + private final static Map<String, List> interfaceMap = new ConcurrentHashMap<>(); + + static { + addGeneratorType(CodeGenerator.class); + addGeneratorType(DocGenerator.class); + addGeneratorType(ContractsGenerator.class); + } + + public static void addGeneratorType(Class<? extends Generator> generatorClass) { + + if (interfaceMap.get(generatorClass.getName()) == null) { + interfaceMap.put(generatorClass.getName(), loadInitialCodeGenerators(generatorClass)); + } + } + + private static List<Generator> loadInitialCodeGenerators(Class<? extends Generator> generatorClass) { + List<Generator> registeredGenerators = new ArrayList<>(); + ServiceLoader.load(generatorClass).forEach(registeredGenerators::add); + return registeredGenerators; + } + + public static <T extends Generator> T getGenerator(Class<? extends T> generatorClass, String type) { + + @SuppressWarnings("unchecked") + List<T> registeredList = (List<T>) interfaceMap.get(generatorClass.getName()); + for (T generator : registeredList) { + if (generator.canProcess(type)) { + return generator; + } + } + + return null; + } +} diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGeneratorManager.java b/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGeneratorManager.java deleted file mode 100755 index a2b6bc3..0000000 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/DocGeneratorManager.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.docgen; - -import java.util.ServiceLoader; -import java.util.concurrent.CopyOnWriteArrayList; - -import io.swagger.models.Swagger; - -public class DocGeneratorManager { - - private final static CopyOnWriteArrayList<DocGenerator> registeredGenerators = new CopyOnWriteArrayList<>(); - - static { - loadInitialDocGenerators(); - } - - private static void loadInitialDocGenerators() { - - ServiceLoader.load(DocGenerator.class).forEach(registeredGenerators::add); - } - - public static String generate(Swagger source, String outputPath, String outputType) { - - for (DocGenerator docGenerator : registeredGenerators) { - if (docGenerator.canProcess(outputType)) { - return docGenerator.generate(source, outputPath); - } - } - - return null; - } -} diff --git a/doc-generator/pom.xml b/docgen/pom.xml similarity index 94% rename from doc-generator/pom.xml rename to docgen/pom.xml index 0b7db64..d5fda74 100755 --- a/doc-generator/pom.xml +++ b/docgen/pom.xml @@ -26,7 +26,7 @@ </parent> <modelVersion>4.0.0</modelVersion> - <artifactId>doc-generator</artifactId> + <artifactId>docgen</artifactId> <repositories> <repository> @@ -41,6 +41,12 @@ <dependencies> <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>core</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctorj</artifactId> <version>1.6.2</version> diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java similarity index 85% rename from doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java rename to docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java index 42133f7..a082d98 100755 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java +++ b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsAsciidocGenerator.java @@ -22,6 +22,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.Map; +import org.apache.servicecomb.toolkit.DocGenerator; import org.asciidoctor.Asciidoctor; import org.asciidoctor.Attributes; import org.asciidoctor.AttributesBuilder; @@ -46,13 +47,35 @@ public class ContractsAsciidocGenerator implements DocGenerator { private final static String DOC_SUFFIX = ".html"; + private Swagger contractContent; + + private String outputPath = "."; + @Override public boolean canProcess(String type) { return type != null && DOC_FORMAT.equals(type.toLowerCase()); } @Override - public String generate(Swagger contractContent, String outputPath) { + public void configure(Map<String, Object> config) { + + this.contractContent = (Swagger) config.get("contractContent"); + this.outputPath = (String) config.get("outputPath"); + } + + private boolean checkConfig() { + if (contractContent == null) { + return false; + } + return true; + } + + @Override + public boolean generate() { + + if (!checkConfig()) { + return false; + } Asciidoctor asciidoctor = Asciidoctor.Factory.create(); Swagger2MarkupConverter.Builder markupBuilder = Swagger2MarkupConverter.from(contractContent); @@ -80,9 +103,10 @@ public class ContractsAsciidocGenerator implements DocGenerator { Files.write(Paths.get(outputPath), asciidocResult.getBytes()); } catch (IOException e) { LOGGER.error(e.getMessage()); + return false; } - return asciidocResult; + return true; } private String correctPath(String filepath) { diff --git a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java similarity index 85% rename from doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java rename to docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java index f39cd22..6926cdb 100755 --- a/doc-generator/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java +++ b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.servicecomb.toolkit.DocGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,6 +45,10 @@ public class ContractsSwaggerUIGenerator implements DocGenerator { private final static String DOC_SUFFIX = ".html"; + private Swagger contractContent; + + private String outputPath = "."; + @Override public boolean canProcess(String type) { @@ -51,7 +56,24 @@ public class ContractsSwaggerUIGenerator implements DocGenerator { } @Override - public String generate(Swagger contractContent, String outputPath) { + public void configure(Map<String, Object> config) { + this.contractContent = (Swagger) config.get("contractContent"); + this.outputPath = (String) config.get("outputPath"); + } + + private boolean checkConfig() { + if (contractContent == null) { + return false; + } + return true; + } + + @Override + public boolean generate() { + + if (!checkConfig()) { + return false; + } String swaggerUiHtml = null; try { @@ -71,9 +93,10 @@ public class ContractsSwaggerUIGenerator implements DocGenerator { Files.write(outputFile, swaggerUiHtml.getBytes()); } catch (IOException e) { LOGGER.error(e.getMessage()); + return false; } - return swaggerUiHtml; + return true; } private String correctPath(String filepath) { diff --git a/doc-generator/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.docgen.DocGenerator b/docgen/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.DocGenerator similarity index 100% rename from doc-generator/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.docgen.DocGenerator rename to docgen/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.DocGenerator diff --git a/doc-generator/src/main/resources/webroot/swagger-ui.html b/docgen/src/main/resources/webroot/swagger-ui.html similarity index 100% rename from doc-generator/src/main/resources/webroot/swagger-ui.html rename to docgen/src/main/resources/webroot/swagger-ui.html diff --git a/doc-generator/src/test/java/docgen/DocGeneratorTest.java b/docgen/src/test/java/docgen/DocGeneratorTest.java similarity index 71% rename from doc-generator/src/test/java/docgen/DocGeneratorTest.java rename to docgen/src/test/java/docgen/DocGeneratorTest.java index c4dbb64..278766c 100755 --- a/doc-generator/src/test/java/docgen/DocGeneratorTest.java +++ b/docgen/src/test/java/docgen/DocGeneratorTest.java @@ -21,7 +21,8 @@ import io.swagger.models.Swagger; import io.swagger.parser.Swagger20Parser; import org.apache.commons.io.FileUtils; -import org.apache.servicecomb.toolkit.docgen.DocGeneratorManager; +import org.apache.servicecomb.toolkit.GeneratorFactory; +import org.apache.servicecomb.toolkit.DocGenerator; import org.junit.Assert; import org.junit.Test; @@ -31,6 +32,8 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; public class DocGeneratorTest { @@ -53,7 +56,12 @@ public class DocGeneratorTest { Path outputPath = Paths.get(tempDir.toFile().getAbsolutePath() + File.separator + "asciidoc.html"); - DocGeneratorManager.generate(swagger, outputPath.toFile().getCanonicalPath(), "asciidoc-html"); + DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, "asciidoc-html"); + Map<String, Object> docGeneratorConfig = new HashMap<>(); + docGeneratorConfig.put("contractContent", swagger); + docGeneratorConfig.put("outputPath", outputPath.toFile().getCanonicalPath()); + docGenerator.configure(docGeneratorConfig); + docGenerator.generate(); Assert.assertTrue(Files.exists(outputPath)); FileUtils.deleteDirectory(tempDir.toFile()); @@ -78,36 +86,21 @@ public class DocGeneratorTest { Path tempDir = Files.createTempDirectory(null); Path outputPath = Paths.get(tempDir.toFile().getAbsolutePath() + File.separator + "swagger-ui.html"); - DocGeneratorManager.generate(swagger, outputPath.toFile().getCanonicalPath(), "swagger-ui"); + DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, "swagger-ui"); + Map<String, Object> docGeneratorConfig = new HashMap<>(); + docGeneratorConfig.put("contractContent", swagger); + docGeneratorConfig.put("outputPath", outputPath.toFile().getCanonicalPath()); + docGenerator.configure(docGeneratorConfig); + docGenerator.generate(); Assert.assertTrue(Files.exists(outputPath)); FileUtils.deleteDirectory(tempDir.toFile()); } @Test - public void contractTransferToOther() throws IOException { + public void contractTransferToOther() { - Swagger20Parser swagger20Parser = new Swagger20Parser(); - - InputStream in = DocGeneratorTest.class.getClassLoader().getResourceAsStream("HelloEndPoint.yaml"); - - StringBuilder sb = new StringBuilder(); - byte[] bytes = new byte[1024]; - int len = -1; - while ((len = in.read(bytes)) != -1) { - sb.append(new String(bytes, 0, len)); - } - - Swagger swagger = swagger20Parser.parse(sb.toString()); - - Path tempDir = Files.createTempDirectory(null); - Path outputPath = Paths.get(tempDir.toFile().getAbsolutePath() - + File.separator + "swagger-ui.html"); - - DocGeneratorManager.generate(swagger, outputPath.toFile().getCanonicalPath(), "other"); - - Assert.assertFalse(Files.exists(outputPath)); - - FileUtils.deleteDirectory(tempDir.toFile()); + DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, "other"); + Assert.assertNull(docGenerator); } } diff --git a/doc-generator/src/test/resources/HelloEndPoint.yaml b/docgen/src/test/resources/HelloEndPoint.yaml similarity index 100% rename from doc-generator/src/test/resources/HelloEndPoint.yaml rename to docgen/src/test/resources/HelloEndPoint.yaml diff --git a/pom.xml b/pom.xml index 1ec4144..a93f31c 100755 --- a/pom.xml +++ b/pom.xml @@ -33,11 +33,12 @@ </properties> <modules> - <module>code-generator</module> - <module>toolkit-cli</module> - <module>doc-generator</module> + <module>codegen</module> + <module>cli</module> + <module>docgen</module> <module>common</module> <module>toolkit-maven-plugin</module> + <module>core</module> </modules> <build> diff --git a/toolkit-maven-plugin/pom.xml b/toolkit-maven-plugin/pom.xml index 37661fb..8eb2f86 100755 --- a/toolkit-maven-plugin/pom.xml +++ b/toolkit-maven-plugin/pom.xml @@ -31,7 +31,7 @@ <dependencies> <dependency> <groupId>org.apache.servicecomb</groupId> - <artifactId>doc-generator</artifactId> + <artifactId>docgen</artifactId> <version>${project.version}</version> </dependency> diff --git a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/ContractGenerator.java b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/ContractGenerator.java index 128dcaa..227899f 100755 --- a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/ContractGenerator.java +++ b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/ContractGenerator.java @@ -20,11 +20,14 @@ package org.apache.servicecomb.toolkit.plugin; import java.io.File; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.project.MavenProject; -import org.apache.servicecomb.toolkit.common.ContractsUtils; +import org.apache.servicecomb.toolkit.ContractsGenerator; +import org.apache.servicecomb.toolkit.GeneratorFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,6 +59,11 @@ public class ContractGenerator { } } - ContractsUtils.generateAndOutputContracts(outputDir, format, runtimeUrls); + ContractsGenerator contractGenerator = GeneratorFactory.getGenerator(ContractsGenerator.class,"default"); + Map<String,Object> contractConfig = new HashMap<>(); + contractConfig.put("classpathUrls",runtimeUrls); + contractConfig.put("outputDir",outputDir); + contractGenerator.configure(contractConfig); + contractGenerator.generate(); } } diff --git a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateContractsDocMojo.java b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateContractsDocMojo.java index 3c5d975..ba46c53 100755 --- a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateContractsDocMojo.java +++ b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateContractsDocMojo.java @@ -25,6 +25,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.HashMap; +import java.util.Map; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -36,7 +38,8 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; import org.apache.servicecomb.swagger.SwaggerUtils; -import org.apache.servicecomb.toolkit.docgen.DocGeneratorManager; +import org.apache.servicecomb.toolkit.GeneratorFactory; +import org.apache.servicecomb.toolkit.DocGenerator; @Mojo(name = "generateDoc", defaultPhase = LifecyclePhase.COMPILE, requiresDependencyResolution = ResolutionScope.COMPILE) @Execute(goal = "generateDoc", @@ -69,10 +72,14 @@ public class GenerateContractsDocMojo extends AbstractMojo { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - DocGeneratorManager.generate(SwaggerUtils.parseSwagger(file.toUri().toURL()), - docOutputDir + File.separator - + file.toFile().getName().substring(0, file.toFile().getName().indexOf(".")), - format); + DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, format); + Map<String, Object> docGeneratorConfig = new HashMap<>(); + docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(file.toUri().toURL())); + docGeneratorConfig.put("outputPath",docOutputDir + File.separator + + file.toFile().getName().substring(0, file.toFile().getName().indexOf("."))); + docGenerator.configure(docGeneratorConfig); + docGenerator.generate(); + return super.visitFile(file, attrs); } });