use of io.crnk.core.engine.query.QueryAdapter in project crnk-framework by crnk-project.
the class ResourceRepositoryAdapter method findAll.
public JsonApiResponse findAll(QueryAdapter queryAdapter) {
RepositoryRequestFilterChainImpl chain = new RepositoryRequestFilterChainImpl() {
@SuppressWarnings("rawtypes")
@Override
protected JsonApiResponse invoke(RepositoryFilterContext context) {
RepositoryRequestSpec request = context.getRequest();
QueryAdapter queryAdapter = request.getQueryAdapter();
Object resources;
if (isAnnotated) {
resources = ((AnnotatedResourceRepositoryAdapter) resourceRepository).findAll(queryAdapter);
} else if (resourceRepository instanceof ResourceRepositoryV2) {
QuerySpec querySpec = request.getQuerySpec(resourceInformation);
resources = ((ResourceRepositoryV2) resourceRepository).findAll(querySpec);
} else {
resources = ((ResourceRepository) resourceRepository).findAll(request.getQueryParams());
}
return getResponse(resourceRepository, resources, request);
}
};
RepositoryRequestSpec requestSpec = RepositoryRequestSpecImpl.forFindAll(moduleRegistry, resourceInformation, queryAdapter);
return chain.doFilter(newRepositoryFilterContext(requestSpec));
}
use of io.crnk.core.engine.query.QueryAdapter in project crnk-framework by crnk-project.
the class ResponseRepositoryAdapter method enrichLinksInformation.
private LinksInformation enrichLinksInformation(LinksInformation linksInformation, Iterable<?> resources, RepositoryRequestSpec requestSpec) {
QueryAdapter queryAdapter = requestSpec.getQueryAdapter();
LinksInformation enrichedLinksInformation = linksInformation;
if (queryAdapter instanceof QuerySpecAdapter && resources instanceof ResourceList && requestSpec.getResponseResourceInformation().getPagingBehavior() != null && requestSpec.getResponseResourceInformation().getPagingBehavior().isRequired(queryAdapter.getPagingSpec())) {
enrichedLinksInformation = enrichPageLinksInformation(enrichedLinksInformation, (ResourceList<?>) resources, queryAdapter, requestSpec);
}
return enrichedLinksInformation;
}
use of io.crnk.core.engine.query.QueryAdapter in project crnk-framework by crnk-project.
the class HasNextBasedPagedLinksInformationTest method setup.
@Before
public void setup() {
HasNextPageTestRepository.clear();
super.setup();
RegistryEntry registryEntry = resourceRegistry.getEntry(Task.class);
HasNextPageTestRepository repo = (HasNextPageTestRepository) registryEntry.getResourceRepository(null).getResourceRepository();
repo = Mockito.spy(repo);
adapter = registryEntry.getResourceRepository(null);
QueryAdapter queryAdapter = new QuerySpecAdapter(querySpec(), resourceRegistry);
for (long i = 0; i < 5; i++) {
Task task = new Task();
task.setId(i);
task.setName("myTask");
adapter.create(task, queryAdapter);
}
}
use of io.crnk.core.engine.query.QueryAdapter in project crnk-framework by crnk-project.
the class QuerySpecRepositoryTest method findAllWithResourceListResult.
@Test
public void findAllWithResourceListResult() {
QuerySpec querySpec = new QuerySpec(Schedule.class);
QueryAdapter adapter = new QuerySpecAdapter(querySpec, resourceRegistry);
JsonApiResponse response = scheduleAdapter.findAll(adapter);
Assert.assertTrue(response.getEntity() instanceof ScheduleRepository.ScheduleList);
Assert.assertTrue(response.getLinksInformation() instanceof ScheduleRepository.ScheduleListLinks);
Assert.assertTrue(response.getMetaInformation() instanceof ScheduleRepository.ScheduleListMeta);
}
use of io.crnk.core.engine.query.QueryAdapter in project crnk-framework by crnk-project.
the class ClientDocumentMapper method newResourceMapper.
@Override
protected ResourceMapper newResourceMapper(final DocumentMapperUtil util, boolean client, ObjectMapper objectMapper) {
return new ResourceMapper(util, client, objectMapper, null) {
@Override
protected void setRelationship(Resource resource, ResourceField field, Object entity, ResourceInformation resourceInformation, QueryAdapter queryAdapter, ResourceMappingConfig mappingConfig) {
// we also include relationship data if it is not null and not a
// unloaded proxy
boolean includeRelation = true;
Object relationshipId = null;
if (field.hasIdField()) {
Object relationshipValue = field.getIdAccessor().getValue(entity);
ResourceInformation oppositeInformation = resourceRegistry.getEntry(field.getOppositeResourceType()).getResourceInformation();
if (relationshipValue instanceof Collection) {
List ids = new ArrayList();
for (Object elem : (Collection<?>) relationshipValue) {
ids.add(oppositeInformation.toResourceIdentifier(elem));
}
relationshipId = ids;
} else if (relationshipValue != null) {
relationshipId = oppositeInformation.toResourceIdentifier(relationshipValue);
}
includeRelation = relationshipId != null || field.getSerializeType() != SerializeType.LAZY;
} else {
Object relationshipValue = field.getAccessor().getValue(entity);
if (relationshipValue instanceof ObjectProxy) {
includeRelation = ((ObjectProxy) relationshipValue).isLoaded();
} else {
// TODO for fieldSets handling in the future the lazy
// handling must be different
includeRelation = relationshipValue != null || field.getSerializeType() != SerializeType.LAZY && !field.isCollection();
}
if (relationshipValue != null && includeRelation) {
if (relationshipValue instanceof Collection) {
relationshipId = util.toResourceIds((Collection<?>) relationshipValue);
} else {
relationshipId = util.toResourceId(relationshipValue);
}
}
}
if (includeRelation) {
Relationship relationship = new Relationship();
relationship.setData(Nullable.of((Object) relationshipId));
resource.getRelationships().put(field.getJsonName(), relationship);
}
}
};
}
Aggregations