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 1f5665ac952..4ff51e1ded5 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 @@ -28,6 +28,9 @@ import io.swagger.models.properties.Property; import io.swagger.models.properties.StringProperty; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -36,6 +39,7 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; public class NancyFXServerCodegen extends AbstractCSharpCodegen { private static final Logger log = LoggerFactory.getLogger(NancyFXServerCodegen.class); @@ -48,6 +52,8 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { private final String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}"; + private final Map dependencies = new HashMap<>(); + public NancyFXServerCodegen() { outputFolder = "generated-code" + File.separator + getName(); modelTemplateFiles.put("model.mustache", ".cs"); @@ -72,6 +78,8 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { addSwitch(USE_COLLECTION, USE_COLLECTION_DESC, useCollection); addSwitch(RETURN_ICOLLECTION, RETURN_ICOLLECTION_DESC, returnICollection); typeMapping.putAll(nodaTimeTypesMappings()); + + importMapping.clear(); } @Override @@ -105,6 +113,43 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder(), packageName + ".csproj")); } additionalProperties.put("packageGuid", packageGuid); + processImportMapping(); + setupDependencies(); + } + + private void processImportMapping() { + 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 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) { + 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); + } + if (assembly != null && assemblyVersion != null) { + log.info("Adding dependency: '%s', version: '%s', framework: '%s'", + assembly, assemblyVersion, assemblyVersion); + dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework)); + } + } + } + + private void setupDependencies() { + final List> listOfDependencies = new ArrayList<>(); + for (final Entry dependency : dependencies.entrySet()) { + final Map dependencyInfo = new HashMap<>(); + dependencyInfo.put("dependency", dependency.getKey()); + dependencyInfo.put("dependencyVersion", dependency.getValue().version); + dependencyInfo.put("dependencyFramework", dependency.getValue().framework); + listOfDependencies.add(dependencyInfo); + } + additionalProperties.put("dependencies", listOfDependencies); } private String sourceFolder() { @@ -211,4 +256,14 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen { "date", "ZonedDateTime?", "datetime", "ZonedDateTime?"); } + + private class DependencyInfo { + private final String version; + private final String framework; + + private DependencyInfo(final String version, final String framework) { + this.version = version; + this.framework = framework; + } + } } diff --git a/modules/swagger-codegen/src/main/resources/nancyfx/api.mustache b/modules/swagger-codegen/src/main/resources/nancyfx/api.mustache index e0357ecada2..b6e1f316517 100644 --- a/modules/swagger-codegen/src/main/resources/nancyfx/api.mustache +++ b/modules/swagger-codegen/src/main/resources/nancyfx/api.mustache @@ -6,6 +6,8 @@ using Sharpility.Base; using {{packageName}}.{{packageContext}}.Models; using {{packageName}}.{{packageContext}}.Utils; using NodaTime; +{{#imports}}using {{import}}; +{{/imports}} namespace {{packageName}}.{{packageContext}}.Modules { {{#operations}}{{#operation}}{{#allParams}}{{#isEnum}} diff --git a/modules/swagger-codegen/src/main/resources/nancyfx/model.mustache b/modules/swagger-codegen/src/main/resources/nancyfx/model.mustache index cf5091624d3..e199575a130 100644 --- a/modules/swagger-codegen/src/main/resources/nancyfx/model.mustache +++ b/modules/swagger-codegen/src/main/resources/nancyfx/model.mustache @@ -4,6 +4,8 @@ using System.IO; using System.Text; using Sharpility.Extensions; using NodaTime; +{{#imports}}using {{import}}; +{{/imports}} {{#models}} {{#model}} diff --git a/modules/swagger-codegen/src/main/resources/nancyfx/nuspec.mustache b/modules/swagger-codegen/src/main/resources/nancyfx/nuspec.mustache index 2969443ab53..71772df6d71 100644 --- a/modules/swagger-codegen/src/main/resources/nancyfx/nuspec.mustache +++ b/modules/swagger-codegen/src/main/resources/nancyfx/nuspec.mustache @@ -8,5 +8,7 @@ swagger-codegen false NancyFx {{packageName}} API + {{termsOfService}} + {{licenseUrl}} \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/nancyfx/packages.config.mustache b/modules/swagger-codegen/src/main/resources/nancyfx/packages.config.mustache index 6d8651cdcf4..55c32a09bda 100644 --- a/modules/swagger-codegen/src/main/resources/nancyfx/packages.config.mustache +++ b/modules/swagger-codegen/src/main/resources/nancyfx/packages.config.mustache @@ -4,4 +4,7 @@ + {{#dependencies}} + + {{/dependencies}} \ No newline at end of file