forked from loafle/openapi-generator-original
more flattening fixes
This commit is contained in:
parent
555fd54fbb
commit
aaf1df1971
@ -1,5 +1,6 @@
|
||||
package io.swagger.codegen;
|
||||
|
||||
import com.sun.org.apache.xpath.internal.operations.Mod;
|
||||
import io.swagger.models.*;
|
||||
import io.swagger.models.parameters.BodyParameter;
|
||||
import io.swagger.models.parameters.Parameter;
|
||||
@ -43,14 +44,18 @@ public class InlineModelResolver {
|
||||
BodyParameter bp = (BodyParameter) parameter;
|
||||
if (bp.getSchema() != null) {
|
||||
Model model = bp.getSchema();
|
||||
String existing = matchGenerated(model);
|
||||
if (existing != null) {
|
||||
bp.setSchema(new RefModel(existing));
|
||||
} else {
|
||||
String name = uniqueName(bp.getName());
|
||||
bp.setSchema(new RefModel(name));
|
||||
addGenerated(name, model);
|
||||
swagger.addDefinition(name, model);
|
||||
if(model instanceof ModelImpl) {
|
||||
ModelImpl obj = (ModelImpl) model;
|
||||
flattenProperties(obj.getProperties(), pathname);
|
||||
}
|
||||
else if (model instanceof ArrayModel) {
|
||||
ArrayModel am = (ArrayModel) model;
|
||||
Property inner = am.getItems();
|
||||
|
||||
if(inner instanceof ObjectProperty) {
|
||||
ObjectProperty op = (ObjectProperty) inner;
|
||||
flattenProperties(op.getProperties(), pathname);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,6 +175,7 @@ public class InlineModelResolver {
|
||||
public String uniqueName(String key) {
|
||||
int count = 0;
|
||||
boolean done = false;
|
||||
key = key.replaceAll("[^a-z_\\.A-Z0-9 ]", "");
|
||||
while (!done) {
|
||||
String name = key;
|
||||
if (count > 0) {
|
||||
|
@ -110,19 +110,21 @@ public class InlineModelResolverTest {
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ModelImpl()
|
||||
.property("address", new ObjectProperty()
|
||||
.property("street", new StringProperty()))
|
||||
.property("name", new StringProperty())))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
Operation operation = swagger.getPaths().get("/hello").getGet();
|
||||
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);
|
||||
|
||||
ModelImpl impl = (ModelImpl) body;
|
||||
assertNotNull(impl.getProperties().get("name"));
|
||||
assertNotNull(impl.getProperties().get("street"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -134,7 +136,9 @@ public class InlineModelResolverTest {
|
||||
.parameter(new BodyParameter()
|
||||
.name("body")
|
||||
.schema(new ArrayModel()
|
||||
.items(new StringProperty())))));
|
||||
.items(new ObjectProperty()
|
||||
.property("address", new ObjectProperty()
|
||||
.property("street", new StringProperty())))))));
|
||||
|
||||
new InlineModelResolver().flatten(swagger);
|
||||
|
||||
@ -144,10 +148,17 @@ public class InlineModelResolverTest {
|
||||
BodyParameter bp = (BodyParameter) param;
|
||||
Model schema = bp.getSchema();
|
||||
|
||||
assertTrue(schema instanceof RefModel);
|
||||
assertTrue(schema instanceof ArrayModel);
|
||||
|
||||
Model model = swagger.getDefinitions().get("body");
|
||||
assertTrue(model instanceof ArrayModel);
|
||||
ArrayModel am = (ArrayModel) schema;
|
||||
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
|
||||
@ -267,4 +278,24 @@ public class InlineModelResolverTest {
|
||||
Property name = op.getProperties().get("name");
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user