more flattening fixes

This commit is contained in:
Tony Tam 2015-10-19 23:10:48 -07:00
parent 555fd54fbb
commit aaf1df1971
2 changed files with 52 additions and 15 deletions

View File

@ -1,5 +1,6 @@
package io.swagger.codegen; package io.swagger.codegen;
import com.sun.org.apache.xpath.internal.operations.Mod;
import io.swagger.models.*; import io.swagger.models.*;
import io.swagger.models.parameters.BodyParameter; import io.swagger.models.parameters.BodyParameter;
import io.swagger.models.parameters.Parameter; import io.swagger.models.parameters.Parameter;
@ -43,14 +44,18 @@ public class InlineModelResolver {
BodyParameter bp = (BodyParameter) parameter; BodyParameter bp = (BodyParameter) parameter;
if (bp.getSchema() != null) { if (bp.getSchema() != null) {
Model model = bp.getSchema(); Model model = bp.getSchema();
String existing = matchGenerated(model); if(model instanceof ModelImpl) {
if (existing != null) { ModelImpl obj = (ModelImpl) model;
bp.setSchema(new RefModel(existing)); flattenProperties(obj.getProperties(), pathname);
} else { }
String name = uniqueName(bp.getName()); else if (model instanceof ArrayModel) {
bp.setSchema(new RefModel(name)); ArrayModel am = (ArrayModel) model;
addGenerated(name, model); Property inner = am.getItems();
swagger.addDefinition(name, model);
if(inner instanceof ObjectProperty) {
ObjectProperty op = (ObjectProperty) inner;
flattenProperties(op.getProperties(), pathname);
}
} }
} }
} }
@ -170,6 +175,7 @@ public class InlineModelResolver {
public String uniqueName(String key) { public String uniqueName(String key) {
int count = 0; int count = 0;
boolean done = false; boolean done = false;
key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", "");
while (!done) { while (!done) {
String name = key; String name = key;
if (count > 0) { if (count > 0) {

View File

@ -110,19 +110,21 @@ public class InlineModelResolverTest {
.parameter(new BodyParameter() .parameter(new BodyParameter()
.name("body") .name("body")
.schema(new ModelImpl() .schema(new ModelImpl()
.property("address", new ObjectProperty()
.property("street", new StringProperty()))
.property("name", new StringProperty()))))); .property("name", new StringProperty())))));
new InlineModelResolver().flatten(swagger); new InlineModelResolver().flatten(swagger);
Operation operation = swagger.getPaths().get("/hello").getGet(); Operation operation = swagger.getPaths().get("/hello").getGet();
BodyParameter bp = (BodyParameter)operation.getParameters().get(0); BodyParameter bp = (BodyParameter)operation.getParameters().get(0);
assertTrue(bp.getSchema() instanceof RefModel); assertTrue(bp.getSchema() instanceof ModelImpl);
Model body = swagger.getDefinitions().get("body"); Model body = swagger.getDefinitions().get("hello_address");
assertTrue(body instanceof ModelImpl); assertTrue(body instanceof ModelImpl);
ModelImpl impl = (ModelImpl) body; ModelImpl impl = (ModelImpl) body;
assertNotNull(impl.getProperties().get("name")); assertNotNull(impl.getProperties().get("street"));
} }
@Test @Test
@ -134,7 +136,9 @@ public class InlineModelResolverTest {
.parameter(new BodyParameter() .parameter(new BodyParameter()
.name("body") .name("body")
.schema(new ArrayModel() .schema(new ArrayModel()
.items(new StringProperty()))))); .items(new ObjectProperty()
.property("address", new ObjectProperty()
.property("street", new StringProperty())))))));
new InlineModelResolver().flatten(swagger); new InlineModelResolver().flatten(swagger);
@ -144,10 +148,17 @@ public class InlineModelResolverTest {
BodyParameter bp = (BodyParameter) param; BodyParameter bp = (BodyParameter) param;
Model schema = bp.getSchema(); Model schema = bp.getSchema();
assertTrue(schema instanceof RefModel); assertTrue(schema instanceof ArrayModel);
Model model = swagger.getDefinitions().get("body"); ArrayModel am = (ArrayModel) schema;
assertTrue(model instanceof ArrayModel); Property inner = am.getItems();
ObjectProperty op = (ObjectProperty) inner;
Property name = op.getProperties().get("address");
assertTrue(name instanceof RefProperty);
Model model = swagger.getDefinitions().get("hello_address");
assertNotNull(model);
} }
@Test @Test
@ -267,4 +278,24 @@ public class InlineModelResolverTest {
Property name = op.getProperties().get("name"); Property name = op.getProperties().get("name");
assertTrue(name instanceof StringProperty); assertTrue(name instanceof StringProperty);
} }
@Test
public void testBasicInput() {
Swagger swagger = new Swagger();
ModelImpl user = new ModelImpl()
.property("name", new StringProperty());
swagger.path("/foo/baz", new Path()
.post(new Operation()
.parameter(new BodyParameter()
.name("myBody")
.schema(new RefModel("User")))));
swagger.addDefinition("User", user);
new InlineModelResolver().flatten(swagger);
Json.prettyPrint(swagger);
}
} }