Skip to content

Commit 39267a2

Browse files
xhhwing328
authored andcommitted
add enum support to java
1 parent bffe32a commit 39267a2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1274
-545
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
213213
if (var.defaultValue != null) {
214214
String enumName = null;
215215
for (Map<String, String> enumVar : enumVars) {
216-
if (var.defaultValue.equals(enumVar.get("value"))) {
216+
if (toEnumValue(var.defaultValue, var.datatype).equals(enumVar.get("value"))) {
217217
enumName = enumVar.get("name");
218218
break;
219219
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaClientCodegen.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import io.swagger.models.properties.*;
1212
import org.apache.commons.lang.BooleanUtils;
1313
import org.apache.commons.lang.StringUtils;
14+
import org.apache.commons.lang.WordUtils;
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
1617

@@ -651,6 +652,28 @@ public CodegenModel fromModel(String name, Model model, Map<String, Model> allDe
651652
return codegenModel;
652653
}
653654

655+
@Override
656+
public Map<String, Object> postProcessModelsEnum(Map<String, Object> objs) {
657+
objs = super.postProcessModelsEnum(objs);
658+
String lib = getLibrary();
659+
if (StringUtils.isEmpty(lib) || "feign".equals(lib) || "jersey2".equals(lib)) {
660+
List<Map<String, String>> imports = (List<Map<String, String>>)objs.get("imports");
661+
List<Object> models = (List<Object>) objs.get("models");
662+
for (Object _mo : models) {
663+
Map<String, Object> mo = (Map<String, Object>) _mo;
664+
CodegenModel cm = (CodegenModel) mo.get("model");
665+
// for enum model
666+
if (Boolean.TRUE.equals(cm.isEnum) && cm.allowableValues != null) {
667+
cm.imports.add(importMapping.get("JsonValue"));
668+
Map<String, String> item = new HashMap<String, String>();
669+
item.put("import", importMapping.get("JsonValue"));
670+
imports.add(item);
671+
}
672+
}
673+
}
674+
return objs;
675+
}
676+
654677
@Override
655678
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
656679
if(serializeBigDecimalAsString) {
@@ -801,16 +824,43 @@ public String findCommonPrefixOfVars(List<String> vars) {
801824
return prefix.replaceAll("[a-zA-Z0-9]+\\z", "");
802825
}
803826
*/
827+
828+
@Override
829+
public String toEnumName(CodegenProperty property) {
830+
return sanitizeName(camelize(property.name)) + "Enum";
831+
}
832+
804833
@Override
805834
public String toEnumVarName(String value, String datatype) {
806-
String var = value.replaceAll("\\W+", "_").toUpperCase();
835+
// number
836+
if ("Integer".equals(datatype) || "Long".equals(datatype) ||
837+
"Float".equals(datatype) || "Double".equals(datatype)) {
838+
String varName = "NUMBER_" + value;
839+
varName = varName.replaceAll("-", "MINUS_");
840+
varName = varName.replaceAll("\\+", "PLUS_");
841+
varName = varName.replaceAll("\\.", "_DOT_");
842+
return varName;
843+
}
844+
845+
// string
846+
String var = value.replaceAll("\\W+", "_").replaceAll("_+", "_").toUpperCase();
807847
if (var.matches("\\d.*")) {
808848
return "_" + var;
809849
} else {
810850
return var;
811851
}
812852
}
813853

854+
@Override
855+
public String toEnumValue(String value, String datatype) {
856+
if ("Integer".equals(datatype) || "Long".equals(datatype) ||
857+
"Float".equals(datatype) || "Double".equals(datatype)) {
858+
return value;
859+
} else {
860+
return "\"" + escapeText(value) + "\"";
861+
}
862+
}
863+
814864
private static CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) {
815865
// This generator uses inline classes to define enums, which breaks when
816866
// dealing with models that have subTypes. To clean this up, we will analyze

modules/swagger-codegen/src/main/resources/Java/enumClass.mustache

Lines changed: 0 additions & 17 deletions
This file was deleted.

modules/swagger-codegen/src/main/resources/Java/enumOuterClass.mustache

Lines changed: 0 additions & 3 deletions
This file was deleted.

modules/swagger-codegen/src/main/resources/Java/model.mustache

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,7 @@ import java.util.Objects;
66

77
{{#serializableModel}}import java.io.Serializable;{{/serializableModel}}
88
{{#models}}
9-
{{#model}}{{#description}}
10-
/**
11-
* {{description}}
12-
**/{{/description}}
13-
{{#isEnum}}{{>enumOuterClass}}{{/isEnum}}
14-
{{^isEnum}}{{>pojo}}{{/isEnum}}
9+
{{#model}}
10+
{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{>pojo}}{{/isEnum}}
1511
{{/model}}
1612
{{/models}}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
3+
*/
4+
public enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
5+
{{#allowableValues}}{{#enumVars}}{{{name}}}({{{value}}}){{^-last}},
6+
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
7+
8+
private {{dataType}} value;
9+
10+
{{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{dataType}} value) {
11+
this.value = value;
12+
}
13+
14+
@Override
15+
@JsonValue
16+
public String toString() {
17+
return String.valueOf(value);
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{{description}}}{{/description}}
3+
*/
4+
public enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
5+
{{#allowableValues}}{{#enumVars}}{{{name}}}({{{value}}}){{^-last}},
6+
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
7+
8+
private {{datatype}} value;
9+
10+
{{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{datatype}} value) {
11+
this.value = value;
12+
}
13+
14+
@Override
15+
@JsonValue
16+
public String toString() {
17+
return String.valueOf(value);
18+
}
19+
}

modules/swagger-codegen/src/main/resources/Java/pojo.mustache

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
{{#description}}@ApiModel(description = "{{{description}}}"){{/description}}
1+
/**
2+
* {{#description}}{{.}}{{/description}}{{^description}}{{classname}}{{/description}}
3+
*/{{#description}}
4+
@ApiModel(description = "{{{description}}}"){{/description}}
25
{{>generatedAnnotation}}
36
public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} {
47
{{#vars}}{{#isEnum}}
58

6-
{{>enumClass}}{{/isEnum}}{{#items.isEnum}}{{#items}}
9+
{{>modelInnerEnum}}{{/isEnum}}{{#items.isEnum}}{{#items}}
710

8-
{{>enumClass}}{{/items}}{{/items.isEnum}}
11+
{{>modelInnerEnum}}{{/items}}{{/items.isEnum}}
912
private {{{datatypeWithEnum}}} {{name}} = {{{defaultValue}}};{{/vars}}
1013

1114
{{#vars}}{{^isReadOnly}}

samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Animal.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import io.swagger.annotations.ApiModelProperty;
77

88

9-
10-
11-
12-
9+
/**
10+
* Animal
11+
*/
12+
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-04-12T22:48:50.833+08:00")
1313
public class Animal {
1414

1515
private String className = null;
@@ -31,6 +31,7 @@ public void setClassName(String className) {
3131
this.className = className;
3232
}
3333

34+
3435

3536
@Override
3637
public boolean equals(java.lang.Object o) {

samples/client/petstore/java/default/src/main/java/io/swagger/client/model/Cat.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import io.swagger.client.model.Animal;
88

99

10-
11-
12-
13-
10+
/**
11+
* Cat
12+
*/
13+
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2016-04-12T22:48:50.833+08:00")
1414
public class Cat extends Animal {
1515

1616
private String className = null;
@@ -33,7 +33,7 @@ public void setClassName(String className) {
3333
this.className = className;
3434
}
3535

36-
36+
3737
/**
3838
**/
3939
public Cat declawed(Boolean declawed) {
@@ -50,6 +50,7 @@ public void setDeclawed(Boolean declawed) {
5050
this.declawed = declawed;
5151
}
5252

53+
5354

5455
@Override
5556
public boolean equals(java.lang.Object o) {

0 commit comments

Comments
 (0)