- Handling class name mapping
This commit is contained in:
Jakub Malek 2016-05-30 15:04:16 +02:00 committed by Jakub Malek
parent c734a216af
commit c6d4df3e41

View File

@ -38,6 +38,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.google.common.base.Predicate; 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.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
@ -53,6 +55,7 @@ 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<>(); private final Map<String, DependencyInfo> dependencies = new HashMap<>();
private final BiMap<String, String> modelNameMapping = HashBiMap.create();
public NancyFXServerCodegen() { public NancyFXServerCodegen() {
outputFolder = "generated-code" + File.separator + getName(); outputFolder = "generated-code" + File.separator + getName();
@ -121,20 +124,27 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
for (final Entry<String, String> entry : ImmutableSet.copyOf(importMapping.entrySet())) { for (final Entry<String, String> entry : ImmutableSet.copyOf(importMapping.entrySet())) {
final String model = entry.getKey(); final String model = entry.getKey();
final String[] namespaceInfo = entry.getValue().split("\\s"); 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 assembly = namespaceInfo.length > 1 ? namespaceInfo[1].trim() : null;
final String assemblyVersion = namespaceInfo.length > 2 ? namespaceInfo[2].trim() : null; final String assemblyVersion = namespaceInfo.length > 2 ? namespaceInfo[2].trim() : null;
final String assemblyFramework = namespaceInfo.length > 3 ? namespaceInfo[3].trim() : "net45"; 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())); log.warn(String.format("Could not import: '%s' - invalid namespace: '%s'", model, entry.getValue()));
importMapping.remove(model); importMapping.remove(model);
} else { } else {
log.info(String.format("Importing: '%s' from '%s' namespace.", model, namespace)); log.info(String.format("Importing: '%s' from '%s' namespace.", model, namespaceName));
importMapping.put(model, namespace); 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) { if (assembly != null && assemblyVersion != null) {
log.info("Adding dependency: '%s', version: '%s', framework: '%s'", log.info(String.format("Adding dependency: '%s', version: '%s', framework: '%s'",
assembly, assemblyVersion, assemblyVersion); assembly, assemblyVersion, assemblyVersion));
dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework)); dependencies.put(assembly, new DependencyInfo(assemblyVersion, assemblyFramework));
} }
} }
@ -214,6 +224,29 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
return super.toApiFilename(name) + "Module"; 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 @Override
public void preprocessSwagger(final Swagger swagger) { public void preprocessSwagger(final Swagger swagger) {
additionalProperties.put("packageContext", sanitizeName(swagger.getBasePath())); additionalProperties.put("packageContext", sanitizeName(swagger.getBasePath()));