use of io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter in project crnk-framework by crnk-project.
the class IncludeLookupSetterBaseTest method setup.
@SuppressWarnings({ "rawtypes", "unchecked" })
@Before
public void setup() {
super.setup();
// get repositories
ResourceRepositoryAdapter taskRepository = resourceRegistry.findEntry(Task.class).getResourceRepository(null);
RelationshipRepositoryAdapter relRepositoryTaskToProject = resourceRegistry.findEntry(Task.class).getRelationshipRepository("projects", null);
RelationshipRepositoryAdapter relRepositoryProjectToTask = resourceRegistry.findEntry(Project.class).getRelationshipRepository("tasks", null);
ResourceRepositoryAdapter projectRepository = resourceRegistry.findEntry(Project.class).getResourceRepository(null);
ResourceRepositoryAdapter hierarchicalTaskRepository = resourceRegistry.findEntry(HierarchicalTask.class).getResourceRepository(null);
// setup test data
ResourceInformation taskInfo = resourceRegistry.findEntry(Task.class).getResourceInformation();
ResourceInformation projectInfo = resourceRegistry.findEntry(Project.class).getResourceInformation();
ResourceField includedTaskField = projectInfo.findRelationshipFieldByName("includedTask");
ResourceField includedProjectField = taskInfo.findRelationshipFieldByName("includedProject");
ResourceField includedProjectsField = taskInfo.findRelationshipFieldByName("includedProjects");
ResourceField projectField = taskInfo.findRelationshipFieldByName("project");
QueryAdapter projectQuey = emptyQueryAdapter(Project.class);
QueryAdapter taskQuery = emptyQueryAdapter(Task.class);
QueryAdapter hierarchicalTaskQuery = emptyQueryAdapter(HierarchicalTask.class);
Project project = new Project();
project.setId(2L);
projectRepository.create(project, projectQuey);
Task task = new Task();
task.setId(1L);
taskRepository.create(task, taskQuery);
relRepositoryTaskToProject.setRelation(task, project.getId(), includedProjectField, projectQuey);
relRepositoryTaskToProject.setRelation(task, project.getId(), projectField, projectQuey);
relRepositoryTaskToProject.addRelations(task, Collections.singletonList(project.getId()), includedProjectsField, projectQuey);
// setup deep nested relationship
Task includedTask = new Task();
includedTask.setId(3L);
taskRepository.create(includedTask, taskQuery);
relRepositoryProjectToTask.setRelation(project, includedTask.getId(), includedTaskField, taskQuery);
Project deepIncludedProject = new Project();
deepIncludedProject.setId(2L);
projectRepository.create(project, projectQuey);
relRepositoryTaskToProject.setRelation(includedTask, deepIncludedProject.getId(), includedProjectField, projectQuey);
relRepositoryTaskToProject.addRelations(includedTask, Collections.singletonList(project.getId()), includedProjectsField, projectQuey);
// setup hierarchy of resources
h = new HierarchicalTask();
h.setId(1L);
h.setName("");
h0 = new HierarchicalTask();
h0.setId(2L);
h0.setName("0");
h0.setParent(h);
h1 = new HierarchicalTask();
h1.setId(3L);
h1.setName("1");
h1.setParent(h);
h11 = new HierarchicalTask();
h11.setId(4L);
h11.setName("11");
h11.setParent(h1);
h.setChildren(Arrays.asList(h0, h1));
h0.setChildren(new ArrayList<HierarchicalTask>());
h1.setChildren(Arrays.asList(h11));
h11.setChildren(new ArrayList<HierarchicalTask>());
hierarchicalTaskRepository.create(h, hierarchicalTaskQuery);
hierarchicalTaskRepository.create(h0, hierarchicalTaskQuery);
hierarchicalTaskRepository.create(h1, hierarchicalTaskQuery);
hierarchicalTaskRepository.create(h11, hierarchicalTaskQuery);
}
use of io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter in project crnk-framework by crnk-project.
the class IncludeLookupSetterInheritanceTest method setup.
@SuppressWarnings({ "rawtypes", "unchecked" })
@Before
public void setup() {
super.setup();
// get repositories
ResourceRepositoryAdapter taskRepository = resourceRegistry.getEntry(Task.class).getResourceRepository(null);
RelationshipRepositoryAdapter relRepositoryTaskToProject = resourceRegistry.getEntry(Task.class).getRelationshipRepository("projects", null);
ResourceRepositoryAdapter projectRepository = resourceRegistry.getEntry(Project.class).getResourceRepository(null);
// setup test data
ResourceInformation taskInfo = resourceRegistry.getEntry(Task.class).getResourceInformation();
ResourceField includedProjectsField = taskInfo.findRelationshipFieldByName("includedProjects");
QueryAdapter emptyProjectQuery = new QuerySpecAdapter(new QuerySpec(Project.class), resourceRegistry);
QueryAdapter emptyTaskQuery = new QuerySpecAdapter(new QuerySpec(Task.class), resourceRegistry);
Project project1 = new Project();
project1.setId(3L);
projectRepository.create(project1, emptyProjectQuery);
FancyProject project2 = new FancyProject();
project2.setId(ProjectRepository.FANCY_PROJECT_ID);
projectRepository.create(project2, emptyProjectQuery);
Task task = new Task();
task.setId(1L);
taskRepository.create(task, emptyTaskQuery);
relRepositoryTaskToProject.addRelations(task, Collections.singletonList(project1.getId()), includedProjectsField, emptyProjectQuery);
relRepositoryTaskToProject.addRelations(task, Collections.singletonList(project2.getId()), includedProjectsField, emptyProjectQuery);
}
use of io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter in project crnk-framework by crnk-project.
the class RegistryEntry method getResourceRepository.
@SuppressWarnings("unchecked")
public ResourceRepositoryAdapter getResourceRepository(RepositoryMethodParameterProvider parameterProvider) {
Object repoInstance = null;
if (resourceEntry instanceof DirectResponseResourceEntry) {
repoInstance = ((DirectResponseResourceEntry) resourceEntry).getResourceRepository();
} else if (resourceEntry instanceof AnnotatedResourceEntry) {
repoInstance = ((AnnotatedResourceEntry) resourceEntry).build(parameterProvider);
}
if (repoInstance instanceof ResourceRegistryAware) {
((ResourceRegistryAware) repoInstance).setResourceRegistry(moduleRegistry.getResourceRegistry());
}
ResourceInformation resourceInformation = getResourceInformation();
return new ResourceRepositoryAdapter(resourceInformation, moduleRegistry, repoInstance);
}
use of io.crnk.core.engine.internal.repository.ResourceRepositoryAdapter 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.internal.repository.ResourceRepositoryAdapter 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);
}
Aggregations