diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index 23a28b87af..7521090a8b 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -149,23 +149,23 @@ public class DefaultCodegen { if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) { Map allowableValues = cm.allowableValues; - List values = (List) allowableValues.get("values"); + List values = (List) allowableValues.get("values"); List> enumVars = new ArrayList>(); String commonPrefix = findCommonPrefixOfVars(values); int truncateIdx = commonPrefix.length(); - for (String value : values) { + for (Object value : values) { Map enumVar = new HashMap(); String enumName; if (truncateIdx == 0) { - enumName = value; + enumName = value.toString(); } else { - enumName = value.substring(truncateIdx); + enumName = value.toString().substring(truncateIdx); if ("".equals(enumName)) { - enumName = value; + enumName = value.toString(); } } - enumVar.put("name", toEnumVarName(enumName)); - enumVar.put("value", toEnumValue(value, cm.dataType)); + enumVar.put("name", toEnumVarName(enumName, cm.dataType)); + enumVar.put("value", toEnumValue(value.toString(), cm.dataType)); enumVars.add(enumVar); } cm.allowableValues.put("enumVars", enumVars); @@ -183,7 +183,8 @@ public class DefaultCodegen { if (allowableValues == null) { continue; } - List values = (List) allowableValues.get("values"); + //List values = (List) allowableValues.get("values"); + List values = (List) allowableValues.get("values"); if (values == null) { continue; } @@ -192,19 +193,19 @@ public class DefaultCodegen { List> enumVars = new ArrayList>(); String commonPrefix = findCommonPrefixOfVars(values); int truncateIdx = commonPrefix.length(); - for (String value : values) { + for (Object value : values) { Map enumVar = new HashMap(); String enumName; if (truncateIdx == 0) { - enumName = value; + enumName = value.toString(); } else { - enumName = value.substring(truncateIdx); + enumName = value.toString().substring(truncateIdx); if ("".equals(enumName)) { - enumName = value; + enumName = value.toString(); } } - enumVar.put("name", toEnumVarName(enumName)); - enumVar.put("value", toEnumValue(value, var.datatype)); + enumVar.put("name", toEnumVarName(enumName, var.datatype)); + enumVar.put("value", toEnumValue(value.toString(), var.datatype)); enumVars.add(enumVar); } allowableValues.put("enumVars", enumVars); @@ -232,11 +233,17 @@ public class DefaultCodegen { * @param vars List of variable names * @return the common prefix for naming */ - public String findCommonPrefixOfVars(List vars) { - String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); - // exclude trailing characters that should be part of a valid variable - // e.g. ["status-on", "status-off"] => "status-" (not "status-o") - return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); + public String findCommonPrefixOfVars(List vars) { + try { + String[] listStr = vars.toArray(new String[vars.size()]); + + String prefix = StringUtils.getCommonPrefix(listStr); + // exclude trailing characters that should be part of a valid variable + // e.g. ["status-on", "status-off"] => "status-" (not "status-o") + return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); + } catch (ArrayStoreException e) { + return ""; + } } /** @@ -260,9 +267,8 @@ public class DefaultCodegen { * @param value enum variable name * @return the sanitized variable name for enum */ - public String toEnumVarName(String value) { + public String toEnumVarName(String value, String datatype) { String var = value.replaceAll("\\W+", "_").toUpperCase(); - LOGGER.info("toEnumVarName: " + value + " => " + var); if (var.matches("\\d.*")) { return "_" + var; } else { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java index 86ca4fcd63..e9d6457f6f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java @@ -543,7 +543,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co @Override - public String toEnumVarName(String name) { + public String toEnumVarName(String name, String datatype) { String enumName = sanitizeName(name); enumName = enumName.replaceFirst("^_", ""); 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 01ba4168fd..f76fc74870 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 @@ -367,21 +367,53 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen { return codegenModel; } - +/* @Override - public String findCommonPrefixOfVars(List vars) { - String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); - // exclude trailing characters that should be part of a valid variable - // e.g. ["status-on", "status-off"] => "status-" (not "status-o") + public String findCommonPrefixOfVars(List vars) { + try { + String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); + // exclude trailing characters that should be part of a valid variable + // e.g. ["status-on", "status-off"] => "status-" (not "status-o") return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); + } catch (ArrayStoreException e) { + return ""; + } + } +*/ + /** + * Return the value in the language specifed format + * e.g. status => "status" + * + * @param value enum variable name + * @return the sanitized variable name for enum + */ + public String toEnumValue(String value, String datatype) { + if ("int?".equalsIgnoreCase(datatype) || "long?".equalsIgnoreCase(datatype) || + "double?".equalsIgnoreCase(datatype) || "float?".equalsIgnoreCase(datatype)) { + return value; + } else { + return "\"" + escapeText(value) + "\""; + } } @Override - public String toEnumVarName(String value) { + public String toEnumVarName(String value, String datatype) { + // number + if ("int?".equals(datatype) || "long?".equals(datatype) || + "double?".equals(datatype) || "float?".equals(datatype)) { + String varName = "NUMBER_" + value; + varName = varName.replaceAll("-", "MINUS"); + varName = varName.replaceAll("\\+", "PLUS"); + varName = varName.replaceAll("\\.", "DOT"); + return varName; + } + + // string String var = value.replaceAll("_", " "); var = WordUtils.capitalizeFully(var); var = var.replaceAll("\\W+", ""); + if (var.matches("\\d.*")) { return "_" + var; } else { diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java index bd770a1e50..bdd970ff0a 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java @@ -793,7 +793,7 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { protected boolean needToImport(String type) { return super.needToImport(type) && type.indexOf(".") < 0; } - +/* @Override public String findCommonPrefixOfVars(List vars) { String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); @@ -801,9 +801,9 @@ public class JavaClientCodegen extends DefaultCodegen implements CodegenConfig { // e.g. ["status-on", "status-off"] => "status-" (not "status-o") return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); } - +*/ @Override - public String toEnumVarName(String value) { + public String toEnumVarName(String value, String datatype) { String var = value.replaceAll("\\W+", "_").toUpperCase(); if (var.matches("\\d.*")) { return "_" + var; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java index bc8b162c44..4ba6a22478 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavascriptClientCodegen.java @@ -871,7 +871,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo if (allowableValues == null) { continue; } - List values = (List) allowableValues.get("values"); + List values = (List) allowableValues.get("values"); if (values == null) { continue; } @@ -880,19 +880,19 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo List> enumVars = new ArrayList>(); String commonPrefix = findCommonPrefixOfVars(values); int truncateIdx = commonPrefix.length(); - for (String value : values) { + for (Object value : values) { Map enumVar = new HashMap(); String enumName; if (truncateIdx == 0) { - enumName = value; + enumName = value.toString(); } else { - enumName = value.substring(truncateIdx); + enumName = value.toString().substring(truncateIdx); if ("".equals(enumName)) { - enumName = value; + enumName = value.toString(); } } - enumVar.put("name", toEnumVarName(enumName)); - enumVar.put("value", value); + enumVar.put("name", toEnumVarName(enumName, var.datatype)); + enumVar.put("value", value.toString()); enumVars.add(enumVar); } allowableValues.put("enumVars", enumVars); @@ -929,7 +929,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo return !defaultIncludes.contains(type) && !languageSpecificPrimitives.contains(type); } - +/* @Override public String findCommonPrefixOfVars(List vars) { String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()])); @@ -937,9 +937,9 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo // e.g. ["status-on", "status-off"] => "status-" (not "status-o") return prefix.replaceAll("[a-zA-Z0-9]+\\z", ""); } - +*/ @Override - public String toEnumVarName(String value) { + public String toEnumVarName(String value, String datatype) { String var = value.replaceAll("\\W+", "_").toUpperCase(); if (var.matches("\\d.*")) { return "_" + var; diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java index 8f8ad281f6..1f90c8735d 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/PhpClientCodegen.java @@ -570,7 +570,7 @@ public class PhpClientCodegen extends DefaultCodegen implements CodegenConfig { } @Override - public String toEnumVarName(String name) { + public String toEnumVarName(String name, String datatype) { String enumName = sanitizeName(underscore(name).toUpperCase()); enumName = enumName.replaceFirst("^_", ""); diff --git a/modules/swagger-codegen/src/test/resources/2_0/petstore.json b/modules/swagger-codegen/src/test/resources/2_0/petstore.json index 3ac7a6294b..7f2400da9b 100644 --- a/modules/swagger-codegen/src/test/resources/2_0/petstore.json +++ b/modules/swagger-codegen/src/test/resources/2_0/petstore.json @@ -1391,6 +1391,7 @@ }, "enum_integer" : { "type" : "integer", + "format" : "int32", "enum" : [1, -1] }, "enum_number" : { diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/EnumTest.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/EnumTest.cs index 2ab24be837..7a5e4f5a5a 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/EnumTest.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Model/EnumTest.cs @@ -38,6 +38,26 @@ namespace IO.Swagger.Model Lower } + /// + /// Gets or Sets EnumInteger + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum EnumIntegerEnum + { + + /// + /// Enum NUMBER_1 for 1 + /// + [EnumMember(Value = "1")] + NUMBER_1 = 1, + + /// + /// Enum NUMBER_MINUS1 for -1 + /// + [EnumMember(Value = "-1")] + NUMBER_MINUS1 = -1 + } + /// /// Gets or Sets EnumString @@ -45,6 +65,12 @@ namespace IO.Swagger.Model [DataMember(Name="enum_string", EmitDefaultValue=false)] public EnumStringEnum? EnumString { get; set; } + /// + /// Gets or Sets EnumInteger + /// + [DataMember(Name="enum_integer", EmitDefaultValue=false)] + public EnumIntegerEnum? EnumInteger { get; set; } + /// /// Initializes a new instance of the class. /// Initializes a new instance of the class. @@ -53,7 +79,7 @@ namespace IO.Swagger.Model /// EnumInteger. /// EnumNumber. - public EnumTest(EnumStringEnum? EnumString = null, int? EnumInteger = null, double? EnumNumber = null) + public EnumTest(EnumStringEnum? EnumString = null, EnumIntegerEnum? EnumInteger = null, double? EnumNumber = null) { this.EnumString = EnumString; this.EnumInteger = EnumInteger; @@ -62,12 +88,6 @@ namespace IO.Swagger.Model } - /// - /// Gets or Sets EnumInteger - /// - [DataMember(Name="enum_integer", EmitDefaultValue=false)] - public int? EnumInteger { get; set; } - /// /// Gets or Sets EnumNumber /// diff --git a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj index 58b8c393a3..0d3c33168d 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj +++ b/samples/client/petstore/csharp/SwaggerClientTest/SwaggerClientTest.csproj @@ -69,10 +69,9 @@ - - - - + + + @@ -89,4 +88,4 @@ - + \ No newline at end of file diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestEnum.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestEnum.cs new file mode 100644 index 0000000000..9764536f05 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestEnum.cs @@ -0,0 +1,39 @@ +using NUnit.Framework; +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using IO.Swagger.Api; +using IO.Swagger.Model; +using IO.Swagger.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace SwaggerClientTest.TestEnum +{ + [TestFixture ()] + public class TestEnum + { + public TestEnum () + { + } + + /// + /// Test EnumClass + /// + [Test ()] + public void TestEnumClass () + { + // test serialization for string + Assert.AreEqual (Newtonsoft.Json.JsonConvert.SerializeObject(EnumClass.Abc), "\"_abc\""); + + // test serialization for number + Assert.AreEqual (Newtonsoft.Json.JsonConvert.SerializeObject(EnumTest.EnumIntegerEnum.NUMBER_MINUS1), "\"-1\""); + + // test cast to int + Assert.AreEqual ((int)EnumTest.EnumIntegerEnum.NUMBER_MINUS1, -1); + + } + } +} + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestOrder.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestOrder.cs index 6af386ff2b..e7bf8428ee 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestOrder.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestOrder.cs @@ -73,14 +73,11 @@ namespace SwaggerClientTest.TestOrder } - /* comment out the test case as the method is not defined in original petstore spec - * we will re-enable this after updating the petstore server - * /// - /// Test GetInvetoryInObject + /// Test TestGetInventoryInObject /// [Test ()] - public void TestGetInventoryInObject () + public void TestGetInventoryInObject() { // set timeout to 10 seconds Configuration c1 = new Configuration (timeout: 10000); @@ -95,9 +92,17 @@ namespace SwaggerClientTest.TestOrder { Assert.IsInstanceOf (typeof(int?), Int32.Parse(entry.Value)); } + } - }*/ + /// + /// Test Enum + /// + [Test ()] + public void TestEnum () + { + Assert.AreEqual (Order.StatusEnum.Approved.ToString(), "Approved"); + } } }