use of io.crnk.core.engine.document.Document in project crnk-framework by crnk-project.
the class DocumentMapper method toDocument.
public Document toDocument(JsonApiResponse response, QueryAdapter queryAdapter, DocumentMappingConfig mappingConfig) {
if (response == null) {
return null;
}
ResourceMappingConfig resourceMapping = mappingConfig.getResourceMapping();
Document doc = new Document();
addErrors(doc, response.getErrors());
util.setMeta(doc, response.getMetaInformation());
if (mappingConfig.getResourceMapping().getSerializeLinks()) {
util.setLinks(doc, response.getLinksInformation(), queryAdapter);
}
addData(doc, response.getEntity(), queryAdapter, resourceMapping);
addRelationDataAndInclusions(doc, response.getEntity(), queryAdapter, mappingConfig);
if (queryAdapter != null && queryAdapter.getCompactMode()) {
compact(doc);
}
return doc;
}
use of io.crnk.core.engine.document.Document in project crnk-framework by crnk-project.
the class CollectionGet method handle.
@Override
@SuppressWarnings("unchecked")
public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) {
String resourceName = jsonPath.getElementName();
RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName);
if (registryEntry == null) {
throw new ResourceNotFoundException(resourceName);
}
Document responseDocument;
ResourceRepositoryAdapter resourceRepository = registryEntry.getResourceRepository(parameterProvider);
JsonApiResponse entities;
if (jsonPath.getIds() == null || jsonPath.getIds().getIds().isEmpty()) {
entities = resourceRepository.findAll(queryAdapter);
} else {
Class<? extends Serializable> idType = (Class<? extends Serializable>) registryEntry.getResourceInformation().getIdField().getType();
Iterable<? extends Serializable> parsedIds = typeParser.parse((Iterable<String>) jsonPath.getIds().getIds(), idType);
entities = resourceRepository.findAll(parsedIds, queryAdapter);
}
responseDocument = documentMapper.toDocument(entities, queryAdapter, parameterProvider);
return new Response(responseDocument, 200);
}
use of io.crnk.core.engine.document.Document in project crnk-framework by crnk-project.
the class RelationshipsResourceGet method handle.
@Override
public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) {
String resourceName = jsonPath.getResourceType();
PathIds resourceIds = jsonPath.getIds();
RegistryEntry registryEntry = resourceRegistry.getEntry(resourceName);
Serializable castedResourceId = getResourceId(resourceIds, registryEntry);
String elementName = jsonPath.getElementName();
ResourceField relationshipField = registryEntry.getResourceInformation().findRelationshipFieldByName(elementName);
verifyFieldNotNull(relationshipField, elementName);
boolean isCollection = Iterable.class.isAssignableFrom(relationshipField.getType());
RelationshipRepositoryAdapter relationshipRepositoryForClass = registryEntry.getRelationshipRepository(relationshipField, parameterProvider);
JsonApiResponse entities;
if (isCollection) {
entities = relationshipRepositoryForClass.findManyTargets(castedResourceId, relationshipField, queryAdapter);
} else {
entities = relationshipRepositoryForClass.findOneTarget(castedResourceId, relationshipField, queryAdapter);
}
Document responseDocument = documentMapper.toDocument(entities, queryAdapter, parameterProvider);
// return explicit { data : null } if values found
if (!responseDocument.getData().isPresent()) {
responseDocument.setData(Nullable.nullValue());
}
return new Response(responseDocument, 200);
}
use of io.crnk.core.engine.document.Document in project crnk-framework by crnk-project.
the class ResourceGet method handle.
/**
* {@inheritDoc}
* <p>
* Passes the request to controller method.
*/
@Override
public Response handle(JsonPath jsonPath, QueryAdapter queryAdapter, RepositoryMethodParameterProvider parameterProvider, Document requestBody) {
String resourceType = jsonPath.getElementName();
PathIds resourceIds = jsonPath.getIds();
RegistryEntry registryEntry = getRegistryEntry(resourceType);
String id = resourceIds.getIds().get(0);
@SuppressWarnings("unchecked") Class<? extends Serializable> idClass = (Class<? extends Serializable>) registryEntry.getResourceInformation().getIdField().getType();
Serializable castedId = typeParser.parse(id, idClass);
ResourceRepositoryAdapter resourceRepository = registryEntry.getResourceRepository(parameterProvider);
JsonApiResponse entities = resourceRepository.findOne(castedId, queryAdapter);
Document responseDocument = documentMapper.toDocument(entities, queryAdapter);
// return explicit { data : null } if values found
if (!responseDocument.getData().isPresent()) {
responseDocument.setData(Nullable.nullValue());
}
return new Response(responseDocument, 200);
}
use of io.crnk.core.engine.document.Document in project crnk-framework by crnk-project.
the class ClientStubBaseTest method checkBodyWithErrorsButInvalidContentType.
@Test
public void checkBodyWithErrorsButInvalidContentType() throws IOException {
Document document = new Document();
ErrorData errorData = new ErrorDataBuilder().setCode("404").setDetail("detail").build();
document.setErrors(Arrays.asList(errorData));
String body = client.getObjectMapper().writeValueAsString(document);
HttpAdapterResponse response = Mockito.mock(HttpAdapterResponse.class);
Mockito.when(response.body()).thenReturn(body);
Mockito.when(response.getResponseHeader(HttpHeaders.HTTP_CONTENT_TYPE)).thenReturn("not json api");
Mockito.when(response.code()).thenReturn(404);
RuntimeException exception = stub.handleError(response);
Assert.assertTrue(exception instanceof ResourceNotFoundException);
Assert.assertNull(exception.getMessage());
}
Aggregations