diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index 8cbb9749f35..525f8d88248 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -67,4 +67,11 @@ public class CodegenConstants { public static final String RETURN_ICOLLECTION = "returnICollection"; public static final String RETURN_ICOLLECTION_DESC = "Return ICollection instead of the concrete type."; + + public static final String OPTIONAL_PROJECT_FILE = "optionalProjectFile"; + public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj (Default: false)."; + + public static final String OPTIONAL_PROJECT_GUID = "packageGuid"; + public static final String OPTIONAL_PROJECT_GUID_DESC = "The GUID that will be associated with the C# project"; + } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 10c339fb404..7697bd5b027 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -26,10 +26,12 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig @SuppressWarnings({ "unused", "hiding" }) private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class); protected boolean optionalAssemblyInfoFlag = true; + protected boolean optionalProjectFileFlag = false; protected boolean optionalMethodArgumentFlag = true; protected boolean useDateTimeOffsetFlag = false; protected boolean useCollection = false; protected boolean returnICollection = false; + protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}"; protected String packageTitle = "Swagger Library"; protected String packageProductName = "SwaggerLibrary"; protected String packageDescription = "A library generated from a Swagger doc"; @@ -132,6 +134,9 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig .defaultValue(Boolean.FALSE.toString()) ); cliOptions.add( CliOption.newBoolean(CodegenConstants.RETURN_ICOLLECTION, CodegenConstants.RETURN_ICOLLECTION_DESC) .defaultValue(Boolean.FALSE.toString()) ); + cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE, + CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.FALSE.toString())); + cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC)); } @Override @@ -176,7 +181,19 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig additionalProperties.put("packageDescription", packageDescription); additionalProperties.put("packageCompany", packageCompany); additionalProperties.put("packageCopyright", packageCopyright); - + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE)) + { + setOptionalProjectFileFlag(Boolean.valueOf( + additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString())); + } + + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID)) + { + setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID)); + } + additionalProperties.put("packageGuid", packageGuid); + if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) { setOptionalMethodArgumentFlag(Boolean.valueOf(additionalProperties .get(CodegenConstants.OPTIONAL_METHOD_ARGUMENT).toString())); @@ -196,14 +213,28 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig setReturnICollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.RETURN_ICOLLECTION).toString())); } + + String packageFolder = sourceFolder + File.separator + packageName.replace(".", java.io.File.separator); + String clientPackageDir = sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator); + + //Compute the relative path to the bin directory where the external assemblies live + //This is necessary to properly generate the project file + int packageDepth = packageFolder.length() - packageFolder.replace(java.io.File.separator, "").length(); + String binRelativePath = "..\\"; + for (int i=0; i < packageDepth; i = i+1) + binRelativePath += "..\\"; + binRelativePath += "bin\\"; + additionalProperties.put("binRelativePath", binRelativePath); + supportingFiles.add(new SupportingFile("Configuration.mustache", - sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "Configuration.cs")); + clientPackageDir, "Configuration.cs")); supportingFiles.add(new SupportingFile("ApiClient.mustache", - sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiClient.cs")); + clientPackageDir, "ApiClient.cs")); supportingFiles.add(new SupportingFile("ApiException.mustache", - sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiException.cs")); + clientPackageDir, "ApiException.cs")); supportingFiles.add(new SupportingFile("ApiResponse.mustache", - sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiResponse.cs")); + clientPackageDir, "ApiResponse.cs")); + supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll")); supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll")); supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat")); @@ -212,9 +243,11 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("README.md", "", "README.md")); if (optionalAssemblyInfoFlag) { - supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs")); + supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", packageFolder + File.separator + "Properties", "AssemblyInfo.cs")); + } + if (optionalProjectFileFlag) { + supportingFiles.add(new SupportingFile("Project.mustache", packageFolder, clientPackage + ".csproj")); } - } @Override @@ -385,6 +418,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig this.optionalAssemblyInfoFlag = flag; } + public void setOptionalProjectFileFlag(boolean flag) { + this.optionalProjectFileFlag = flag; + } + public void setOptionalMethodArgumentFlag(boolean flag) { this.optionalMethodArgumentFlag = flag; } @@ -412,7 +449,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig typeMapping.put("datetime", "DateTime?"); } - + public void setPackageGuid(String packageGuid) { + this.packageGuid = packageGuid; + } + public void setPackageName(String packageName) { this.packageName = packageName; } diff --git a/modules/swagger-codegen/src/main/resources/csharp/Project.mustache b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache new file mode 100644 index 00000000000..333cb5088ff --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache @@ -0,0 +1,58 @@ + + + + Debug + AnyCPU + {{packageGuid}} + Library + Properties + {{packageTitle}} + {{packageTitle}} + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + False + {{binRelativePath}}Newtonsoft.Json.dll + + + {{binRelativePath}}RestSharp.dll + + + + + + + + + + + diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index c8d6b6a02bc..ab8f2806512 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -38,6 +38,10 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.useDateTimeOffset(true); times = 1; + clientCodegen.setOptionalProjectFileFlag(true); + times = 1; + clientCodegen.setPackageGuid(CSharpClientOptionsProvider.PACKAGE_GUID_VALUE); + times = 1; }}; } } diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java index 76711941004..f7abe83f8f4 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java @@ -10,6 +10,7 @@ public class CSharpClientOptionsProvider implements OptionsProvider { 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 SOURCE_FOLDER_VALUE = "src_csharp"; + public static final String PACKAGE_GUID_VALUE = "{894EAEBB-649A-498C-A735-10D0BD7B73E0}"; @Override public String getLanguage() { @@ -28,6 +29,8 @@ public class CSharpClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) .put(CodegenConstants.USE_COLLECTION, "false") .put(CodegenConstants.RETURN_ICOLLECTION, "false") + .put(CodegenConstants.OPTIONAL_PROJECT_FILE, "true") + .put(CodegenConstants.OPTIONAL_PROJECT_GUID, PACKAGE_GUID_VALUE) .build(); }