use of io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter in project crnk-framework by crnk-project.
the class CrnkClient method allocateRepositoryRelation.
private RelationshipRepositoryAdapter allocateRepositoryRelation(Class sourceClass, Class targetClass) {
// allocate relations as well
ClientResourceRegistry clientResourceRegistry = (ClientResourceRegistry) resourceRegistry;
if (!clientResourceRegistry.isInitialized(sourceClass)) {
allocateRepository(sourceClass);
}
if (!clientResourceRegistry.isInitialized(targetClass)) {
allocateRepository(targetClass);
}
RegistryEntry sourceEntry = resourceRegistry.getEntry(sourceClass);
final RegistryEntry targetEntry = resourceRegistry.getEntry(targetClass);
String targetResourceType = targetEntry.getResourceInformation().getResourceType();
Map relationshipEntries = sourceEntry.getRelationshipEntries();
DirectResponseRelationshipEntry relationshipEntry = (DirectResponseRelationshipEntry) relationshipEntries.get(targetResourceType);
if (!relationshipEntries.containsKey(targetResourceType)) {
final RelationshipRepositoryStubImpl relationshipRepositoryStub = new RelationshipRepositoryStubImpl(this, sourceClass, targetClass, sourceEntry.getResourceInformation(), urlBuilder);
RepositoryInstanceBuilder<RelationshipRepository> relationshipRepositoryInstanceBuilder = new RepositoryInstanceBuilder<RelationshipRepository>(null, null) {
@Override
public RelationshipRepository buildRepository() {
return relationshipRepositoryStub;
}
};
relationshipEntry = new DirectResponseRelationshipEntry(relationshipRepositoryInstanceBuilder) {
@Override
public String getTargetResourceType() {
return targetEntry.getResourceInformation().getResourceType();
}
};
relationshipEntries.put(targetResourceType, relationshipEntry);
}
Object repoInstance = relationshipEntry.getRepositoryInstanceBuilder();
return new RelationshipRepositoryAdapter(sourceEntry.getResourceInformation(), moduleRegistry, repoInstance);
}
use of io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter in project crnk-framework by crnk-project.
the class CrnkClient method getQueryParamsRepository.
/**
* @param sourceClass source class
* @param targetClass target class
* @return stub for the relationship between the given source and target
* class
* @deprecated make use of QuerySpec
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public <T, I extends Serializable, D, J extends Serializable> RelationshipRepositoryStub<T, I, D, J> getQueryParamsRepository(Class<T> sourceClass, Class<D> targetClass) {
init();
RelationshipRepositoryAdapter repositoryAdapter = allocateRepositoryRelation(sourceClass, targetClass);
return (RelationshipRepositoryStub<T, I, D, J>) repositoryAdapter.getRelationshipRepository();
}
use of io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter in project crnk-framework by crnk-project.
the class CrnkClient method getRepositoryForType.
/**
* @param sourceClass source class
* @param targetClass target class
* @return stub for the relationship between the given source and target
* class
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public <T, I extends Serializable, D, J extends Serializable> RelationshipRepositoryV2<T, I, D, J> getRepositoryForType(Class<T> sourceClass, Class<D> targetClass) {
init();
RelationshipRepositoryAdapter repositoryAdapter = allocateRepositoryRelation(sourceClass, targetClass);
return (RelationshipRepositoryV2<T, I, D, J>) repositoryAdapter.getRelationshipRepository();
}
use of io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter in project crnk-framework by crnk-project.
the class RegistryEntry method getRelationshipRepository.
@SuppressWarnings("unchecked")
public RelationshipRepositoryAdapter getRelationshipRepository(ResourceField field, RepositoryMethodParameterProvider parameterProvider) {
ResponseRelationshipEntry relationshipEntry = relationshipEntries.get(field);
if (relationshipEntry == null) {
throw new RelationshipRepositoryNotFoundException(getResourceInformation().getResourceType(), field.getUnderlyingName());
}
Object repoInstance;
if (relationshipEntry instanceof AnnotatedRelationshipEntryBuilder) {
repoInstance = ((AnnotatedRelationshipEntryBuilder) relationshipEntry).build(parameterProvider);
} else {
repoInstance = ((DirectResponseRelationshipEntry) relationshipEntry).getRepositoryInstanceBuilder();
}
if (repoInstance instanceof ResourceRegistryAware) {
((ResourceRegistryAware) repoInstance).setResourceRegistry(moduleRegistry.getResourceRegistry());
}
return new RelationshipRepositoryAdapter(getResourceInformation(), moduleRegistry, repoInstance);
}
use of io.crnk.core.engine.internal.repository.RelationshipRepositoryAdapter in project crnk-framework by crnk-project.
the class FieldResourceGetTest method onGivenIncludeRequestFieldResourcesGetShouldHandleIt.
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void onGivenIncludeRequestFieldResourcesGetShouldHandleIt() throws Exception {
// get repositories
ResourceRepositoryAdapter userRepo = resourceRegistry.getEntry(User.class).getResourceRepository(null);
ResourceRepositoryAdapter projectRepo = resourceRegistry.getEntry(Project.class).getResourceRepository(null);
ResourceRepositoryAdapter taskRepo = resourceRegistry.getEntry(Task.class).getResourceRepository(null);
RelationshipRepositoryAdapter relRepositoryUserToProject = resourceRegistry.getEntry(User.class).getRelationshipRepository("assignedProjects", null);
RelationshipRepositoryAdapter relRepositoryProjectToTask = resourceRegistry.getEntry(Project.class).getRelationshipRepository("tasks", null);
ResourceInformation userInfo = resourceRegistry.getEntry(User.class).getResourceInformation();
ResourceInformation projectInfo = resourceRegistry.getEntry(Project.class).getResourceInformation();
ResourceField includedTaskField = projectInfo.findRelationshipFieldByName("includedTask");
ResourceField assignedProjectsField = userInfo.findRelationshipFieldByName("assignedProjects");
// setup test data
User user = new User();
user.setId(1L);
userRepo.create(user, emptyUserQuery);
Project project = new Project();
project.setId(2L);
projectRepo.create(project, emptyProjectQuery);
Task task = new Task();
task.setId(3L);
taskRepo.create(task, emptyTaskQuery);
relRepositoryUserToProject.setRelations(user, Collections.singletonList(project.getId()), assignedProjectsField, emptyProjectQuery);
relRepositoryProjectToTask.setRelation(project, task.getId(), includedTaskField, emptyTaskQuery);
Map<String, Set<String>> params = new HashMap<String, Set<String>>();
addParams(params, "include[projects]", "includedTask");
QueryParams queryParams = queryParamsBuilder.buildQueryParams(params);
QueryAdapter queryAdapter = new QueryParamsAdapter(projectInfo, queryParams, moduleRegistry);
JsonPath jsonPath = pathBuilder.build("/users/1/assignedProjects");
FieldResourceGet sut = new FieldResourceGet(resourceRegistry, typeParser, documentMapper);
Response response = sut.handle(jsonPath, queryAdapter, null, null);
// THEN
Assert.assertNotNull(response);
Assert.assertNotNull(response.getDocument().getData());
List<Resource> entityList = ((List<Resource>) response.getDocument().getData().get());
Assert.assertEquals(true, entityList.size() > 0);
Assert.assertEquals("projects", entityList.get(0).getType());
Resource returnedProject = entityList.get(0);
Assert.assertEquals(project.getId().toString(), returnedProject.getId());
Relationship relationship = returnedProject.getRelationships().get("includedTask");
Assert.assertNotNull(relationship);
Assert.assertEquals(task.getId().toString(), relationship.getSingleData().get().getId());
}
Aggregations