From 078d7a38c0b2997ca5f71dad6f013a574d87750d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Bresson?= Date: Fri, 27 Sep 2019 05:39:08 +0200 Subject: [PATCH] [java] allow to use setArtifactVersion() programmatically (#3907) * [java] allow to use setArtifactVersion() programmatically * Fix default value in the docs and cli help --- .../languages/AbstractJavaCodegen.java | 29 +++++++---- .../codegen/java/AbstractJavaCodegenTest.java | 48 +++++++++++++++++++ 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index f04d4ac1379..d48702a62af 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -43,6 +43,8 @@ import static org.openapitools.codegen.utils.StringUtils.*; public abstract class AbstractJavaCodegen extends DefaultCodegen implements CodegenConfig { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractJavaCodegen.class); + private static final String ARTIFACT_VERSION_DEFAULT_VALUE = "1.0.0"; + public static final String FULL_JAVA_UTIL = "fullJavaUtil"; public static final String DEFAULT_LIBRARY = ""; public static final String DATE_LIBRARY = "dateLibrary"; @@ -60,7 +62,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code protected String invokerPackage = "org.openapitools"; protected String groupId = "org.openapitools"; protected String artifactId = "openapi-java"; - protected String artifactVersion = "1.0.0"; + protected String artifactVersion = null; protected String artifactUrl = "https://github.com/openapitools/openapi-generator"; protected String artifactDescription = "OpenAPI Java"; protected String developerName = "OpenAPI-Generator Contributors"; @@ -144,7 +146,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code cliOptions.add(new CliOption(CodegenConstants.INVOKER_PACKAGE, CodegenConstants.INVOKER_PACKAGE_DESC).defaultValue(this.getInvokerPackage())); cliOptions.add(new CliOption(CodegenConstants.GROUP_ID, CodegenConstants.GROUP_ID_DESC).defaultValue(this.getGroupId())); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_ID, CodegenConstants.ARTIFACT_ID_DESC).defaultValue(this.getArtifactId())); - cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, CodegenConstants.ARTIFACT_VERSION_DESC).defaultValue(this.getArtifactVersion())); + cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_VERSION, CodegenConstants.ARTIFACT_VERSION_DESC).defaultValue(ARTIFACT_VERSION_DEFAULT_VALUE)); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_URL, CodegenConstants.ARTIFACT_URL_DESC).defaultValue(this.getArtifactUrl())); cliOptions.add(new CliOption(CodegenConstants.ARTIFACT_DESCRIPTION, CodegenConstants.ARTIFACT_DESCRIPTION_DESC).defaultValue(this.getArtifactDescription())); cliOptions.add(new CliOption(CodegenConstants.SCM_CONNECTION, CodegenConstants.SCM_CONNECTION_DESC).defaultValue(this.getScmConnection())); @@ -1038,12 +1040,18 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code } } - // If no artifactVersion is provided in additional properties, version from API specification is used. - // If none of them is provided then fallbacks to default version - if (additionalProperties.containsKey(CodegenConstants.ARTIFACT_VERSION)) { - this.setArtifactVersion((String) additionalProperties.get(CodegenConstants.ARTIFACT_VERSION)); - } else if (openAPI.getInfo() != null && openAPI.getInfo().getVersion() != null) { - this.setArtifactVersion(openAPI.getInfo().getVersion()); + if(artifactVersion == null) { + // If no artifactVersion is provided in additional properties, version from API specification is used. + // If none of them is provided then fallbacks to default version + if (additionalProperties.containsKey(CodegenConstants.ARTIFACT_VERSION)) { + this.setArtifactVersion((String) additionalProperties.get(CodegenConstants.ARTIFACT_VERSION)); + } else if (openAPI.getInfo() != null && openAPI.getInfo().getVersion() != null) { + this.setArtifactVersion(openAPI.getInfo().getVersion()); + } else { + this.setArtifactVersion(ARTIFACT_VERSION_DEFAULT_VALUE); + } + } else { + additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion); } if (additionalProperties.containsKey(CodegenConstants.SNAPSHOT_VERSION)) { @@ -1433,7 +1441,10 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code * @return SNAPSHOT version */ private String buildSnapshotVersion(String version) { - return version + "-" + "SNAPSHOT"; + if(version.endsWith("-SNAPSHOT")) { + return version; + } + return version + "-SNAPSHOT"; } public void setSupportJava6(boolean value) { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java index 77fb953bb34..55cb8025f21 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/AbstractJavaCodegenTest.java @@ -121,8 +121,11 @@ public class AbstractJavaCodegenTest { @Test public void testInitialConfigValues() throws Exception { + OpenAPI openAPI = TestUtils.createOpenAPI(); + final AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); codegen.processOpts(); + codegen.preprocessOpenAPI(openAPI); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.FALSE); Assert.assertEquals(codegen.isHideGenerationTimestamp(), false); @@ -133,17 +136,25 @@ public class AbstractJavaCodegenTest { Assert.assertEquals(codegen.getInvokerPackage(), "org.openapitools"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "org.openapitools"); Assert.assertEquals(codegen.additionalProperties().get(AbstractJavaCodegen.BOOLEAN_GETTER_PREFIX), "get"); + Assert.assertEquals(codegen.getArtifactVersion(), openAPI.getInfo().getVersion()); + Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.ARTIFACT_VERSION), openAPI.getInfo().getVersion()); } @Test public void testSettersForConfigValues() throws Exception { + OpenAPI openAPI = TestUtils.createOpenAPI(); + final AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); + codegen.setHideGenerationTimestamp(true); codegen.setModelPackage("xyz.yyyyy.zzzzzzz.model"); codegen.setApiPackage("xyz.yyyyy.zzzzzzz.api"); codegen.setInvokerPackage("xyz.yyyyy.zzzzzzz.invoker"); codegen.setBooleanGetterPrefix("is"); + codegen.setArtifactVersion("0.9.0-SNAPSHOT"); + codegen.processOpts(); + codegen.preprocessOpenAPI(openAPI); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.TRUE); Assert.assertEquals(codegen.isHideGenerationTimestamp(), true); @@ -154,17 +165,24 @@ public class AbstractJavaCodegenTest { Assert.assertEquals(codegen.getInvokerPackage(), "xyz.yyyyy.zzzzzzz.invoker"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "xyz.yyyyy.zzzzzzz.invoker"); Assert.assertEquals(codegen.additionalProperties().get(AbstractJavaCodegen.BOOLEAN_GETTER_PREFIX), "is"); + Assert.assertEquals(codegen.getArtifactVersion(), "0.9.0-SNAPSHOT"); + Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.ARTIFACT_VERSION), "0.9.0-SNAPSHOT"); } @Test public void testAdditionalPropertiesPutForConfigValues() throws Exception { + OpenAPI openAPI = TestUtils.createOpenAPI(); + final AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); codegen.additionalProperties().put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, false); codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.yyyyy.model.oooooo"); codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.yyyyy.api.oooooo"); codegen.additionalProperties().put(CodegenConstants.INVOKER_PACKAGE, "xyz.yyyyy.invoker.oooooo"); codegen.additionalProperties().put(AbstractJavaCodegen.BOOLEAN_GETTER_PREFIX, "getBoolean"); + codegen.additionalProperties().put(CodegenConstants.ARTIFACT_VERSION, "0.8.0-SNAPSHOT"); codegen.processOpts(); + codegen.preprocessOpenAPI(openAPI); + Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.HIDE_GENERATION_TIMESTAMP), Boolean.FALSE); Assert.assertEquals(codegen.isHideGenerationTimestamp(), false); @@ -175,6 +193,8 @@ public class AbstractJavaCodegenTest { Assert.assertEquals(codegen.getInvokerPackage(), "xyz.yyyyy.invoker.oooooo"); Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "xyz.yyyyy.invoker.oooooo"); Assert.assertEquals(codegen.additionalProperties().get(AbstractJavaCodegen.BOOLEAN_GETTER_PREFIX), "getBoolean"); + Assert.assertEquals(codegen.getArtifactVersion(), "0.8.0-SNAPSHOT"); + Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.ARTIFACT_VERSION), "0.8.0-SNAPSHOT"); } @Test @@ -306,6 +326,34 @@ public class AbstractJavaCodegenTest { Assert.assertEquals(codegen.getArtifactVersion(), "1.0.0-SNAPSHOT"); } + @Test(description = "tests if default version with snapshot is used when OpenAPI version has been provided") + public void snapshotVersionOpenAPITest() { + final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); + + codegen.additionalProperties().put(CodegenConstants.SNAPSHOT_VERSION, "true"); + + OpenAPI api = TestUtils.createOpenAPI(); + api.getInfo().setVersion("2.0"); + codegen.processOpts(); + codegen.preprocessOpenAPI(api); + + Assert.assertEquals(codegen.getArtifactVersion(), "2.0-SNAPSHOT"); + } + + @Test(description = "tests if default version with snapshot is used when setArtifactVersion is used") + public void snapshotVersionAlreadySnapshotTest() { + final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen(); + + codegen.additionalProperties().put(CodegenConstants.SNAPSHOT_VERSION, "true"); + + OpenAPI api = TestUtils.createOpenAPI(); + codegen.setArtifactVersion("4.1.2-SNAPSHOT"); + codegen.processOpts(); + codegen.preprocessOpenAPI(api); + + Assert.assertEquals(codegen.getArtifactVersion(), "4.1.2-SNAPSHOT"); + } + @Test public void toDefaultValueTest() { final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();