forked from loafle/openapi-generator-original
NancyFx:
- Handling importMapping
This commit is contained in:
parent
ba26df95e2
commit
c734a216af
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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}}
|
||||||
|
@ -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}}
|
||||||
|
@ -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>
|
@ -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>
|
Loading…
x
Reference in New Issue
Block a user