diff --git a/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java b/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java index e2704637a71..cda9ab714d4 100644 --- a/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java +++ b/src/main/java/com/wordnik/swagger/codegen/CodegenProperty.java @@ -18,6 +18,7 @@ public class CodegenProperty { public Double minimum, maximum, exclusiveMinimum, exclusiveMaximum; public Boolean hasMore = null, required = null, secondaryParam = null; public Boolean isPrimitiveType, isContainer, isNotContainer; + public boolean isEnum; public List _enum; public Map allowableValues; } diff --git a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java index 2285af6acb9..445455000eb 100644 --- a/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java +++ b/src/main/java/com/wordnik/swagger/codegen/DefaultCodegen.java @@ -4,6 +4,7 @@ import com.wordnik.swagger.util.Json; import com.wordnik.swagger.models.*; import com.wordnik.swagger.models.parameters.*; import com.wordnik.swagger.models.properties.*; +import org.apache.commons.lang.StringUtils; import java.util.*; import java.io.File; @@ -443,6 +444,7 @@ public class DefaultCodegen { if(sp.getEnum() != null) { List _enum = sp.getEnum(); property._enum = _enum; + property.isEnum = true; // legacy support Map allowableValues = new HashMap(); @@ -451,7 +453,9 @@ public class DefaultCodegen { } } - property.datatype = getTypeDeclaration(p); + property.datatype = property.isEnum + ? StringUtils.capitalize(property.name) + "Enum" + : getTypeDeclaration(p); property.baseType = getSwaggerType(p); if(p instanceof ArrayProperty) { diff --git a/src/main/resources/JavaJaxRS/model.mustache b/src/main/resources/JavaJaxRS/model.mustache index 3836a0ad927..f6cb2b01cdf 100644 --- a/src/main/resources/JavaJaxRS/model.mustache +++ b/src/main/resources/JavaJaxRS/model.mustache @@ -17,10 +17,10 @@ public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} { {{#vars} * minimum: {{minimum}}{{/minimum}}{{#maximum}} * maximum: {{maximum}}{{/maximum}} **/ - private {{{datatype}}} {{name}} = {{{defaultValue}}};{{#allowableValues}} + private {{{datatype}}} {{name}} = {{{defaultValue}}};{{#isEnum}} - //{{^min}}public enum {{name}}Enum { {{#values}} {{.}}, {{/values}} }; - {{/min}}{{/allowableValues}}{{/vars}} + public enum {{datatype}} { {{#_enum}}{{.}}{{^-last}}, {{/-last}}{{/_enum}} }; + {{/isEnum}}{{/vars}} {{#vars}} @ApiModelProperty(required = {{required}}, value = "{{{description}}}") diff --git a/src/test/scala/Java/JavaModelEnumTest.scala b/src/test/scala/Java/JavaModelEnumTest.scala new file mode 100644 index 00000000000..25232b69907 --- /dev/null +++ b/src/test/scala/Java/JavaModelEnumTest.scala @@ -0,0 +1,33 @@ +package Java + +import com.wordnik.swagger.codegen.languages.JavaClientCodegen +import com.wordnik.swagger.models._ +import com.wordnik.swagger.models.properties._ +import org.junit.runner.RunWith +import org.scalatest.{FlatSpec, Matchers} +import org.scalatest.junit.JUnitRunner + +import scala.collection.JavaConverters._ + +@RunWith(classOf[JUnitRunner]) +class JavaModelEnumTest extends FlatSpec with Matchers { + + it should "convert a java model with an enum" in { + val enumProperty = new StringProperty() + enumProperty.setEnum(List("VALUE1", "VALUE2", "VALUE3").asJava) + val model = new ModelImpl() + .property("name", enumProperty) + + val codegen = new JavaClientCodegen() + val cm = codegen.fromModel("sample", model) + + cm.vars.size should be(1) + val enumVar = cm.vars.get(0) + enumVar.baseName should be("name") + enumVar.datatype should be("NameEnum") + enumVar.name should be("name") + enumVar.defaultValue should be("null") + enumVar.baseType should be("String") + enumVar.isEnum should equal(true) + } +} \ No newline at end of file