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 0e69c4d1e074049642ddbf189ceab225e9eff3d2 Author: kakulisen <[email protected]> AuthorDate: Thu May 23 22:15:14 2019 +0800 add new programming model POJO Signed-off-by: kakulisen <[email protected]> --- .../toolkit/codegen/RemoveImplSuffixLambda.java | 39 +++++++ .../toolkit/codegen/ServiceCombCodegen.java | 27 +++++ .../libraries/POJO/Application.mustache | 11 ++ .../ServiceComb/libraries/POJO/api.mustache | 38 ++++++ .../libraries/POJO/apiInterface.mustache | 23 ++++ .../ServiceComb/libraries/POJO/bodyParams.mustache | 1 + .../ServiceComb/libraries/POJO/formParams.mustache | 2 + .../libraries/POJO/headerParams.mustache | 1 + .../ServiceComb/libraries/POJO/pathParams.mustache | 1 + .../ServiceComb/libraries/POJO/pom.mustache | 127 +++++++++++++++++++++ .../libraries/POJO/queryParams.mustache | 1 + .../servicecomb/toolkit/codegen/GeneratorTest.java | 1 + .../apache/servicecomb/toolkit/cli/CliTest.java | 2 +- 13 files changed, 273 insertions(+), 1 deletion(-) diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java new file mode 100644 index 0000000..519a584 --- /dev/null +++ b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/RemoveImplSuffixLambda.java @@ -0,0 +1,39 @@ +/* + * 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; + +import com.samskivert.mustache.Mustache; +import com.samskivert.mustache.Template; + +import java.io.IOException; +import java.io.Writer; + +public class RemoveImplSuffixLambda implements Mustache.Lambda { + + @Override + public void execute(Template.Fragment fragment, Writer writer) throws IOException { + + String text = fragment.execute(); + if(text.endsWith("Impl")){ + text = text.substring(0,text.lastIndexOf("Impl")); + } + writer.write(text); + + } + +} diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java index c0ded7c..36efe5b 100755 --- a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java +++ b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java @@ -35,6 +35,7 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo private static final String DEFAULT_LIBRARY = "SpringMVC"; + private static final String POJO_LIBRARY = "POJO"; private String mainClassPackage; @@ -58,6 +59,7 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo private String modelConsumerTemplate = consumerTemplateFolder + "/model.mustache"; + private String pojoApiInterfaceTemplate = "apiInterface.mustache"; private int modelSwitch = 1; @@ -98,6 +100,7 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo mainClassPackage = groupId + ".example"; supportedLibraries.put(DEFAULT_LIBRARY, "ServiceComb Server application using the springboot programming model."); + supportedLibraries.put(POJO_LIBRARY, "ServiceComb Server application using the pojo programming model."); setLibrary(DEFAULT_LIBRARY); @@ -124,9 +127,19 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo String suffix = apiTemplateFiles().get(templateName); return apiConsumerFolder() + File.separator + toApiFilename(tag) + suffix; } + if (pojoApiInterfaceTemplate.equals(templateName)) { + String suffix = apiTemplateFiles().get(templateName); + String pojoApiInterfaceName = pojoApiInterfaceFolder() + File.separator + camelize(tag) + "Api" + suffix; + additionalProperties.put("pojoApiInterfaceName",camelize(tag) + "Api"); + return pojoApiInterfaceName; + } return super.apiFilename(templateName, tag); } + private String pojoApiInterfaceFolder() { + return outputFolder + "/" + modelProject + "/" + sourceFolder + "/" + apiPackage().replace('.', '/'); + } + private String apiConsumerFolder() { return outputFolder + "/" + consumerProject + "/" + sourceFolder + "/" + apiPackage().replace('.', '/'); } @@ -141,6 +154,7 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo additionalProperties.put("mainClassPackage", mainClassPackage); additionalProperties.put("camelcase", new CamelCaseLambda()); additionalProperties.put("getGenericClassType", new GetGenericClassTypeLambda()); + additionalProperties.put("removeImplSuffix", new RemoveImplSuffixLambda()); additionalProperties.put("applicationId", applicationId); additionalProperties.put("microserviceName", microserviceName); @@ -148,6 +162,15 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo processProviderProjectOpts(); processConsumerOpts(); processModelProjectOpts(); + processPojo(); + } + + private void processPojo() { + if (!POJO_LIBRARY.equals(getLibrary())) { + return; + } + apiTemplateFiles.put(pojoApiInterfaceTemplate, ".java"); + additionalProperties.put("isPOJO", true); } @Override @@ -241,6 +264,10 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo return apiName; } + if(POJO_LIBRARY.equals(getLibrary())){ + return initialCaps(name) + "ApiImpl"; + } + return initialCaps(name) + "Controller"; } diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/Application.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/Application.mustache new file mode 100644 index 0000000..fda8d43 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/Application.mustache @@ -0,0 +1,11 @@ +package {{mainClassPackage}}; + +import org.apache.servicecomb.foundation.common.utils.BeanUtils; + +public class Application { + + public static void main(String[] args) throws Exception { + System.setProperty("local.registry.file", "notExistJustForceLocal"); + BeanUtils.init(); + } +} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/api.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/api.mustache new file mode 100644 index 0000000..abb8da0 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/api.mustache @@ -0,0 +1,38 @@ +package {{apiPackage}}; + +import {{modelPackage}}.*; + +{{#imports}}import {{import}}; +{{/imports}} + +import org.apache.servicecomb.provider.pojo.RpcSchema; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.multipart.MultipartFile; +import java.util.List; +import java.util.Map; +import java.io.File; +import static org.springframework.http.MediaType.*; + +@RpcSchema(schemaId = "{{#camelcase}}{{classname}}{{/camelcase}}") +{{#operations}} +public class {{classname}} implements {{#removeImplSuffix}}{{classname}}{{/removeImplSuffix}} { + {{#operation}} + + @Override + public {{>returnTypes}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, + {{/hasMore}}{{/allParams}}) { + // do some magic! + return null; + } + + {{/operation}} +} +{{/operations}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/apiInterface.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/apiInterface.mustache new file mode 100644 index 0000000..d7c5b3e --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/apiInterface.mustache @@ -0,0 +1,23 @@ +package {{apiPackage}}; + +import {{modelPackage}}.*; + +{{#imports}}import {{import}}; +{{/imports}} + +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.io.File; + + +{{#operations}} +public interface {{#removeImplSuffix}}{{classname}}{{/removeImplSuffix}} { + {{#operation}} + + public {{>returnTypes}} {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}}, + {{/hasMore}}{{/allParams}}); + + {{/operation}} + } +{{/operations}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache new file mode 100644 index 0000000..bb1d6ff --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/bodyParams.mustache @@ -0,0 +1 @@ +{{#isBodyParam}} {{{dataType}}} {{paramName}}{{/isBodyParam}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache new file mode 100644 index 0000000..96f17c8 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/formParams.mustache @@ -0,0 +1,2 @@ +{{#isFormParam}}{{#notFile}} +{{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}} File {{baseName}}{{/isFile}}{{/isFormParam}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache new file mode 100644 index 0000000..edeeb85 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/headerParams.mustache @@ -0,0 +1 @@ +{{#isHeaderParam}} {{{dataType}}} {{paramName}}{{/isHeaderParam}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache new file mode 100644 index 0000000..9a0630b --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/pathParams.mustache @@ -0,0 +1 @@ +{{#isPathParam}} {{{dataType}}} {{paramName}}{{/isPathParam}} \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/pom.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/pom.mustache new file mode 100644 index 0000000..c2ceb61 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/pom.mustache @@ -0,0 +1,127 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <artifactId>{{artifactId}}</artifactId> + <groupId>{{groupId}}</groupId> + <version>{{artifactVersion}}</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <artifactId>provider</artifactId> + <packaging>jar</packaging> + <name>{{artifactId}}</name> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <java-chassis.version>1.2.0</java-chassis.version> + </properties> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>java-chassis-dependencies</artifactId> + <version>${java-chassis.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <dependency> + <groupId>{{groupId}}</groupId> + <artifactId>model</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>handler-bizkeeper</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>handler-loadbalance</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>transport-highway</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>transport-rest-vertx</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>handler-flowcontrol-qps</artifactId> + </dependency> + <dependency> + <groupId>org.apache.servicecomb</groupId> + <artifactId>provider-pojo</artifactId> + </dependency> + <!--log4j2--> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j-impl</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + </dependency> + + </dependencies> + + <!--for package and deploy--> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>2.6</version> + <configuration> + <archive> + <manifest> + <addClasspath>true</addClasspath> + <classpathPrefix>lib/</classpathPrefix> + <!--change to your main class--> + <mainClass>${package}.Application</mainClass> + </manifest> + <manifestEntries> + <Class-Path>. </Class-Path> + </manifestEntries> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy-dependencies</id> + <phase>package</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>target/lib</outputDirectory> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + + </plugins> + </build> + +</project> \ No newline at end of file diff --git a/code-generator/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache new file mode 100644 index 0000000..157ad86 --- /dev/null +++ b/code-generator/src/main/resources/ServiceComb/libraries/POJO/queryParams.mustache @@ -0,0 +1 @@ +{{#isQueryParam}} {{{dataType}}} {{paramName}}{{/isQueryParam}} \ No newline at end of file diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java index e011c7b..3156fae 100755 --- a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java +++ b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java @@ -38,6 +38,7 @@ public class GeneratorTest { public void generateProgrammingModels() throws IOException, URISyntaxException { generateCode("SpringMVC"); + generateCode("POJO"); } private void generateCode(String programmingModel) throws IOException, URISyntaxException { diff --git a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java index 35885ad..f8ef465 100755 --- a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java +++ b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java @@ -31,7 +31,7 @@ public class CliTest { @Test public void generateServiceCombCodeFromSingleContract() throws IOException { - String[] programModels = new String[] {"SpringMVC"}; + String[] programModels = new String[] {"SpringMVC","POJO"}; Path tempDir = Files.createTempDirectory(null); Arrays.stream(programModels).forEach(model -> { try {
