use of io.crnk.core.engine.information.resource.ResourceInformation in project crnk-framework by crnk-project.
the class DefaultRegistryEntryBuilder method build.
@Override
public RegistryEntry build() {
ResourceInformation resourceInformation = buildResource();
ResourceEntry resourceEntry = buildResourceRepository(resourceInformation);
Map<ResourceField, ResponseRelationshipEntry> relationshipEntries = buildRelationships(resourceInformation);
RegistryEntry entry = new RegistryEntry(resourceEntry, relationshipEntries);
entry.initialize(moduleRegistry);
return entry;
}
use of io.crnk.core.engine.information.resource.ResourceInformation in project crnk-framework by crnk-project.
the class RelationshipRepositoryAdapter method findBulkOneTargets.
@SuppressWarnings("rawtypes")
public Map<I, JsonApiResponse> findBulkOneTargets(List<I> sourceIds, ResourceField field, QueryAdapter queryAdapter) {
if (relationshipRepository instanceof BulkRelationshipRepositoryV2) {
RepositoryBulkRequestFilterChainImpl<I> chain = new RepositoryBulkRequestFilterChainImpl<I>() {
@Override
protected Map<I, JsonApiResponse> invoke(RepositoryFilterContext context) {
RepositoryRequestSpec request = context.getRequest();
Iterable<?> sourceIds = request.getIds();
ResourceField field = request.getRelationshipField();
QueryAdapter queryAdapter = request.getQueryAdapter();
BulkRelationshipRepositoryV2 bulkRepository = (BulkRelationshipRepositoryV2) relationshipRepository;
ResourceInformation targetResourceInformation = moduleRegistry.getResourceRegistry().getEntry(field.getOppositeResourceType()).getResourceInformation();
MultivaluedMap<I, D> targetsMap = bulkRepository.findTargets(sourceIds, field.getUnderlyingName(), request.getQuerySpec(targetResourceInformation));
return toResponses(targetsMap, false, queryAdapter, field, HttpMethod.GET);
}
};
RepositoryRequestSpec requestSpec = RepositoryRequestSpecImpl.forFindTarget(moduleRegistry, queryAdapter, sourceIds, field);
return chain.doFilter(newRepositoryFilterContext(requestSpec));
} else {
// fallback to non-bulk operation
Map<I, JsonApiResponse> responseMap = new HashMap<>();
for (I sourceId : sourceIds) {
JsonApiResponse response = findOneTarget(sourceId, field, queryAdapter);
responseMap.put(sourceId, response);
}
return responseMap;
}
}
use of io.crnk.core.engine.information.resource.ResourceInformation in project crnk-framework by crnk-project.
the class RelationshipRepositoryAdapter method findOneTarget.
@SuppressWarnings("rawtypes")
public JsonApiResponse findOneTarget(I sourceId, ResourceField field, QueryAdapter queryAdapter) {
RepositoryRequestFilterChainImpl chain = new RepositoryRequestFilterChainImpl() {
@Override
protected JsonApiResponse invoke(RepositoryFilterContext context) {
RepositoryRequestSpec request = context.getRequest();
Serializable sourceId = request.getId();
ResourceField field = request.getRelationshipField();
QueryAdapter queryAdapter = request.getQueryAdapter();
Object resource;
if (isAnnotated) {
resource = ((AnnotatedRelationshipRepositoryAdapter) relationshipRepository).findOneTarget(sourceId, field.getUnderlyingName(), queryAdapter);
} else if (relationshipRepository instanceof RelationshipRepositoryV2) {
RelationshipRepositoryV2 querySpecRepository = (RelationshipRepositoryV2) relationshipRepository;
ResourceInformation targetResourceInformation = moduleRegistry.getResourceRegistry().getEntry(field.getOppositeResourceType()).getResourceInformation();
resource = querySpecRepository.findOneTarget(sourceId, field.getUnderlyingName(), request.getQuerySpec(targetResourceInformation));
} else {
resource = ((RelationshipRepository) relationshipRepository).findOneTarget(sourceId, field.getUnderlyingName(), request.getQueryParams());
}
return getResponse(relationshipRepository, resource, request);
}
};
RepositoryRequestSpec requestSpec = RepositoryRequestSpecImpl.forFindTarget(moduleRegistry, queryAdapter, Arrays.asList(sourceId), field);
return chain.doFilter(newRepositoryFilterContext(requestSpec));
}
use of io.crnk.core.engine.information.resource.ResourceInformation in project crnk-framework by crnk-project.
the class RelationshipRepositoryAdapter method findManyTargets.
@SuppressWarnings("rawtypes")
public JsonApiResponse findManyTargets(I sourceId, ResourceField field, QueryAdapter queryAdapter) {
RepositoryRequestFilterChainImpl chain = new RepositoryRequestFilterChainImpl() {
@Override
protected JsonApiResponse invoke(RepositoryFilterContext context) {
RepositoryRequestSpec request = context.getRequest();
Serializable sourceId = request.getId();
ResourceField field = request.getRelationshipField();
QueryAdapter queryAdapter = request.getQueryAdapter();
Object resources;
if (isAnnotated) {
resources = ((AnnotatedRelationshipRepositoryAdapter) relationshipRepository).findManyTargets(sourceId, field.getUnderlyingName(), queryAdapter);
} else if (relationshipRepository instanceof RelationshipRepositoryV2) {
RelationshipRepositoryV2 querySpecRepository = (RelationshipRepositoryV2) relationshipRepository;
ResourceInformation targetResourceInformation = moduleRegistry.getResourceRegistry().getEntry(field.getOppositeResourceType()).getResourceInformation();
resources = querySpecRepository.findManyTargets(sourceId, field.getUnderlyingName(), request.getQuerySpec(targetResourceInformation));
} else {
resources = ((RelationshipRepository) relationshipRepository).findManyTargets(sourceId, field.getUnderlyingName(), request.getQueryParams());
}
return getResponse(relationshipRepository, resources, request);
}
};
RepositoryRequestSpec requestSpec = RepositoryRequestSpecImpl.forFindTarget(moduleRegistry, queryAdapter, Arrays.asList(sourceId), field);
return chain.doFilter(newRepositoryFilterContext(requestSpec));
}
use of io.crnk.core.engine.information.resource.ResourceInformation in project crnk-framework by crnk-project.
the class RelationshipRepositoryAdapter method findBulkManyTargets.
@SuppressWarnings("rawtypes")
public Map<I, JsonApiResponse> findBulkManyTargets(List<I> sourceIds, ResourceField field, QueryAdapter queryAdapter) {
if (relationshipRepository instanceof BulkRelationshipRepositoryV2) {
RepositoryBulkRequestFilterChainImpl<I> chain = new RepositoryBulkRequestFilterChainImpl<I>() {
@Override
protected Map<I, JsonApiResponse> invoke(RepositoryFilterContext context) {
RepositoryRequestSpec request = context.getRequest();
Iterable<I> sourceIds = request.getIds();
ResourceField field = request.getRelationshipField();
QueryAdapter queryAdapter = request.getQueryAdapter();
BulkRelationshipRepositoryV2 bulkRepository = (BulkRelationshipRepositoryV2) relationshipRepository;
ResourceInformation targetResourceInformation = moduleRegistry.getResourceRegistry().getEntry(field.getOppositeResourceType()).getResourceInformation();
QuerySpec querySpec = request.getQuerySpec(targetResourceInformation);
MultivaluedMap targetsMap = bulkRepository.findTargets(sourceIds, field.getUnderlyingName(), querySpec);
return toResponses(targetsMap, true, queryAdapter, field, HttpMethod.GET);
}
};
RepositoryRequestSpec requestSpec = RepositoryRequestSpecImpl.forFindTarget(moduleRegistry, queryAdapter, sourceIds, field);
return chain.doFilter(newRepositoryFilterContext(requestSpec));
} else {
// fallback to non-bulk operation
Map<I, JsonApiResponse> responseMap = new HashMap<>();
for (I sourceId : sourceIds) {
JsonApiResponse response = findManyTargets(sourceId, field, queryAdapter);
responseMap.put(sourceId, response);
}
return responseMap;
}
}
Aggregations