Search in sources :

Example 6 with HasId

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;
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) HasId(org.summerb.easycrud.api.dto.HasId) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) ArrayList(java.util.ArrayList) List(java.util.List)

Example 7 with HasId

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);
}
Also used : HasId(org.summerb.easycrud.api.dto.HasId) PropertyDescriptor(java.beans.PropertyDescriptor)

Example 8 with HasId

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());
}
Also used : HasId(org.summerb.easycrud.api.dto.HasId) DataSetLoader(org.summerb.easycrud.api.relations.DataSetLoader) Test(org.junit.Test)

Example 9 with HasId

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());
}
Also used : HasId(org.summerb.easycrud.api.dto.HasId) EasyCrudService(org.summerb.easycrud.api.EasyCrudService) UUID(java.util.UUID) TestDto1(integr.org.summerb.easycrud.TestDto1) Test(org.junit.Test)

Example 10 with HasId

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());
}
Also used : HasId(org.summerb.easycrud.api.dto.HasId) EasyCrudService(org.summerb.easycrud.api.EasyCrudService) Query(org.summerb.easycrud.api.query.Query) PagerParams(org.summerb.easycrud.api.dto.PagerParams) PaginatedList(org.summerb.easycrud.api.dto.PaginatedList) TestDto1(integr.org.summerb.easycrud.TestDto1) Test(org.junit.Test)

Aggregations

HasId (org.summerb.easycrud.api.dto.HasId)20 EasyCrudService (org.summerb.easycrud.api.EasyCrudService)9 Test (org.junit.Test)7 ArrayList (java.util.ArrayList)5 List (java.util.List)5 PaginatedList (org.summerb.easycrud.api.dto.PaginatedList)5 Ref (org.summerb.easycrud.api.dto.relations.Ref)5 TestDto1 (integr.org.summerb.easycrud.TestDto1)4 LinkedList (java.util.LinkedList)4 DataSet (org.summerb.easycrud.api.dto.datapackage.DataSet)4 Query (org.summerb.easycrud.api.query.Query)4 ParameterizedType (java.lang.reflect.ParameterizedType)3 Type (java.lang.reflect.Type)3 HashMap (java.util.HashMap)3 HashSet (java.util.HashSet)3 Set (java.util.Set)3 DataTable (org.summerb.easycrud.api.dto.datapackage.DataTable)3 DataSetLoader (org.summerb.easycrud.api.relations.DataSetLoader)3 PropertyDescriptor (java.beans.PropertyDescriptor)2 PropertyAccessor (org.springframework.beans.PropertyAccessor)2