use of io.crnk.core.repository.foward.ForwardingRelationshipRepository in project crnk-framework by crnk-project.
the class DefaultRegistryEntryBuilder method setupImplicitRelationshipRepository.
private ResponseRelationshipEntry setupImplicitRelationshipRepository(ResourceField relationshipField) {
RelationshipRepositoryBehavior behavior = relationshipField.getRelationshipRepositoryBehavior();
if (behavior == RelationshipRepositoryBehavior.DEFAULT) {
if (relationshipField.hasIdField() || relationshipField.getLookupIncludeAutomatically() == LookupIncludeBehavior.NONE) {
behavior = RelationshipRepositoryBehavior.FORWARD_OWNER;
} else {
behavior = RelationshipRepositoryBehavior.CUSTOM;
}
}
if (behavior == RelationshipRepositoryBehavior.IMPLICIT_FROM_OWNER) {
behavior = RelationshipRepositoryBehavior.FORWARD_OWNER;
}
if (behavior == RelationshipRepositoryBehavior.IMPLICIT_GET_OPPOSITE_MODIFY_OWNER) {
behavior = RelationshipRepositoryBehavior.FORWARD_GET_OPPOSITE_SET_OWNER;
}
if (behavior != RelationshipRepositoryBehavior.CUSTOM) {
ResourceInformation sourceInformation = relationshipField.getParentResourceInformation();
ResourceFieldAccess fieldAccess = relationshipField.getAccess();
RepositoryMethodAccess access = new RepositoryMethodAccess(fieldAccess.isPostable(), fieldAccess.isPatchable(), fieldAccess.isReadable(), fieldAccess.isPatchable());
RelationshipMatcher matcher = new RelationshipMatcher().rule().field(relationshipField).add();
RelationshipRepositoryInformationImpl implicitRepoInformation = new RelationshipRepositoryInformationImpl(matcher, access);
ForwardingRelationshipRepository repository;
if (behavior == RelationshipRepositoryBehavior.FORWARD_OWNER) {
repository = new ForwardingRelationshipRepository(sourceInformation.getResourceType(), matcher, ForwardingDirection.OWNER, ForwardingDirection.OWNER);
} else if (behavior == RelationshipRepositoryBehavior.FORWARD_GET_OPPOSITE_SET_OWNER) {
repository = new ForwardingRelationshipRepository(sourceInformation.getResourceType(), matcher, ForwardingDirection.OPPOSITE, ForwardingDirection.OWNER);
} else {
PreconditionUtil.assertEquals("unknown behavior", RelationshipRepositoryBehavior.FORWARD_OPPOSITE, behavior);
repository = new ForwardingRelationshipRepository(sourceInformation.getResourceType(), matcher, ForwardingDirection.OPPOSITE, ForwardingDirection.OPPOSITE);
}
repository.setResourceRegistry(moduleRegistry.getResourceRegistry());
return setupRelationship(relationshipField, implicitRepoInformation, repository);
} else {
return null;
}
}
use of io.crnk.core.repository.foward.ForwardingRelationshipRepository in project crnk-framework by crnk-project.
the class OppositeFowardingRelationshipRepositoryTest method checkFindOneTargetFromCollection.
@Test
public void checkFindOneTargetFromCollection() {
TaskRepository taskRepository = new TaskRepository();
Task task = new Task();
task.setId(13L);
task.setName("task");
taskRepository.save(task);
ProjectRepository projectRepository = new ProjectRepository();
Project project = new Project();
project.setId(42L);
project.setName("project");
project.setTasks(Arrays.asList(task));
projectRepository.save(project);
relRepository = new ForwardingRelationshipRepository(Task.class, null, ForwardingDirection.OPPOSITE, ForwardingDirection.OPPOSITE);
relRepository.setResourceRegistry(resourceRegistry);
QuerySpec querySpec = new QuerySpec(Task.class);
Project foundProject = (Project) relRepository.findOneTarget(13L, "project", querySpec);
Assert.assertEquals(42L, foundProject.getId().longValue());
}
use of io.crnk.core.repository.foward.ForwardingRelationshipRepository in project crnk-framework by crnk-project.
the class OppositeFowardingRelationshipRepositoryTest method checkFindTargetWithNotLoadedRelationship.
@Test
public void checkFindTargetWithNotLoadedRelationship() {
TaskRepository taskRepository = new TaskRepository();
Task task = new Task();
task.setId(13L);
task.setName("task");
taskRepository.save(task);
ProjectRepository projectRepository = new ProjectRepository();
Project project = new Project();
project.setId(42L);
project.setName("project");
project.setTasks(null);
projectRepository.save(project);
relRepository = new ForwardingRelationshipRepository(Task.class, null, ForwardingDirection.OPPOSITE, ForwardingDirection.OPPOSITE);
relRepository.setResourceRegistry(resourceRegistry);
QuerySpec querySpec = new QuerySpec(Task.class);
try {
relRepository.findOneTarget(13L, "project", querySpec);
Assert.fail();
} catch (IllegalStateException e) {
Assert.assertTrue(e.getMessage().contains("field tasks is null for"));
}
}
use of io.crnk.core.repository.foward.ForwardingRelationshipRepository in project crnk-framework by crnk-project.
the class OppositeFowardingRelationshipRepositoryTest method checkFindTargetWithInvalidNullReturnId.
@Test
public void checkFindTargetWithInvalidNullReturnId() {
TaskRepository taskRepository = new TaskRepository();
Task task = new Task();
task.setId(13L);
task.setName("task");
taskRepository.save(task);
ProjectRepository projectRepository = new ProjectRepository();
Project project = new Project();
project.setId(42L);
project.setName("project");
project.setTasks(Arrays.asList(task));
projectRepository.save(project);
// manipulate
task.setId(null);
relRepository = new ForwardingRelationshipRepository(Task.class, null, ForwardingDirection.OPPOSITE, ForwardingDirection.OPPOSITE);
relRepository.setResourceRegistry(resourceRegistry);
QuerySpec querySpec = new QuerySpec(Task.class);
try {
relRepository.findOneTarget(13L, "project", querySpec);
Assert.fail();
} catch (IllegalStateException e) {
Assert.assertTrue(e.getMessage().contains("id is null"));
}
}
use of io.crnk.core.repository.foward.ForwardingRelationshipRepository in project crnk-framework by crnk-project.
the class OppositeFowardingRelationshipRepositoryTest method checkFindTargetWithNullRelationshipValue.
@Test
public void checkFindTargetWithNullRelationshipValue() {
TaskRepository taskRepository = new TaskRepository();
Task task = new Task();
task.setId(13L);
task.setName("task");
taskRepository.save(task);
Task nullIdTask = new Task();
ProjectRepository projectRepository = new ProjectRepository();
Project project = new Project();
project.setId(42L);
project.setName("project");
project.setTasks(Arrays.asList(nullIdTask));
projectRepository.save(project);
relRepository = new ForwardingRelationshipRepository(Task.class, null, ForwardingDirection.OPPOSITE, ForwardingDirection.OPPOSITE);
relRepository.setResourceRegistry(resourceRegistry);
QuerySpec querySpec = new QuerySpec(Task.class);
try {
relRepository.findOneTarget(13L, "project", querySpec);
Assert.fail();
} catch (IllegalStateException e) {
Assert.assertTrue(e.getMessage().contains("id is null for"));
}
}
Aggregations