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