From c6d4df3e4134bfc014d3e445f31871e192574b67 Mon Sep 17 00:00:00 2001 From: Jakub Malek Date: Mon, 30 May 2016 15:04:16 +0200 Subject: [PATCH] NancyFx: - Handling class name mapping --- .../languages/NancyFXServerCodegen.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java index 4ff51e1ded5..649699d03ef 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/NancyFXServerCodegen.java @@ -38,6 +38,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Predicate; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -53,6 +55,7 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { private final String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}"; private final Map dependencies = new HashMap<>(); + private final BiMap modelNameMapping = HashBiMap.create(); public NancyFXServerCodegen() { outputFolder = "generated-code" + File.separator + getName(); @@ -121,20 +124,27 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { for (final Entry entry : ImmutableSet.copyOf(importMapping.entrySet())) { final String model = entry.getKey(); final String[] namespaceInfo = entry.getValue().split("\\s"); - final String namespace = namespaceInfo.length > 0 ? namespaceInfo[0].trim() : null; + final String[] namespace = (namespaceInfo.length > 0 ? namespaceInfo[0].trim() : "").split(":"); + final String namespaceName = namespace.length > 0 ? namespace[0].trim() : null; + final String modelClass = namespace.length > 1 ? namespace[1].trim() : null; final String assembly = namespaceInfo.length > 1 ? namespaceInfo[1].trim() : null; final String assemblyVersion = namespaceInfo.length > 2 ? namespaceInfo[2].trim() : null; final String assemblyFramework = namespaceInfo.length > 3 ? namespaceInfo[3].trim() : "net45"; - if (namespace == null) { + + if (isNullOrEmpty(model) || isNullOrEmpty(namespaceName)) { log.warn(String.format("Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue())); importMapping.remove(model); } else { - log.info(String.format("Importing: '%s' from '%s' namespace.", model, namespace)); - importMapping.put(model, namespace); + log.info(String.format("Importing: '%s' from '%s' namespace.", model, namespaceName)); + importMapping.put(model, namespaceName); + } + if (!isNullOrEmpty(modelClass)) { + log.info(String.format("Mapping: '%s' class to '%s'", model, modelClass)); + modelNameMapping.put(model, modelClass); } if (assembly != null && assemblyVersion != null) { - log.info("Adding dependency: '%s', version: '%s', framework: '%s'", - assembly, assemblyVersion, assemblyVersion); + log.info(String.format("Adding dependency: '%s', version: '%s', framework: '%s'", + assembly, assemblyVersion, assemblyVersion)); dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework)); } } @@ -214,6 +224,29 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { return super.toApiFilename(name) + "Module"; } + @Override + public String toModelImport(final String name) { + final String result; + if (modelNameMapping.containsValue(name)) { + final String modelName = modelNameMapping.inverse().get(name); + result = importMapping.containsKey(modelName) ? + importMapping.get(modelName) : super.toModelImport(name); + } else if (importMapping.containsKey(name)) { + result = importMapping.get(name); + } else { + result = null; + } + log.info(String.format("toModelImport('%s') = '%s'", name, result)); + return result; + } + + @Override + public String toModelName(final String name) { + final String modelName = super.toModelName(name); + final String mappedModelName = modelNameMapping.get(modelName); + return isNullOrEmpty(mappedModelName) ? modelName: mappedModelName; + } + @Override public void preprocessSwagger(final Swagger swagger) { additionalProperties.put("packageContext", sanitizeName(swagger.getBasePath()));