add enum number support to C#

This commit is contained in:
wing328
2016-04-06 18:09:27 +08:00
parent 00e15b76ec
commit 531b536ffb
11 changed files with 162 additions and 60 deletions

View File

@@ -149,23 +149,23 @@ public class DefaultCodegen {
if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) {
Map<String, Object> allowableValues = cm.allowableValues;
List<String> values = (List<String>) allowableValues.get("values");
List<Object> values = (List<Object>) allowableValues.get("values");
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
String commonPrefix = findCommonPrefixOfVars(values);
int truncateIdx = commonPrefix.length();
for (String value : values) {
for (Object value : values) {
Map<String, String> enumVar = new HashMap<String, String>();
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<String> values = (List<String>) allowableValues.get("values");
//List<String> values = (List<String>) allowableValues.get("values");
List<Object> values = (List<Object>) allowableValues.get("values");
if (values == null) {
continue;
}
@@ -192,19 +193,19 @@ public class DefaultCodegen {
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
String commonPrefix = findCommonPrefixOfVars(values);
int truncateIdx = commonPrefix.length();
for (String value : values) {
for (Object value : values) {
Map<String, String> enumVar = new HashMap<String, String>();
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<String> 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<Object> 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 {

View File

@@ -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("^_", "");

View File

@@ -367,21 +367,53 @@ public class CSharpClientCodegen extends AbstractCSharpCodegen {
return codegenModel;
}
/*
@Override
public String findCommonPrefixOfVars(List<String> 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<Object> 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 {

View File

@@ -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<String> 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;

View File

@@ -871,7 +871,7 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
if (allowableValues == null) {
continue;
}
List<String> values = (List<String>) allowableValues.get("values");
List<Object> values = (List<Object>) allowableValues.get("values");
if (values == null) {
continue;
}
@@ -880,19 +880,19 @@ public class JavascriptClientCodegen extends DefaultCodegen implements CodegenCo
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
String commonPrefix = findCommonPrefixOfVars(values);
int truncateIdx = commonPrefix.length();
for (String value : values) {
for (Object value : values) {
Map<String, String> enumVar = new HashMap<String, String>();
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<String> 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;

View File

@@ -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("^_", "");