use of io.crnk.client.internal.proxy.ObjectProxy in project crnk-framework by crnk-project.
the class JpaQuerySpecEndToEndTest method testLazyManyRelation.
@Test
public void testLazyManyRelation() throws InstantiationException, IllegalAccessException {
addTestWithManyRelations();
QuerySpec querySpec = new QuerySpec(TestEntity.class);
List<TestEntity> list = testRepo.findAll(querySpec);
Assert.assertEquals(1, list.size());
TestEntity testEntity = list.get(0);
List<RelatedEntity> manyRelatedValues = testEntity.getManyRelatedValues();
Assert.assertNotNull(manyRelatedValues);
ObjectProxy proxy = (ObjectProxy) manyRelatedValues;
Assert.assertFalse(proxy.isLoaded());
Assert.assertEquals(3, manyRelatedValues.size());
for (RelatedEntity relatedEntity : manyRelatedValues) {
Assert.assertNotNull(relatedEntity.getStringValue());
}
}
use of io.crnk.client.internal.proxy.ObjectProxy in project crnk-framework by crnk-project.
the class BasicProxyFactoryTest method testWrappedCollectionProxy.
@Test
public void testWrappedCollectionProxy() {
Collection<Schedule> col = factory.createCollectionProxy(Schedule.class, ScheduleRepository.ScheduleList.class, "http://127.0.0.1:99999");
Assert.assertTrue(col instanceof ScheduleRepository.ScheduleList);
ScheduleRepository.ScheduleList list = (ScheduleRepository.ScheduleList) col;
Assert.assertTrue(list.getWrappedList() instanceof ObjectProxy);
ObjectProxy proxy = (ObjectProxy) list.getWrappedList();
Assert.assertFalse(proxy.isLoaded());
Assert.assertEquals("http://127.0.0.1:99999", proxy.getUrl());
}
use of io.crnk.client.internal.proxy.ObjectProxy in project crnk-framework by crnk-project.
the class AbstractProxiedObjectsClientTest method saveDoesNotTriggerLazyLoad.
@Test
public void saveDoesNotTriggerLazyLoad() {
Schedule schedule = new Schedule();
schedule.setId(1L);
schedule.setName("project");
scheduleRepo.create(schedule);
QuerySpec querySpec = new QuerySpec(Schedule.class);
schedule = scheduleRepo.findOne(1L, querySpec);
Collection<Task> proxiedTasks = schedule.getTasks();
ObjectProxy proxy = (ObjectProxy) proxiedTasks;
Assert.assertFalse(proxy.isLoaded());
// update primitive field
schedule.setName("newValue");
scheduleRepo.save(schedule);
// save should not trigger a load of the relation
Assert.assertFalse(proxy.isLoaded());
Assert.assertSame(proxy, schedule.getTasks());
// data should be saved
schedule = scheduleRepo.findOne(1L, querySpec);
Assert.assertEquals("newValue", schedule.getName());
}
use of io.crnk.client.internal.proxy.ObjectProxy in project crnk-framework by crnk-project.
the class BasicProxyFactoryTest method testCollectionProxy.
@Test
public void testCollectionProxy() {
Collection<Task> col = factory.createCollectionProxy(Task.class, ResourceList.class, "http://127.0.0.1:99999");
Assert.assertTrue(col instanceof ResourceList);
Assert.assertTrue(col instanceof ObjectProxy);
ObjectProxy proxy = (ObjectProxy) col;
Assert.assertFalse(proxy.isLoaded());
Assert.assertEquals("http://127.0.0.1:99999", proxy.getUrl());
}
use of io.crnk.client.internal.proxy.ObjectProxy 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