Skip to content

Commit 5ee86b9

Browse files
committed
Merge pull request #1264 from xhh/java-enum-improvements
[Java] Improvements on enum var name in Java client
2 parents ee7f447 + bcbf9c5 commit 5ee86b9

File tree

4 files changed

+40
-10
lines changed

4 files changed

+40
-10
lines changed

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

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,20 +358,34 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
358358
Map<String, Object> allowableValues = var.allowableValues;
359359

360360
// handle ArrayProperty
361-
if(var.items != null) {
361+
if (var.items != null) {
362362
allowableValues = var.items.allowableValues;
363363
}
364364

365-
if (allowableValues == null)
365+
if (allowableValues == null) {
366366
continue;
367+
}
367368
List<String> values = (List<String>) allowableValues.get("values");
368-
// put "enumVars" map into `allowableValues", including `name` and `value`
369-
if (values == null)
369+
if (values == null) {
370370
continue;
371+
}
372+
373+
// put "enumVars" map into `allowableValues", including `name` and `value`
371374
List<Map<String, String>> enumVars = new ArrayList<Map<String, String>>();
375+
String commonPrefix = findCommonPrefixOfVars(values);
376+
int truncateIdx = commonPrefix.length();
372377
for (String value : values) {
373378
Map<String, String> enumVar = new HashMap<String, String>();
374-
enumVar.put("name", toVarName(value.toUpperCase()));
379+
String enumName;
380+
if (truncateIdx == 0) {
381+
enumName = value;
382+
} else {
383+
enumName = value.substring(truncateIdx);
384+
if ("".equals(enumName)) {
385+
enumName = value;
386+
}
387+
}
388+
enumVar.put("name", toEnumVarName(enumName));
375389
enumVar.put("value", value);
376390
enumVars.add(enumVar);
377391
}
@@ -404,6 +418,17 @@ public Map<String, Object> postProcessOperations(Map<String, Object> objs) {
404418
return objs;
405419
}
406420

421+
private String findCommonPrefixOfVars(List<String> vars) {
422+
String prefix = StringUtils.getCommonPrefix(vars.toArray(new String[vars.size()]));
423+
// exclude trailing characters that should be part of a valid variable
424+
// e.g. ["status-on", "status-off"] => "status-" (not "status-o")
425+
return prefix.replaceAll("[a-zA-Z0-9]+\\z", "");
426+
}
427+
428+
private String toEnumVarName(String value) {
429+
return value.replaceAll("\\W+", "_").toUpperCase();
430+
}
431+
407432
private CodegenModel reconcileInlineEnums(CodegenModel codegenModel, CodegenModel parentCodegenModel) {
408433
// This generator uses inline classes to define enums, which breaks when
409434
// dealing with models that have subTypes. To clean this up, we will analyze

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
public enum {{datatypeWithEnum}} {
2-
{{#allowableValues}}{{#enumVars}}{{name}}("{{value}}"){{^-last}}, {{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
2+
{{#allowableValues}}{{#enumVars}}{{name}}("{{value}}"){{^-last}},
3+
{{/-last}}{{#-last}};{{/-last}}{{/enumVars}}{{/allowableValues}}
34

45
private String value;
56

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111

1212
@ApiModel(description = "")
13-
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:58.351+08:00")
13+
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-21T17:24:54.566+08:00")
1414
public class Order {
1515

1616
private Long id = null;
@@ -19,7 +19,9 @@ public class Order {
1919
private Date shipDate = null;
2020

2121
public enum StatusEnum {
22-
PLACED("placed"), APPROVED("approved"), DELIVERED("delivered");
22+
PLACED("placed"),
23+
APPROVED("approved"),
24+
DELIVERED("delivered");
2325

2426
private String value;
2527

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313

1414
@ApiModel(description = "")
15-
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-11T11:35:58.351+08:00")
15+
@javax.annotation.Generated(value = "class io.swagger.codegen.languages.JavaClientCodegen", date = "2015-09-21T17:24:54.566+08:00")
1616
public class Pet {
1717

1818
private Long id = null;
@@ -22,7 +22,9 @@ public class Pet {
2222
private List<Tag> tags = new ArrayList<Tag>();
2323

2424
public enum StatusEnum {
25-
AVAILABLE("available"), PENDING("pending"), SOLD("sold");
25+
AVAILABLE("available"),
26+
PENDING("pending"),
27+
SOLD("sold");
2628

2729
private String value;
2830

0 commit comments

Comments
 (0)