use of com.yahoo.elide.swagger.model.Resource in project elide by yahoo.
the class JsonApiModelResolver method resolve.
@Override
public Model resolve(java.lang.reflect.Type type, ModelConverterContext context, Iterator<ModelConverter> next) {
if (!(type instanceof Class || type instanceof SimpleType || type instanceof Type)) {
return super.resolve(type, context, next);
}
Type<?> clazzType = null;
/*
* If an Elide entity is an attribute somewhere in a model, the ModelResolver will
* end up wrapping this as a SimpleType (rather than trying to resolve the entity class directly).
*/
if (type instanceof SimpleType) {
type = ((SimpleType) type).getRawClass();
clazzType = ClassType.of((Class<?>) type);
} else if (type instanceof Type) {
clazzType = (Type<?>) type;
} else if (type instanceof Class) {
clazzType = ClassType.of((Class<?>) type);
}
/* Not an entity managed by Elide, let Swagger convert it */
String typeAlias;
try {
typeAlias = dictionary.getJsonAliasFor(clazzType);
} catch (IllegalArgumentException e) {
return super.resolve(type, context, next);
}
Resource entitySchema = new Resource();
entitySchema.description(getModelDescription(clazzType));
entitySchema.setSecurityDescription(getClassPermissions(clazzType));
/* Populate the attributes */
List<String> attributeNames = dictionary.getAttributes(clazzType);
for (String attributeName : attributeNames) {
Type<?> attributeType = dictionary.getType(clazzType, attributeName);
Property attribute = processAttribute(clazzType, attributeName, attributeType, context, next);
entitySchema.addAttribute(attributeName, attribute);
}
/* Populate the relationships */
List<String> relationshipNames = dictionary.getRelationships(clazzType);
for (String relationshipName : relationshipNames) {
Type<?> relationshipType = dictionary.getParameterizedType(clazzType, relationshipName);
Relationship relationship = processRelationship(clazzType, relationshipName, relationshipType);
if (relationship != null) {
entitySchema.addRelationship(relationshipName, relationship);
}
}
entitySchema.name(typeAlias);
return entitySchema;
}
use of com.yahoo.elide.swagger.model.Resource in project elide by yahoo.
the class SwaggerBuilderTest method testDefinitionGeneration.
@Test
public void testDefinitionGeneration() throws Exception {
Map<String, Model> definitions = swagger.getDefinitions();
assertEquals(4, definitions.size());
assertTrue(definitions.containsKey("book"));
assertTrue(definitions.containsKey("author"));
assertTrue(definitions.containsKey("publisher"));
assertTrue(definitions.containsKey("Address"));
Model bookModel = definitions.get("book");
assertTrue(bookModel instanceof Resource);
assertEquals("A book", bookModel.getDescription());
ObjectProperty attributeProps = (ObjectProperty) bookModel.getProperties().get("attributes");
assertTrue(attributeProps.getProperties().containsKey("title"));
ObjectProperty relationProps = (ObjectProperty) bookModel.getProperties().get("relationships");
assertTrue(relationProps.getProperties().containsKey("publisher"));
assertTrue(relationProps.getProperties().containsKey("authors"));
}
use of com.yahoo.elide.swagger.model.Resource in project elide by yahoo.
the class SwaggerBuilderTest method testOperationRequestBodies.
@Test
public void testOperationRequestBodies() throws Exception {
/* These take a datum pointing to a resource */
Operation[] resourceOps = { swagger.getPaths().get("/book").getPost(), swagger.getPaths().get("/book/{bookId}").getPatch() };
for (Operation op : resourceOps) {
BodyParameter bodyParam = (BodyParameter) op.getParameters().stream().filter((param) -> param.getIn().equals("body")).findFirst().get();
assertNotNull(bodyParam);
verifyDatum(bodyParam.getSchema(), "book");
}
/* These don't take any params */
Operation[] noParamOps = { swagger.getPaths().get("/book").getGet(), swagger.getPaths().get("/book/{bookId}").getDelete(), swagger.getPaths().get("/book/{bookId}").getGet() };
for (Operation op : noParamOps) {
Optional<Parameter> bodyParam = op.getParameters().stream().filter((param) -> param.getIn().equals("body")).findFirst();
assertFalse(bodyParam.isPresent());
}
/* These take a 'data' of relationships */
Operation[] relationshipOps = { swagger.getPaths().get("/book/{bookId}/relationships/authors").getPatch(), swagger.getPaths().get("/book/{bookId}/relationships/authors").getDelete(), swagger.getPaths().get("/book/{bookId}/relationships/authors").getPost() };
for (Operation op : relationshipOps) {
BodyParameter bodyParam = (BodyParameter) op.getParameters().stream().filter((param) -> param.getIn().equals("body")).findFirst().get();
assertNotNull(bodyParam);
verifyDataRelationship(bodyParam.getSchema(), "author");
}
}
use of com.yahoo.elide.swagger.model.Resource in project elide by yahoo.
the class JsonApiModelResolverTest method testModelDescriptions.
@Test
public void testModelDescriptions() {
Resource model = getModel(KEY_BOOK);
assertEquals("A book", model.getDescription());
model = getModel(KEY_AUTHOR);
assertEquals("The Author", model.getDescription());
model = getModel(KEY_PUBLISHER);
assertNull(model.getDescription());
}
Aggregations