- Handling importMapping
This commit is contained in:
Jakub Malek 2016-05-30 13:21:55 +02:00 committed by Jakub Malek
parent ba26df95e2
commit c734a216af
5 changed files with 64 additions and 0 deletions

View File

@ -28,6 +28,9 @@ import io.swagger.models.properties.Property;
import io.swagger.models.properties.StringProperty; import io.swagger.models.properties.StringProperty;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -36,6 +39,7 @@ import org.slf4j.LoggerFactory;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
public class NancyFXServerCodegen extends AbstractCSharpCodegen { public class NancyFXServerCodegen extends AbstractCSharpCodegen {
private static final Logger log = LoggerFactory.getLogger(NancyFXServerCodegen.class); 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 String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}";
private final Map<String, DependencyInfo> dependencies = new HashMap<>();
public NancyFXServerCodegen() { public NancyFXServerCodegen() {
outputFolder = "generated-code" + File.separator + getName(); outputFolder = "generated-code" + File.separator + getName();
modelTemplateFiles.put("model.mustache", ".cs"); modelTemplateFiles.put("model.mustache", ".cs");
@ -72,6 +78,8 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
addSwitch(USE_COLLECTION, USE_COLLECTION_DESC, useCollection); addSwitch(USE_COLLECTION, USE_COLLECTION_DESC, useCollection);
addSwitch(RETURN_ICOLLECTION, RETURN_ICOLLECTION_DESC, returnICollection); addSwitch(RETURN_ICOLLECTION, RETURN_ICOLLECTION_DESC, returnICollection);
typeMapping.putAll(nodaTimeTypesMappings()); typeMapping.putAll(nodaTimeTypesMappings());
importMapping.clear();
} }
@Override @Override
@ -105,6 +113,43 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder(), packageName + ".csproj")); supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder(), packageName + ".csproj"));
} }
additionalProperties.put("packageGuid", packageGuid); additionalProperties.put("packageGuid", packageGuid);
processImportMapping();
setupDependencies();
}
private void processImportMapping() {
for (final Entry<String, String> 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<Map<String, String>> listOfDependencies = new ArrayList<>();
for (final Entry<String, DependencyInfo> dependency : dependencies.entrySet()) {
final Map<String, String> 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() { private String sourceFolder() {
@ -211,4 +256,14 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
"date", "ZonedDateTime?", "date", "ZonedDateTime?",
"datetime", "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;
}
}
} }

View File

@ -6,6 +6,8 @@ using Sharpility.Base;
using {{packageName}}.{{packageContext}}.Models; using {{packageName}}.{{packageContext}}.Models;
using {{packageName}}.{{packageContext}}.Utils; using {{packageName}}.{{packageContext}}.Utils;
using NodaTime; using NodaTime;
{{#imports}}using {{import}};
{{/imports}}
namespace {{packageName}}.{{packageContext}}.Modules namespace {{packageName}}.{{packageContext}}.Modules
{ {{#operations}}{{#operation}}{{#allParams}}{{#isEnum}} { {{#operations}}{{#operation}}{{#allParams}}{{#isEnum}}

View File

@ -4,6 +4,8 @@ using System.IO;
using System.Text; using System.Text;
using Sharpility.Extensions; using Sharpility.Extensions;
using NodaTime; using NodaTime;
{{#imports}}using {{import}};
{{/imports}}
{{#models}} {{#models}}
{{#model}} {{#model}}

View File

@ -8,5 +8,7 @@
<owners>swagger-codegen</owners> <owners>swagger-codegen</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>NancyFx {{packageName}} API</description> <description>NancyFx {{packageName}} API</description>
<copyright>{{termsOfService}}</copyright>
<licenseUrl>{{licenseUrl}}</licenseUrl>
</metadata> </metadata>
</package> </package>

View File

@ -4,4 +4,7 @@
<package id="NodaTime" version="1.3.1" targetFramework="net45" /> <package id="NodaTime" version="1.3.1" targetFramework="net45" />
<package id="Sharpility" version="1.2.1" targetFramework="net45" /> <package id="Sharpility" version="1.2.1" targetFramework="net45" />
<package id="System.Collections.Immutable" version="1.1.37" targetFramework="net45" /> <package id="System.Collections.Immutable" version="1.1.37" targetFramework="net45" />
{{#dependencies}}
<package id="{{dependency}}" version="{{dependencyVersion}}" targetFramework="{{dependencyFramework}}" />
{{/dependencies}}
</packages> </packages>