use of org.summerb.easycrud.api.dto.HasId in project summerb by skarpushin.
the class DomLoaderImpl method resolveCollectionElementType.
protected <TId, TRowClass extends HasId<TId>, TDomClass extends TRowClass> Class<TDomClass> resolveCollectionElementType(PropertyDescriptor pd) {
Class<?> propertyDomType = pd.getPropertyType();
Preconditions.checkArgument(List.class.isAssignableFrom(propertyDomType), "When it's a oneToMany field is expected to be of type List<TDomType>");
// TBD: Support Set<> and Map<>
Type returnType = pd.getReadMethod().getGenericReturnType();
Preconditions.checkArgument(returnType instanceof ParameterizedType, "Proprty supposed to be of parameterized type, i.e. List<User>. Check %s", pd.getName());
ParameterizedType pt = (ParameterizedType) returnType;
Type[] typeArgs = pt.getActualTypeArguments();
Preconditions.checkArgument(typeArgs != null && typeArgs.length == 1, "Expect exactly one type parameter for this oneToMany relation");
Type retType = typeArgs[0];
Preconditions.checkArgument(retType instanceof Class, "Unexpected failure, Type %s cannot be cast to Class", retType.getTypeName());
@SuppressWarnings("unchecked") Class<TDomClass> retClass = (Class<TDomClass>) retType;
Preconditions.checkArgument(HasId.class.isAssignableFrom(retClass), "DOM's class (%s) supposed to implement org.summerb.easycrud.api.dto, but it's not", retClass);
return retClass;
}
use of org.summerb.easycrud.api.dto.HasId in project summerb by skarpushin.
the class DomLoaderImpl method resolveSingleRef.
@SuppressWarnings({ "unchecked", "rawtypes" })
private <TId, TRowClass extends HasId<TId>, TDomClass extends TRowClass> void resolveSingleRef(TDomClass dom, Pair<Ref, PropertyDescriptor> domField, Map<String, Ref> refs, DataSet ds, Map<EntityAndId, HasId> cache) throws IllegalAccessException, InvocationTargetException {
Preconditions.checkArgument(HasId.class.isAssignableFrom(domField.getValue().getPropertyType()), "DOM's class (%s) supposed to implement org.summerb.easycrud.api.dto, but it's not", domField.getValue().getPropertyType());
PropertyDescriptor referenceeIdProp = BeanUtils.getPropertyDescriptor(dom.getClass(), domField.getKey().getFromField());
Preconditions.checkState(referenceeIdProp != null, "can't resolve referencer fk id field %s", domField.getKey().getFromField());
Object referenceeId = referenceeIdProp.getReadMethod().invoke(dom);
if (referenceeId == null) {
return;
}
HasId dto = ds.get(domField.getKey().getToEntity()).find(referenceeId);
Preconditions.checkState(dto != null, "Reference %s was supposed to be resolved, but referenced object %s wasn't loaded by id %s", domField.getKey().getName(), domField.getKey().getToEntity(), referenceeId);
Class<HasId> referenceeClass = (Class<HasId>) domField.getValue().getPropertyType();
Function<HasId, HasId> mapper = mapDtoToDom(domField.getKey().getToEntity(), referenceeClass, refs, ds, cache);
HasId referenceeDom = mapper.apply(dto);
domField.getValue().getWriteMethod().invoke(dom, referenceeDom);
}
use of org.summerb.easycrud.api.dto.HasId in project summerb by skarpushin.
the class DataSetLoaderTest method testLoadObjectsByIds_ExpectOneLoadedOk.
@Test
public void testLoadObjectsByIds_ExpectOneLoadedOk() throws EntityNotFoundException, NotAuthorizedException, FieldValidationException {
DataSetLoader loader = buildLoaderCase1();
TestDto2 d2i1 = new TestDto2();
d2i1.setEnv("d2i1");
d2i1.setLinkToFullDonwload("asdad");
d2i1 = testDto2Service.create(d2i1);
List<HasId> result = loader.loadObjectsByIds(ids(d2i1), testDto2Service.getEntityTypeMessageCode());
assertNotNull(result);
assertEquals(1, result.size());
}
use of org.summerb.easycrud.api.dto.HasId in project summerb by skarpushin.
the class DataSetLoaderImplTest method testLoadObjectsByIds_ExpectManyLoadByUnknownType.
@Test
public void testLoadObjectsByIds_ExpectManyLoadByUnknownType() throws Exception {
DataSetLoaderImpl fixture = buildMockedInstance();
EasyCrudService service = Mockito.mock(EasyCrudService.class);
when(fixture.getEasyCrudServiceResolver().resolveByEntityType("dto1")).thenReturn(service);
UUID d1 = UUID.randomUUID();
UUID d2 = UUID.randomUUID();
when(service.findById(d1)).thenReturn(new TestDto1());
when(service.findById(d2)).thenReturn(new TestDto1());
List<HasId> ret = fixture.loadObjectsByIds(ids(d1, d2), "dto1");
assertNotNull(ret);
assertEquals(2, ret.size());
}
use of org.summerb.easycrud.api.dto.HasId in project summerb by skarpushin.
the class DataSetLoaderImplTest method testLoadObjectsByIds_ExpectManyLoadByStrings.
@Test
public void testLoadObjectsByIds_ExpectManyLoadByStrings() throws Exception {
DataSetLoaderImpl fixture = buildMockedInstance();
EasyCrudService service = Mockito.mock(EasyCrudService.class);
when(fixture.getEasyCrudServiceResolver().resolveByEntityType("dto1")).thenReturn(service);
Matcher<Query> matcher = IsEqual.equalTo(Query.n().in(HasId.FN_ID, new String[] { "s1", "s2" }));
PaginatedList mockret = new PaginatedList<>(new PagerParams(), Arrays.asList(new TestDto1(), new TestDto1()), 2);
when(service.query(any(PagerParams.class), argThat(matcher))).thenReturn(mockret);
List<HasId> ret = fixture.loadObjectsByIds(ids("s1", "s2"), "dto1");
assertNotNull(ret);
assertEquals(2, ret.size());
}
Aggregations