From 6bffe4dbc7340bfe7f00b0a1c0039c6ab7cf202b Mon Sep 17 00:00:00 2001 From: Vincent Devos <46601673+karismann@users.noreply.github.com> Date: Mon, 20 May 2019 05:20:48 +0200 Subject: [PATCH] [Groovy] improve code parsing body/form params (#2879) * [Groovy] improve code parsing body/form params * remove leading space * remove leading space --- docs/generators/groovy.md | 2 - .../openapitools/codegen/DefaultCodegen.java | 2 +- .../languages/AbstractApexCodegen.java | 13 ---- .../languages/AbstractJavaCodegen.java | 26 ++----- .../languages/GroovyClientCodegen.java | 5 +- .../languages/JavaJAXRSSpecServerCodegen.java | 10 +-- .../src/main/resources/Groovy/api.mustache | 48 +++++++------ .../groovy/org/openapitools/api/PetApi.groovy | 72 +++---------------- .../org/openapitools/api/StoreApi.groovy | 16 +---- .../org/openapitools/api/UserApi.groovy | 53 ++------------ 10 files changed, 51 insertions(+), 196 deletions(-) diff --git a/docs/generators/groovy.md b/docs/generators/groovy.md index 16d4e284a1e..e5ac52bafba 100644 --- a/docs/generators/groovy.md +++ b/docs/generators/groovy.md @@ -17,8 +17,6 @@ sidebar_label: groovy |groupId|groupId in generated pom.xml| |org.openapitools| |artifactId|artifactId in generated pom.xml. This also becomes part of the generated library's filename| |openapi-groovy| |artifactVersion|artifact version in generated pom.xml. This also becomes part of the generated library's filename| |1.0.0| -|artifactUrl|artifact URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| -|artifactDescription|artifact description in generated pom.xml| |OpenAPI Java| |scmConnection|SCM connection in generated pom.xml| |scm:git:git@github.com:openapitools/openapi-generator.git| |scmDeveloperConnection|SCM developer connection in generated pom.xml| |scm:git:git@github.com:openapitools/openapi-generator.git| |scmUrl|SCM URL in generated pom.xml| |https://github.com/openapitools/openapi-generator| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 5a89e31a19a..7c928dee6ce 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4862,7 +4862,7 @@ public class DefaultCodegen implements CodegenConfig { * * @param objs map of object */ - public void generateJSONSpecFile(Map objs) { + protected void generateJSONSpecFile(Map objs) { OpenAPI openAPI = (OpenAPI) objs.get("openAPI"); if (openAPI != null) { try { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java index 4f4e60730d6..d2a20593f52 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractApexCodegen.java @@ -652,19 +652,6 @@ public abstract class AbstractApexCodegen extends DefaultCodegen implements Code return escapeText(pattern); } - public boolean convertPropertyToBoolean(String propertyKey) { - boolean booleanValue = false; - if (additionalProperties.containsKey(propertyKey)) { - booleanValue = Boolean.valueOf(additionalProperties.get(propertyKey).toString()); - } - - return booleanValue; - } - - public void writePropertyBack(String propertyKey, boolean value) { - additionalProperties.put(propertyKey, value); - } - @Override public String sanitizeTag(String tag) { return camelize(sanitizeName(tag)); 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 3c4ec0102c8..8c7260f3b3e 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 @@ -1060,7 +1060,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code String defaultContentType = "application/json"; Set producesInfo = getProducesInfo(openAPI, operation); if (producesInfo != null && !producesInfo.isEmpty()) { - ArrayList produces = new ArrayList(producesInfo); + ArrayList produces = new ArrayList<>(producesInfo); StringBuilder sb = new StringBuilder(); for (String produce : produces) { if (defaultContentType.equalsIgnoreCase(produce)) { @@ -1085,7 +1085,7 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code @Override protected boolean needToImport(String type) { - return super.needToImport(type) && type.indexOf(".") < 0; + return super.needToImport(type) && !type.contains("."); } @Override @@ -1183,10 +1183,11 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code if (removedChildEnum) { // If we removed an entry from this model's vars, we need to ensure hasMore is updated - int count = 0, numVars = codegenProperties.size(); + int count = 0; + int numVars = codegenProperties.size(); for (CodegenProperty codegenProperty : codegenProperties) { count += 1; - codegenProperty.hasMore = (count < numVars) ? true : false; + codegenProperty.hasMore = count < numVars; } codegenModel.vars = codegenProperties; } @@ -1444,27 +1445,13 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code return escapeText(pattern); } - @Override - public boolean convertPropertyToBoolean(String propertyKey) { - boolean booleanValue = false; - if (additionalProperties.containsKey(propertyKey)) { - booleanValue = Boolean.valueOf(additionalProperties.get(propertyKey).toString()); - } - - return booleanValue; - } - - @Override - public void writePropertyBack(String propertyKey, boolean value) { - additionalProperties.put(propertyKey, value); - } - /** * Output the Getter name for boolean property, e.g. isActive * * @param name the name of the property * @return getter name based on naming convention */ + @Override public String toBooleanGetter(String name) { return booleanGetterPrefix + getterAndSetterCapitalize(name); } @@ -1505,7 +1492,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code return camelize(name, lowercaseFirstLetter); } - @Override public void postProcessFile(File file, String fileType) { if (file == null) { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GroovyClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GroovyClientCodegen.java index 94332fed9d8..ecae95083c9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GroovyClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GroovyClientCodegen.java @@ -56,13 +56,15 @@ public class GroovyClientCodegen extends AbstractJavaCodegen { artifactId = "openapi-groovy"; dateLibrary = "legacy"; //TODO: add joda support to groovy - // clioOptions default redefinition need to be updated + // cliOptions default redefinition need to be updated updateOption(CodegenConstants.SOURCE_FOLDER, this.getSourceFolder()); updateOption(CodegenConstants.INVOKER_PACKAGE, this.getInvokerPackage()); updateOption(CodegenConstants.ARTIFACT_ID, this.getArtifactId()); updateOption(CodegenConstants.API_PACKAGE, apiPackage); updateOption(CodegenConstants.MODEL_PACKAGE, modelPackage); updateOption(DATE_LIBRARY, this.getDateLibrary()); + removeOption(CodegenConstants.ARTIFACT_URL); + removeOption(CodegenConstants.ARTIFACT_DESCRIPTION); } @@ -95,7 +97,6 @@ public class GroovyClientCodegen extends AbstractJavaCodegen { @Override public Map postProcessOperationsWithModels(Map operations, List allModels) { Map objs = (Map) operations.get("operations"); - List ops = (List) objs.get("operation"); for (CodegenOperation op : ops) { // Overwrite path to map variable with path parameters diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java index 67a8f39b083..776915734a3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java @@ -54,7 +54,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen { apiPackage = "org.openapitools.api"; modelPackage = "org.openapitools.model"; - // clioOptions default redifinition need to be updated + // cliOptions default redefinition need to be updated updateOption(CodegenConstants.INVOKER_PACKAGE, this.getInvokerPackage()); updateOption(CodegenConstants.ARTIFACT_ID, this.getArtifactId()); updateOption(CodegenConstants.API_PACKAGE, apiPackage); @@ -80,13 +80,7 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen { super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "spec"; - for (int i = 0; i < cliOptions.size(); i++) { - if (CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt())) { - cliOptions.remove(i); - break; - } - } - + removeOption(CodegenConstants.LIBRARY); CliOption library = new CliOption(CodegenConstants.LIBRARY, CodegenConstants.LIBRARY_DESC).defaultValue(DEFAULT_LIBRARY); Map supportedLibraries = new LinkedHashMap<>(); supportedLibraries.put(DEFAULT_LIBRARY, "JAXRS"); diff --git a/modules/openapi-generator/src/main/resources/Groovy/api.mustache b/modules/openapi-generator/src/main/resources/Groovy/api.mustache index 20fe23f9623..daa1351ff74 100644 --- a/modules/openapi-generator/src/main/resources/Groovy/api.mustache +++ b/modules/openapi-generator/src/main/resources/Groovy/api.mustache @@ -20,12 +20,14 @@ class {{classname}} { def bodyParams def contentType - {{#allParams}}{{#required}} + {{#allParams}} + {{#required}} // verify required params are set if ({{paramName}} == null) { throw new RuntimeException("missing required params {{paramName}}") } - {{/required}}{{/allParams}} + {{/required}} + {{/allParams}} {{#queryParams}} if ({{paramName}} != null) { @@ -47,15 +49,19 @@ class {{classname}} { contentType = '{{{mediaType}}}'; {{/consumes.0}} {{/bodyParam}} + {{#bodyParams.0}} + {{^hasMore}} + bodyParams = {{paramName}} + {{/hasMore}} + {{#hasMore}} + bodyParams = [:] + bodyParams.put("{{baseName}}", {{paramName}}) + {{/hasMore}} + {{/bodyParams.0}} {{#bodyParams}} - // only one body parameter - if (1 == {{bodyParams.size}}) { - bodyParams = {{paramName}} - } - // array of body parameters - else { - bodyParams.put("{{baseName}}", {{paramName}}) - } + {{#secondaryParam}} + bodyParams.put("{{baseName}}", {{paramName}}) + {{/secondaryParam}} {{/bodyParams}} {{#hasFormParams}} @@ -63,20 +69,18 @@ class {{classname}} { contentType = '{{{mediaType}}}'; {{/consumes.0}} {{#formParams.0}} - // only one form parameter - if (1 == {{formParams.size}}) { - bodyParams = {{paramName}} - } - // array of form parameters - else { - bodyParams = [:] - } + {{^hasMore}} + bodyParams = {{paramName}} + {{/hasMore}} + {{#hasMore}} + bodyParams = [:] + bodyParams.put("{{baseName}}", {{paramName}}) + {{/hasMore}} {{/formParams.0}} {{#formParams}} - // array of form parameters - if (1 < {{formParams.size}}) { - bodyParams.put("{{baseName}}", {{paramName}}) - } + {{#secondaryParam}} + bodyParams.put("{{baseName}}", {{paramName}}) + {{/secondaryParam}} {{/formParams}} {{/hasFormParams}} diff --git a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/PetApi.groovy b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/PetApi.groovy index c022982020a..60f3f7d45da 100644 --- a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/PetApi.groovy +++ b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/PetApi.groovy @@ -18,24 +18,15 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, @@ -53,12 +44,10 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (petId == null) { throw new RuntimeException("missing required params petId") } - if (apiKey != null) { @@ -82,12 +71,10 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (status == null) { throw new RuntimeException("missing required params status") } - if (status != null) { queryParams.put("status", status) @@ -111,12 +98,10 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (tags == null) { throw new RuntimeException("missing required params tags") } - if (tags != null) { queryParams.put("tags", tags) @@ -140,12 +125,10 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (petId == null) { throw new RuntimeException("missing required params petId") } - @@ -166,24 +149,15 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, @@ -201,33 +175,18 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (petId == null) { throw new RuntimeException("missing required params petId") } - contentType = 'application/x-www-form-urlencoded'; - // only one form parameter - if (1 == 2) { - bodyParams = name - } - // array of form parameters - else { - bodyParams = [:] - } - // array of form parameters - if (1 < 2) { - bodyParams.put("name", name) - } - // array of form parameters - if (1 < 2) { - bodyParams.put("status", status) - } + bodyParams = [:] + bodyParams.put("name", name) + bodyParams.put("status", status) apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, "POST", "", @@ -244,33 +203,18 @@ class PetApi { def bodyParams def contentType - // verify required params are set if (petId == null) { throw new RuntimeException("missing required params petId") } - contentType = 'multipart/form-data'; - // only one form parameter - if (1 == 2) { - bodyParams = additionalMetadata - } - // array of form parameters - else { - bodyParams = [:] - } - // array of form parameters - if (1 < 2) { - bodyParams.put("additionalMetadata", additionalMetadata) - } - // array of form parameters - if (1 < 2) { - bodyParams.put("file", file) - } + bodyParams = [:] + bodyParams.put("additionalMetadata", additionalMetadata) + bodyParams.put("file", file) apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, "POST", "", diff --git a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/StoreApi.groovy b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/StoreApi.groovy index 154551d1880..8e7a0ee9d27 100644 --- a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/StoreApi.groovy +++ b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/StoreApi.groovy @@ -17,12 +17,10 @@ class StoreApi { def bodyParams def contentType - // verify required params are set if (orderId == null) { throw new RuntimeException("missing required params orderId") } - @@ -43,7 +41,6 @@ class StoreApi { def bodyParams def contentType - @@ -64,12 +61,10 @@ class StoreApi { def bodyParams def contentType - // verify required params are set if (orderId == null) { throw new RuntimeException("missing required params orderId") } - @@ -90,24 +85,15 @@ class StoreApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, diff --git a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/UserApi.groovy b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/UserApi.groovy index 2d0ec2ab73c..8cc83986808 100644 --- a/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/UserApi.groovy +++ b/samples/client/petstore/groovy/src/main/groovy/org/openapitools/api/UserApi.groovy @@ -18,24 +18,15 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, @@ -53,24 +44,15 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, @@ -88,24 +70,15 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType, @@ -123,12 +96,10 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (username == null) { throw new RuntimeException("missing required params username") } - @@ -149,12 +120,10 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (username == null) { throw new RuntimeException("missing required params username") } - @@ -175,17 +144,14 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (username == null) { throw new RuntimeException("missing required params username") } - // verify required params are set if (password == null) { throw new RuntimeException("missing required params password") } - if (username != null) { queryParams.put("username", username) @@ -212,7 +178,6 @@ class UserApi { def bodyParams def contentType - @@ -233,29 +198,19 @@ class UserApi { def bodyParams def contentType - // verify required params are set if (username == null) { throw new RuntimeException("missing required params username") } - // verify required params are set if (body == null) { throw new RuntimeException("missing required params body") } - contentType = 'application/json'; - // only one body parameter - if (1 == 1) { - bodyParams = body - } - // array of body parameters - else { - bodyParams.put("body", body) - } + bodyParams = body apiUtils.invokeApi(onSuccess, onFailure, basePath, versionPath, resourcePath, queryParams, headerParams, bodyParams, contentType,