From a5eff7e571cc22d4148ef0073824f35c8ceee342 Mon Sep 17 00:00:00 2001 From: scannerscan Date: Tue, 1 Nov 2016 19:36:56 +1100 Subject: [PATCH] Jdk6 jersey2 support (#4074) * hashCode and equals support for jdk6 for jersey2 * supportJava6 moved to the base abstract class to support server side code generation, supportJava6 flag was added to the server side model classes generators, licenseInfo ttemplate was added to JavaJaxRS section, javaJaxRS templates jdk6 suport was added, shouldOverride method was commented out to allow server classes to be overriden - what if new methods or signatures changes? * fix for the build. * supportJava6 moved to the base abstract class to support server side code generation, supportJava6 flag was added to the server side model classes generators, licenseInfo ttemplate was added to JavaJaxRS section, javaJaxRS templates jdk6 suport was added, shouldOverride method was commented out to allow server classes to be overriden - what if new methods or signatures changes? * fix for the build. * Merge remote-tracking branch 'remotes/origin/master' into jdk6-jersey2-support Conflicts: modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java modules/swagger-codegen/src/main/resources/Java/pom.mustache * add msf4j author * [Java] Fix outputFolder in java-related server stub generators (#4076) * fix outputFolder in java-related server stub generator * fix style in JavaJAXRSCXFCDIServerCodegen * hashCode and equals support for jdk6 for jersey2 * supportJava6 moved to the base abstract class to support server side code generation, supportJava6 flag was added to the server side model classes generators, licenseInfo ttemplate was added to JavaJaxRS section, javaJaxRS templates jdk6 suport was added, shouldOverride method was commented out to allow server classes to be overriden - what if new methods or signatures changes? * fix for the build. * supportJava6 moved to the base abstract class to support server side code generation, supportJava6 flag was added to the server side model classes generators, licenseInfo ttemplate was added to JavaJaxRS section, javaJaxRS templates jdk6 suport was added, shouldOverride method was commented out to allow server classes to be overriden - what if new methods or signatures changes? * Merge remote-tracking branch 'remotes/origin/master' into jdk6-jersey2-support Conflicts: modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java modules/swagger-codegen/src/main/resources/Java/pom.mustache * Merge remote-tracking branch 'remotes/origin/master' into jdk6-jersey2-support Conflicts: modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java modules/swagger-codegen/src/main/resources/Java/pom.mustache --- .../languages/AbstractJavaCodegen.java | 12 ++++++ .../AbstractJavaJAXRSServerCodegen.java | 6 --- .../codegen/languages/JavaClientCodegen.java | 19 ++------ .../languages/JavaJAXRSSpecServerCodegen.java | 1 - .../languages/JavaJerseyServerCodegen.java | 3 +- .../src/main/resources/Java/pom.mustache | 1 + .../resources/JavaJaxRS/licenseInfo.mustache | 23 ++++++++++ .../main/resources/JavaJaxRS/model.mustache | 14 +++--- .../resources/JavaJaxRS/modelEnum.mustache | 43 +++++++++++++++++++ .../main/resources/JavaJaxRS/pojo.mustache | 25 +++++++++++ .../src/main/resources/JavaJaxRS/pom.mustache | 25 +++++++++++ .../codegen/jaxrs/JaxRSServerOptionsTest.java | 2 + .../options/JaxRSServerOptionsProvider.java | 1 + 13 files changed, 146 insertions(+), 29 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/licenseInfo.mustache create mode 100644 modules/swagger-codegen/src/main/resources/JavaJaxRS/modelEnum.mustache diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java index 9bd2484b474..7d88ec93157 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaCodegen.java @@ -45,6 +45,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code public static final String FULL_JAVA_UTIL = "fullJavaUtil"; public static final String DEFAULT_LIBRARY = ""; public static final String DATE_LIBRARY = "dateLibrary"; + public static final String SUPPORT_JAVA6 = "supportJava6"; protected String dateLibrary = "joda"; protected String invokerPackage = "io.swagger"; @@ -63,6 +64,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code protected boolean hideGenerationTimestamp = false; protected String apiDocPath = "docs/"; protected String modelDocPath = "docs/"; + protected boolean supportJava6= false; public AbstractJavaCodegen() { super(); @@ -139,6 +141,12 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code public void processOpts() { super.processOpts(); + if (additionalProperties.containsKey(SUPPORT_JAVA6)) { + this.setSupportJava6(Boolean.valueOf(additionalProperties.get(SUPPORT_JAVA6).toString())); + } + additionalProperties.put(SUPPORT_JAVA6, supportJava6); + + if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) { this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE)); } else if (additionalProperties.containsKey(CodegenConstants.API_PACKAGE)) { @@ -934,6 +942,10 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code } return sb.toString(); } + public void setSupportJava6(boolean value) { + this.supportJava6 = value; + } + public String toRegularExpression(String pattern) { return escapeText(pattern); diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java index 9ed96485119..de0812c40f8 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java @@ -200,10 +200,4 @@ public abstract class AbstractJavaJAXRSServerCodegen extends AbstractJavaCodegen private String implFileFolder(String output) { return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); } - - @Override - public boolean shouldOverwrite(String filename) { - return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); - } - } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index 6a472c39646..a2632bd036c 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -17,7 +17,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida public static final String USE_RX_JAVA = "useRxJava"; public static final String PARCELABLE_MODEL = "parcelableModel"; - public static final String SUPPORT_JAVA6 = "supportJava6"; public static final String RETROFIT_1 = "retrofit"; public static final String RETROFIT_2 = "retrofit2"; @@ -25,7 +24,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida protected String gradleWrapperPackage = "gradle.wrapper"; protected boolean useRxJava = false; protected boolean parcelableModel = false; - protected boolean supportJava6= false; protected boolean useBeanValidation = false; public JavaClientCodegen() { @@ -85,20 +83,15 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida } // put the boolean value back to PARCELABLE_MODEL in additionalProperties additionalProperties.put(PARCELABLE_MODEL, parcelableModel); - + if (additionalProperties.containsKey(USE_BEANVALIDATION)) { boolean useBeanValidationProp = Boolean.valueOf(additionalProperties.get(USE_BEANVALIDATION).toString()); this.setUseBeanValidation(useBeanValidationProp); - + // write back as boolean additionalProperties.put(USE_BEANVALIDATION, useBeanValidationProp); } - if (additionalProperties.containsKey(SUPPORT_JAVA6)) { - this.setSupportJava6(Boolean.valueOf(additionalProperties.get(SUPPORT_JAVA6).toString())); - } - additionalProperties.put(SUPPORT_JAVA6, supportJava6); - final String invokerFolder = (sourceFolder + '/' + invokerPackage).replace(".", "/"); final String authFolder = (sourceFolder + '/' + invokerPackage + ".auth").replace(".", "/"); @@ -196,7 +189,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida operation.returnType = "Void"; } if (usesRetrofit2Library() && StringUtils.isNotEmpty(operation.path) && operation.path.startsWith("/")) - operation.path = operation.path.substring(1); + operation.path = operation.path.substring(1); } } } @@ -244,7 +237,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida } return objs; } - + public void setUseRxJava(boolean useRxJava) { this.useRxJava = useRxJava; } @@ -253,10 +246,6 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida this.parcelableModel = parcelableModel; } - public void setSupportJava6(boolean value) { - this.supportJava6 = value; - } - public void setUseBeanValidation(boolean useBeanValidation) { this.useBeanValidation = useBeanValidation; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJAXRSSpecServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJAXRSSpecServerCodegen.java index 4e1f388e8a4..7c8d03c1375 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJAXRSSpecServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJAXRSSpecServerCodegen.java @@ -24,7 +24,6 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen public JavaJAXRSSpecServerCodegen() { super(); - sourceFolder = "src/main/java"; invokerPackage = "io.swagger.api"; artifactId = "swagger-jaxrs-server"; outputFolder = "generated-code/JavaJaxRS-Spec"; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java index d09bb34990e..b8aef14410b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaJerseyServerCodegen.java @@ -44,7 +44,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen { library.setDefault(DEFAULT_LIBRARY); cliOptions.add(library); - + cliOptions.add(CliOption.newBoolean(SUPPORT_JAVA6, "Whether to support Java6 with the Jersey1/2 library.")); } @Override @@ -110,6 +110,7 @@ public class JavaJerseyServerCodegen extends AbstractJavaJAXRSServerCodegen { supportingFiles.add(new SupportingFile("StringUtil.mustache", (sourceFolder + '/' + apiPackage).replace(".", "/"), "StringUtil.java")); } + @Override public Map postProcessModelsEnum(Map objs) { objs = super.postProcessModelsEnum(objs); diff --git a/modules/swagger-codegen/src/main/resources/Java/pom.mustache b/modules/swagger-codegen/src/main/resources/Java/pom.mustache index 78225ad7599..9bd93ccd5e9 100644 --- a/modules/swagger-codegen/src/main/resources/Java/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/Java/pom.mustache @@ -180,6 +180,7 @@ migbase64 2.2 + {{#supportJava6}} org.apache.commons diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/licenseInfo.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/licenseInfo.mustache new file mode 100644 index 00000000000..26b9876c7e1 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/licenseInfo.mustache @@ -0,0 +1,23 @@ +/* + * {{{appName}}} + * {{{appDescription}}} + * + * {{#version}}OpenAPI spec version: {{{version}}}{{/version}} + * {{#infoEmail}}Contact: {{{infoEmail}}}{{/infoEmail}} + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + * + * Licensed 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. + */ diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/model.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/model.mustache index d52b90c8bec..b84bfee6a85 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/model.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/model.mustache @@ -1,6 +1,13 @@ +{{>licenseInfo}} + package {{package}}; +{{^supportJava6}} import java.util.Objects; +{{/supportJava6}} +{{#supportJava6}} +import org.apache.commons.lang3.ObjectUtils; +{{/supportJava6}} {{#imports}}import {{import}}; {{/imports}} {{#serializableModel}} @@ -9,11 +16,6 @@ import java.io.Serializable; {{#models}} {{#model}} -{{#isEnum}} -{{>enumOuterClass}} -{{/isEnum}} -{{^isEnum}} -{{>pojo}} -{{/isEnum}} +{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>pojo}}{{/isEnum}} {{/model}} {{/models}} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/modelEnum.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/modelEnum.mustache new file mode 100644 index 00000000000..baddbae19be --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/modelEnum.mustache @@ -0,0 +1,43 @@ +{{#jackson}} +import com.fasterxml.jackson.annotation.JsonCreator; +{{/jackson}} + +/** + * {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}} + */ +public enum {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} { + {{#gson}} + {{#allowableValues}}{{#enumVars}} + @SerializedName({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}) + {{{name}}}({{{value}}}){{^-last}}, + {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}} + {{/gson}} + {{^gson}} + {{#allowableValues}}{{#enumVars}} + {{{name}}}({{{value}}}){{^-last}}, + {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}} + {{/gson}} + + private {{{dataType}}} value; + + {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}({{{dataType}}} value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } +{{#jackson}} + + @JsonCreator + public static {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue(String text) { + for ({{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{#datatypeWithEnum}}{{{.}}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) { + if (String.valueOf(b.value).equals(text)) { + return b; + } + } + return null; + } +{{/jackson}} +} diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pojo.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pojo.mustache index 6e5c1b74115..f3a36ecc387 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pojo.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pojo.mustache @@ -79,6 +79,7 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali {{/vars}} +{{^supportJava6}} @Override public boolean equals(java.lang.Object o) { if (this == o) { @@ -99,6 +100,30 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#seriali return Objects.hash({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); } +{{/supportJava6}} +{{#supportJava6}} + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + }{{#hasVars}} + {{classname}} {{classVarName}} = ({{classname}}) o; + return {{#vars}}ObjectUtils.equals(this.{{name}}, {{classVarName}}.{{name}}){{#hasMore}} && + {{/hasMore}}{{/vars}}{{#parent}} && + super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}} + return true;{{/hasVars}} + } + + @Override + public int hashCode() { + return ObjectUtils.hashCodeMulti({{#vars}}{{name}}{{#hasMore}}, {{/hasMore}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}); + } + +{{/supportJava6}} + @Override public String toString() { StringBuilder sb = new StringBuilder(); diff --git a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache index d764934cf77..03582826a58 100644 --- a/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache +++ b/modules/swagger-codegen/src/main/resources/JavaJaxRS/pom.mustache @@ -124,6 +124,27 @@ jersey-media-multipart ${jersey2-version} + + + com.brsanthu + migbase64 + 2.2 + + + {{#supportJava6}} + + org.apache.commons + commons-lang3 + ${commons_lang3_version} + + + + commons-io + commons-io + ${commons_io_version} + + {{/supportJava6}} + @@ -141,6 +162,10 @@ 1.5.9 9.2.9.v20150224 2.22.2 + {{#supportJava6}} + 2.5 + 3.5 + {{/supportJava6}} 4.12 1.1.7 2.5 diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java index 7753c8e45da..8c6c7149f9b 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/jaxrs/JaxRSServerOptionsTest.java @@ -54,6 +54,8 @@ public class JaxRSServerOptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.setDateLibrary("joda"); times = 1; + clientCodegen.setSupportJava6(false); + times = 1; }}; } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java index 230084c2ec9..3db594f94b8 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/JaxRSServerOptionsProvider.java @@ -39,6 +39,7 @@ public class JaxRSServerOptionsProvider implements OptionsProvider { ImmutableMap.Builder builder = new ImmutableMap.Builder(); builder.put(CodegenConstants.IMPL_FOLDER, IMPL_FOLDER_VALUE) .put(JavaClientCodegen.DATE_LIBRARY, "joda") //java.lang.IllegalArgumentException: Multiple entries with same key: dateLibrary=joda and dateLibrary=joda + .put(JavaClientCodegen.SUPPORT_JAVA6, "false") .put("title", "Test title") .put(CodegenConstants.MODEL_PACKAGE, MODEL_PACKAGE_VALUE) .put(CodegenConstants.API_PACKAGE, API_PACKAGE_VALUE)