forked from loafle/openapi-generator-original
NancyFx:
- Sealed class for generated Modules - Empty constructor added to model classes - Code cleanup
This commit is contained in:
parent
c59f2b0322
commit
a72640ce9c
@ -1,6 +1,24 @@
|
|||||||
package io.swagger.codegen.languages;
|
package io.swagger.codegen.languages;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.OPTIONAL_PROJECT_FILE_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.PACKAGE_NAME;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.PACKAGE_VERSION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.RETURN_ICOLLECTION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.RETURN_ICOLLECTION_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SOURCE_FOLDER;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SOURCE_FOLDER_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_COLLECTION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_COLLECTION_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_DATETIME_OFFSET;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_DATETIME_OFFSET_DESC;
|
||||||
|
import static io.swagger.codegen.CodegenType.SERVER;
|
||||||
|
import static java.util.Arrays.asList;
|
||||||
|
import static java.util.UUID.randomUUID;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.capitalize;
|
||||||
import io.swagger.codegen.CodegenOperation;
|
import io.swagger.codegen.CodegenOperation;
|
||||||
import io.swagger.codegen.CodegenProperty;
|
import io.swagger.codegen.CodegenProperty;
|
||||||
import io.swagger.codegen.CodegenType;
|
import io.swagger.codegen.CodegenType;
|
||||||
@ -8,20 +26,26 @@ import io.swagger.codegen.SupportingFile;
|
|||||||
import io.swagger.models.Swagger;
|
import io.swagger.models.Swagger;
|
||||||
import io.swagger.models.properties.Property;
|
import io.swagger.models.properties.Property;
|
||||||
import io.swagger.models.properties.StringProperty;
|
import io.swagger.models.properties.StringProperty;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
import static io.swagger.codegen.CodegenConstants.*;
|
import org.slf4j.Logger;
|
||||||
import static io.swagger.codegen.CodegenType.SERVER;
|
import org.slf4j.LoggerFactory;
|
||||||
import static java.util.Arrays.asList;
|
|
||||||
import static java.util.UUID.randomUUID;
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
private static final String API_NAMESPACE = "Modules";
|
||||||
|
private static final String MODEL_NAMESPACE = "Models";
|
||||||
|
|
||||||
|
private static final Map<String, Predicate<Property>> propertyToSwaggerTypeMapping =
|
||||||
|
createPropertyToSwaggerTypeMapping();
|
||||||
|
|
||||||
private final String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}";
|
private final String packageGuid = "{" + randomUUID().toString().toUpperCase() + "}";
|
||||||
|
|
||||||
public NancyFXServerCodegen() {
|
public NancyFXServerCodegen() {
|
||||||
@ -69,8 +93,8 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
|
|||||||
public void processOpts() {
|
public void processOpts() {
|
||||||
super.processOpts();
|
super.processOpts();
|
||||||
|
|
||||||
apiPackage = packageName + ".Modules";
|
apiPackage = isNullOrEmpty(packageName) ? API_NAMESPACE : packageName + "." + API_NAMESPACE;
|
||||||
modelPackage = packageName + ".Models";
|
modelPackage = isNullOrEmpty(packageName) ? MODEL_NAMESPACE : packageName + "." + MODEL_NAMESPACE;
|
||||||
|
|
||||||
supportingFiles.add(new SupportingFile("parameters.mustache", sourceFile("Utils"), "Parameters.cs"));
|
supportingFiles.add(new SupportingFile("parameters.mustache", sourceFile("Utils"), "Parameters.cs"));
|
||||||
supportingFiles.add(new SupportingFile("packages.config.mustache", sourceFolder(), "packages.config"));
|
supportingFiles.add(new SupportingFile("packages.config.mustache", sourceFolder(), "packages.config"));
|
||||||
@ -92,78 +116,94 @@ public class NancyFXServerCodegen extends AbstractCSharpCodegen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String apiFileFolder() {
|
public String apiFileFolder() {
|
||||||
return outputFolder + File.separator + sourceFolder() + File.separator + "Modules";
|
return outputFolder + File.separator + sourceFolder() + File.separator + API_NAMESPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String modelFileFolder() {
|
public String modelFileFolder() {
|
||||||
return outputFolder + File.separator + sourceFolder() + File.separator + "Models";
|
return outputFolder + File.separator + sourceFolder() + File.separator + MODEL_NAMESPACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void processOperation(CodegenOperation operation) {
|
protected void processOperation(final CodegenOperation operation) {
|
||||||
super.processOperation(operation);
|
super.processOperation(operation);
|
||||||
|
if (!isNullOrEmpty(operation.path) && operation.path.contains("?")) {
|
||||||
// HACK: Unlikely in the wild, but we need to clean operation paths for MVC Routing
|
|
||||||
if (operation.path != null) {
|
|
||||||
String original = operation.path;
|
|
||||||
operation.path = operation.path.replace("?", "/");
|
operation.path = operation.path.replace("?", "/");
|
||||||
if (!original.equals(operation.path)) {
|
|
||||||
log.warn("Normalized " + original + " to " + operation.path + ". Please verify generated source.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (!isNullOrEmpty(operation.httpMethod)) {
|
||||||
// Converts, for example, PUT to HttpPut for controller attributes
|
operation.httpMethod = capitalize(operation.httpMethod.toLowerCase());
|
||||||
operation.httpMethod = operation.httpMethod.substring(0, 1) + operation.httpMethod.substring(1).toLowerCase();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toEnumVarName(String name, String datatype) {
|
public String toEnumVarName(final String name, final String datatype) {
|
||||||
final String enumName = camelize(
|
final String enumName = camelize(
|
||||||
sanitizeName(name)
|
sanitizeName(name)
|
||||||
.replaceFirst("^_", "")
|
.replaceFirst("^_", "")
|
||||||
.replaceFirst("_$", ""));
|
.replaceFirst("_$", ""));
|
||||||
log.info("toEnumVarName = " + enumName);
|
final String result;
|
||||||
|
if (enumName.matches("\\d.*")) {
|
||||||
if (enumName.matches("\\d.*")) { // starts with number
|
result = "_" + enumName;
|
||||||
return "_" + enumName;
|
|
||||||
} else {
|
} else {
|
||||||
return enumName;
|
result = enumName;
|
||||||
}
|
}
|
||||||
|
log.info(String.format("toEnumVarName('%s', %s) = '%s'", name, datatype, enumName));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toApiName(String name) {
|
public String toApiName(final String name) {
|
||||||
if (name.length() == 0) {
|
final String apiName;
|
||||||
return "Default";
|
if (isNullOrEmpty(name)) {
|
||||||
|
apiName = "Default";
|
||||||
|
} else {
|
||||||
|
apiName = capitalize(name);
|
||||||
}
|
}
|
||||||
return initialCaps(name);
|
log.info(String.format("toApiName('%s') = '%s'", name, apiName));
|
||||||
|
return apiName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toApiFilename(String name) {
|
public String toApiFilename(final String name) {
|
||||||
return super.toApiFilename(name) + "Module";
|
return super.toApiFilename(name) + "Module";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preprocessSwagger(Swagger swagger) {
|
public void preprocessSwagger(final Swagger swagger) {
|
||||||
additionalProperties.put("packageContext", sanitizeName(swagger.getBasePath()));
|
additionalProperties.put("packageContext", sanitizeName(swagger.getBasePath()));
|
||||||
additionalProperties.put("baseContext", swagger.getBasePath());
|
additionalProperties.put("baseContext", swagger.getBasePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toEnumName(CodegenProperty property) {
|
public String toEnumName(final CodegenProperty property) {
|
||||||
return sanitizeName(camelize(property.name)) ;
|
return sanitizeName(camelize(property.name)) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSwaggerType(Property property) {
|
public String getSwaggerType(final Property property) {
|
||||||
if (property instanceof StringProperty && "time".equalsIgnoreCase(property.getFormat())) {
|
for (Entry<String, Predicate<Property>> entry : propertyToSwaggerTypeMapping.entrySet()) {
|
||||||
return "time";
|
if (entry.getValue().apply(property)) {
|
||||||
|
return entry.getKey();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.getSwaggerType(property);
|
return super.getSwaggerType(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<String, Predicate<Property>> createPropertyToSwaggerTypeMapping() {
|
||||||
|
final ImmutableMap.Builder<String, Predicate<Property>> mapping = ImmutableMap.builder();
|
||||||
|
mapping.put("time", timeProperty());
|
||||||
|
return mapping.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Predicate<Property> timeProperty() {
|
||||||
|
return new Predicate<Property>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(Property property) {
|
||||||
|
return property instanceof StringProperty && "time".equalsIgnoreCase(property.getFormat());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<String, String> nodaTimeTypesMappings() {
|
private static Map<String, String> nodaTimeTypesMappings() {
|
||||||
return ImmutableMap.of(
|
return ImmutableMap.of(
|
||||||
"time", "LocalTime?",
|
"time", "LocalTime?",
|
||||||
|
@ -11,7 +11,7 @@ namespace {{packageName}}.{{packageContext}}.Modules
|
|||||||
{ {{#operations}}{{#operation}}{{#allParams}}{{#isEnum}}
|
{ {{#operations}}{{#operation}}{{#allParams}}{{#isEnum}}
|
||||||
{{>innerApiEnum}}{{/isEnum}}{{/allParams}}{{/operation}}
|
{{>innerApiEnum}}{{/isEnum}}{{/allParams}}{{/operation}}
|
||||||
|
|
||||||
public partial class {{classname}}Module : NancyModule
|
public sealed class {{classname}}Module : NancyModule
|
||||||
{
|
{
|
||||||
public {{classname}}Module({{classname}}Service service) : base("{{baseContext}}")
|
public {{classname}}Module({{classname}}Service service) : base("{{baseContext}}")
|
||||||
{ {{#operation}}
|
{ {{#operation}}
|
||||||
|
@ -16,6 +16,12 @@ namespace {{packageName}}.{{packageContext}}.Models
|
|||||||
{ {{#vars}}
|
{ {{#vars}}
|
||||||
public {{>nullableDataType}} {{name}} { get; private set; }{{/vars}}
|
public {{>nullableDataType}} {{name}} { get; private set; }{{/vars}}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required by some serializers.
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete]
|
||||||
|
public {{classname}}(){}
|
||||||
|
|
||||||
public {{classname}}({{#vars}}{{>nullableDataType}} {{name}}{{#hasMore}}, {{/hasMore}}{{/vars}})
|
public {{classname}}({{#vars}}{{>nullableDataType}} {{name}}{{#hasMore}}, {{/hasMore}}{{/vars}})
|
||||||
{
|
{
|
||||||
{{#vars}}
|
{{#vars}}
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
package io.swagger.codegen.options;
|
package io.swagger.codegen.options;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import static io.swagger.codegen.CodegenConstants.PACKAGE_NAME;
|
||||||
import io.swagger.codegen.CodegenConstants;
|
import static io.swagger.codegen.CodegenConstants.PACKAGE_VERSION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.RETURN_ICOLLECTION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.SOURCE_FOLDER;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_COLLECTION;
|
||||||
|
import static io.swagger.codegen.CodegenConstants.USE_DATETIME_OFFSET;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
public class NancyFXServerOptionsProvider implements OptionsProvider {
|
public class NancyFXServerOptionsProvider implements OptionsProvider {
|
||||||
public static final String PACKAGE_NAME_VALUE = "swagger_server_nancyfx";
|
public static final String PACKAGE_NAME_VALUE = "swagger_server_nancyfx";
|
||||||
public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT";
|
public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT";
|
||||||
public static final String SOURCE_FOLDER_VALUE = "src_nancyfx";
|
public static final String SOURCE_FOLDER_VALUE = "src_nancyfx";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getLanguage() {
|
public String getLanguage() {
|
||||||
return "nancyfx";
|
return "nancyfx";
|
||||||
@ -17,14 +24,14 @@ public class NancyFXServerOptionsProvider implements OptionsProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> createOptions() {
|
public Map<String, String> createOptions() {
|
||||||
ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<String, String>();
|
final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
|
||||||
return builder.put(CodegenConstants.PACKAGE_NAME, PACKAGE_NAME_VALUE)
|
return builder.put(PACKAGE_NAME, PACKAGE_NAME_VALUE)
|
||||||
.put(CodegenConstants.PACKAGE_VERSION, PACKAGE_VERSION_VALUE)
|
.put(PACKAGE_VERSION, PACKAGE_VERSION_VALUE)
|
||||||
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
|
.put(SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
|
||||||
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true")
|
.put(SORT_PARAMS_BY_REQUIRED_FLAG, "true")
|
||||||
.put(CodegenConstants.USE_DATETIME_OFFSET, "true")
|
.put(USE_DATETIME_OFFSET, "true")
|
||||||
.put(CodegenConstants.USE_COLLECTION, "false")
|
.put(USE_COLLECTION, "false")
|
||||||
.put(CodegenConstants.RETURN_ICOLLECTION, "false")
|
.put(RETURN_ICOLLECTION, "false")
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user