From 46e8ccbd1ec7482f665e63eaf036f16e1af432e3 Mon Sep 17 00:00:00 2001 From: Erik Timmers Date: Wed, 27 Mar 2019 10:42:34 +0100 Subject: [PATCH] [elm] Import types in operations (#2488) * [elm] Import types in operations And stringify UUIDs. Fixes #2484. * [elm] Improve operation dependency detection --- .../codegen/languages/ElmClientCodegen.java | 37 +++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java index 32739004f52..1b46c7f2240 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ElmClientCodegen.java @@ -30,7 +30,9 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.text.Collator; import java.util.*; +import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.openapitools.codegen.utils.StringUtils.camelize; @@ -411,14 +413,26 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { return postProcessModelsEnum(objs); } + private static boolean anyOperationParam(final List operations, final Predicate predicate) { + return operations.stream() + .flatMap(operation -> Stream.of( + operation.bodyParams.stream(), + operation.queryParams.stream(), + operation.pathParams.stream(), + operation.headerParams.stream() + )) + .flatMap(a -> a) + .filter(predicate) + .findAny() + .isPresent(); + } + @Override @SuppressWarnings({"static-method", "unchecked"}) public Map postProcessOperationsWithModels(Map operations, List allModels) { Map objs = (Map) operations.get("operations"); List ops = (List) objs.get("operation"); - boolean hasDateTime = false; - boolean hasDate = false; final Map> dependencies = new HashMap<>(); for (CodegenOperation op : ops) { @@ -427,8 +441,6 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { for (CodegenParameter param : op.pathParams) { final String var = paramToString("params", param, false, null); path = path.replace("{" + param.paramName + "}", "\" ++ " + var + " ++ \""); - hasDateTime = hasDateTime || param.isDateTime; - hasDate = hasDate || param.isDate; } op.path = ("\"" + path + "\"").replaceAll(" \\+\\+ \"\"", ""); } else { @@ -437,8 +449,6 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { for (CodegenParameter param : op.pathParams) { String str = paramToString("params", param, false, null); path = path.replace("{" + param.paramName + "}", str); - hasDateTime = hasDateTime || param.isDateTime; - hasDate = hasDate || param.isDate; } op.path = path; @@ -487,6 +497,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { elmImport.hasExposures = true; elmImports.add(elmImport); } + final boolean hasDate = anyOperationParam(ops, param -> param.isDate); if (hasDate) { final ElmImport elmImport = new ElmImport(); elmImport.moduleName = "DateOnly"; @@ -495,6 +506,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { elmImport.hasExposures = true; elmImports.add(elmImport); } + final boolean hasDateTime = anyOperationParam(ops, param -> param.isDateTime); if (hasDateTime) { final ElmImport elmImport = new ElmImport(); elmImport.moduleName = "DateTime"; @@ -503,6 +515,15 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { elmImport.hasExposures = true; elmImports.add(elmImport); } + final boolean hasUuid = anyOperationParam(ops, param -> param.isUuid); + if (hasUuid) { + final ElmImport elmImport = new ElmImport(); + elmImport.moduleName = "Uuid"; + elmImport.exposures = new TreeSet<>(); + elmImport.exposures.add("Uuid"); + elmImport.hasExposures = true; + elmImports.add(elmImport); + } operations.put("elmImports", elmImports); return operations; @@ -553,7 +574,7 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { } String mapFn = null; - if (param.isString || param.isUuid || param.isBinary || param.isByteArray) { + if (param.isString || param.isBinary || param.isByteArray) { mapFn = ""; } else if (param.isBoolean) { mapFn = "(\\val -> if val then \"true\" else \"false\")"; @@ -561,6 +582,8 @@ public class ElmClientCodegen extends DefaultCodegen implements CodegenConfig { mapFn = "DateTime.toString"; } else if (param.isDate) { mapFn = "DateOnly.toString"; + } else if (param.isUuid) { + mapFn = "Uuid.toString"; } else if (ElmVersion.ELM_018.equals(elmVersion)) { mapFn = "toString"; } else if (param.isInteger || param.isLong) {