CSharp: add support for DateTimeOffset and sourceFolder configuration options

Adds option to use DateTimeOffset to model datetime fields instead of
DateTime to allow preservation of timezone information. Modifies
ApiClient.ParameterToString to support DateTimeOffset. Also adds
sourceFolder option.
This commit is contained in:
John Hancock 2016-01-06 20:02:43 -05:00
parent 5f9164049c
commit ebe090572f
3 changed files with 37 additions and 38 deletions

View File

@ -25,7 +25,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class);
protected boolean optionalAssemblyInfoFlag = true; protected boolean optionalAssemblyInfoFlag = true;
protected boolean optionalMethodArgumentFlag = true; protected boolean optionalMethodArgumentFlag = true;
protected boolean useDateTimeOffsetFlag = false; protected boolean useDateTimeOffsetFlag = false;
protected String packageTitle = "Swagger Library"; protected String packageTitle = "Swagger Library";
protected String packageProductName = "SwaggerLibrary"; protected String packageProductName = "SwaggerLibrary";
protected String packageDescription = "A library generated from a Swagger doc"; protected String packageDescription = "A library generated from a Swagger doc";
@ -77,7 +77,7 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
"List", "List",
"Dictionary", "Dictionary",
"DateTime?", "DateTime?",
"DateTimeOffset?", "DateTimeOffset?",
"String", "String",
"Boolean", "Boolean",
"Double", "Double",
@ -116,8 +116,8 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
"e.g. void square(int x=10) (.net 4.0+ only).")); "e.g. void square(int x=10) (.net 4.0+ only)."));
cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_ASSEMBLY_INFO,
CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString())); CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString()));
cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder));
cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC));
} }
@Override @Override
@ -130,14 +130,14 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion); additionalProperties.put(CodegenConstants.PACKAGE_VERSION, packageVersion);
} }
if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)){ if (additionalProperties.containsKey(CodegenConstants.SOURCE_FOLDER)){
setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER)); setSourceFolder((String) additionalProperties.get(CodegenConstants.SOURCE_FOLDER));
} }
else else
{ {
additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder); additionalProperties.put(CodegenConstants.SOURCE_FOLDER, this.sourceFolder);
} }
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) { if (additionalProperties.containsKey(CodegenConstants.PACKAGE_NAME)) {
setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME)); setPackageName((String) additionalProperties.get(CodegenConstants.PACKAGE_NAME));
apiPackage = packageName + ".Api"; apiPackage = packageName + ".Api";
@ -147,13 +147,13 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName); additionalProperties.put(CodegenConstants.PACKAGE_NAME, packageName);
} }
// Use DateTimeOffset // Use DateTimeOffset
if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET)) if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET))
{ {
useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString())); useDateTimeOffset(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_DATETIME_OFFSET).toString()));
} }
additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag); additionalProperties.put(CodegenConstants.USE_DATETIME_OFFSET, useDateTimeOffsetFlag);
additionalProperties.put("clientPackage", clientPackage); additionalProperties.put("clientPackage", clientPackage);
// Add properties used by AssemblyInfo.mustache // Add properties used by AssemblyInfo.mustache
@ -339,15 +339,15 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
this.optionalMethodArgumentFlag = flag; this.optionalMethodArgumentFlag = flag;
} }
public void useDateTimeOffset(boolean flag) { public void useDateTimeOffset(boolean flag) {
this.useDateTimeOffsetFlag = flag; this.useDateTimeOffsetFlag = flag;
if (flag) if (flag)
typeMapping.put("datetime", "DateTimeOffset?"); typeMapping.put("datetime", "DateTimeOffset?");
else else
typeMapping.put("datetime", "DateTime?"); typeMapping.put("datetime", "DateTime?");
} }
public void setPackageName(String packageName) { public void setPackageName(String packageName) {
this.packageName = packageName; this.packageName = packageName;
} }
@ -356,10 +356,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
this.packageVersion = packageVersion; this.packageVersion = packageVersion;
} }
public void setSourceFolder(String sourceFolder) { public void setSourceFolder(String sourceFolder) {
this.sourceFolder = sourceFolder; this.sourceFolder = sourceFolder;
} }
@Override @Override
public Map<String, Object> postProcessModels(Map<String, Object> objs) { public Map<String, Object> postProcessModels(Map<String, Object> objs) {
List<Object> models = (List<Object>) objs.get("models"); List<Object> models = (List<Object>) objs.get("models");

View File

@ -33,11 +33,10 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest {
times = 1; times = 1;
clientCodegen.setOptionalAssemblyInfoFlag(true); clientCodegen.setOptionalAssemblyInfoFlag(true);
times = 1; times = 1;
clientCodegen.setSourceFolder(CSharpClientOptionsProvider.SOURCE_FOLDER_VALUE);
clientCodegen.setSourceFolder(CSharpClientOptionsProvider.SOURCE_FOLDER_VALUE); times = 1;
times = 1; clientCodegen.useDateTimeOffset(true);
clientCodegen.useDateTimeOffset(true); times = 1;
times = 1;
}}; }};
} }
} }

View File

@ -9,7 +9,7 @@ import java.util.Map;
public class CSharpClientOptionsProvider implements OptionsProvider { public class CSharpClientOptionsProvider implements OptionsProvider {
public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp"; public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp";
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_csharp"; public static final String SOURCE_FOLDER_VALUE = "src_csharp";
@Override @Override
public String getLanguage() { public String getLanguage() {
@ -24,8 +24,8 @@ public class CSharpClientOptionsProvider implements OptionsProvider {
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true") .put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true")
.put(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "true") .put(CodegenConstants.OPTIONAL_METHOD_ARGUMENT, "true")
.put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true") .put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true")
.put(CodegenConstants.USE_DATETIME_OFFSET, "true") .put(CodegenConstants.USE_DATETIME_OFFSET, "true")
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
.build(); .build();
} }