Search in sources :

Example 1 with Query

use of org.summerb.easycrud.api.query.Query in project summerb by skarpushin.

the class DataSetLoaderImpl method loadOneToManyReferences.

private EntityTypeToObjectsMap loadOneToManyReferences(Map<Ref, Set<Object>> refToReferencersIds) throws NotAuthorizedException {
    Multimap<String, Entry<Ref, Set<Object>>> targetEntityToRef = HashMultimap.create();
    for (Entry<Ref, Set<Object>> entry : refToReferencersIds.entrySet()) {
        targetEntityToRef.put(entry.getKey().getToEntity(), entry);
    }
    EntityTypeToObjectsMap ret = new EntityTypeToObjectsMap();
    for (String entityTypeCode : targetEntityToRef.keySet()) {
        Collection<Entry<Ref, Set<Object>>> entries = targetEntityToRef.get(entityTypeCode);
        List<Query> queries = new ArrayList<>(entries.size());
        for (Entry<Ref, Set<Object>> entry : entries) {
            Set<Object> ids = entry.getValue();
            Ref ref = entry.getKey();
            Object firstId = ids.iterator().next();
            if (firstId instanceof Long) {
                queries.add(Query.n().in(ref.getToField(), ids.toArray(new Long[0])));
            } else if (firstId instanceof String) {
                queries.add(Query.n().in(ref.getToField(), ids.toArray(new String[0])));
            } else {
                throw new IllegalStateException("such id type is not supported: " + firstId.getClass());
            }
        }
        Query q = queries.size() == 1 ? queries.get(0) : Query.n().or(queries.toArray(new Query[0]));
        EasyCrudService service = easyCrudServiceResolver.resolveByEntityType(entityTypeCode);
        PaginatedList<HasId> results = service.query(PagerParams.ALL, q);
        ret.put(entityTypeCode, new ArrayList<>(results.getItems()));
    }
    return ret;
}
Also used : HashSet(java.util.HashSet) Set(java.util.Set) DataSet(org.summerb.easycrud.api.dto.datapackage.DataSet) Query(org.summerb.easycrud.api.query.Query) ArrayList(java.util.ArrayList) HasId(org.summerb.easycrud.api.dto.HasId) Entry(java.util.Map.Entry) Ref(org.summerb.easycrud.api.dto.relations.Ref) EasyCrudService(org.summerb.easycrud.api.EasyCrudService)

Example 2 with Query

use of org.summerb.easycrud.api.query.Query in project summerb by skarpushin.

the class EasyCrudM2mServiceImpl method removeReferencee.

@Override
public void removeReferencee(T1Id referencerId, T2Id referenceeId) throws NotAuthorizedException {
    try {
        Query q = Query.n();
        addEqQuery(ManyToManyDto.FN_SRC, referencerId, q);
        addEqQuery(ManyToManyDto.FN_DST, referenceeId, q);
        ManyToManyDto<T1Id, T2Id> pair = findOneByQuery(q);
        try {
            if (pair == null) {
                throw new GenericEntityNotFoundException(getEntityTypeMessageCode(), "" + referencerId + "<->" + referenceeId);
            }
            deleteById(pair.getId());
        } catch (EntityNotFoundException e) {
        // that's ok, we wanted it to not exist, it's not there. This
        // state
        // is acceptable
        }
    } catch (Throwable t) {
        Throwables.throwIfInstanceOf(t, NotAuthorizedException.class);
        throw new RuntimeException("Failed to remove reference from " + serviceFrom.getEntityTypeMessageCode() + " identified by " + referencerId + " to " + serviceTo.getEntityTypeMessageCode() + " identified by " + referenceeId, t);
    }
}
Also used : Query(org.summerb.easycrud.api.query.Query) GenericEntityNotFoundException(org.summerb.easycrud.api.exceptions.GenericEntityNotFoundException) GenericEntityNotFoundException(org.summerb.easycrud.api.exceptions.GenericEntityNotFoundException) EntityNotFoundException(org.summerb.easycrud.api.exceptions.EntityNotFoundException) NotAuthorizedException(org.summerb.security.api.exceptions.NotAuthorizedException)

Example 3 with Query

use of org.summerb.easycrud.api.query.Query in project summerb by skarpushin.

the class EasyCrudM2mServiceImpl method findReferenceeByReferencers.

@Override
public Map<T1Id, List<T2Dto>> findReferenceeByReferencers(Set<T1Id> referencerIds) {
    try {
        Preconditions.checkArgument(!CollectionUtils.isEmpty(referencerIds), "referencerId is required");
        Query q = buildQueryToFindReferenceeByReferencerId(referencerIds);
        List<ManyToManyDto<T1Id, T2Id>> m2mPairs = query(PagerParams.ALL, q).getItems();
        if (m2mPairs.size() == 0) {
            // Q: Should we fill key set with null (or empty lists)??...
            return Collections.emptyMap();
        }
        Set<T2Id> referenceeIds = collectReferenceeIds(m2mPairs);
        List<T2Dto> referencee = serviceTo.query(PagerParams.ALL, buildQueryToFindObjectsByIds(referenceeIds)).getItems();
        Map<T1Id, List<T2Dto>> ret = buildResultForFindReferenceeByReferencer(m2mPairs, referencee);
        return ret;
    } catch (Throwable t) {
        throw new RuntimeException("Failed to find " + serviceTo.getEntityTypeMessageCode() + " refernced by " + serviceFrom.getEntityTypeMessageCode() + " identified by " + Arrays.toString(referencerIds.toArray()), t);
    }
}
Also used : ManyToManyDto(org.summerb.easycrud.api.dto.relations.ManyToManyDto) Query(org.summerb.easycrud.api.query.Query) ArrayList(java.util.ArrayList) List(java.util.List)

Example 4 with Query

use of org.summerb.easycrud.api.query.Query in project summerb by skarpushin.

the class EasyCrudM2mServiceImpl method buildQueryToFindObjectsByIds.

private Query buildQueryToFindObjectsByIds(Set<T2Id> referenceeIds) {
    T2Id referenceeId = referenceeIds.iterator().next();
    Query q;
    if (referenceeId instanceof String) {
        q = Query.n().in(ManyToManyDto.FN_ID, referenceeIds.toArray(new String[0]));
    } else if (referenceeId instanceof Long) {
        q = Query.n().in(ManyToManyDto.FN_ID, referenceeIds.toArray(new Long[0]));
    } else {
        throw new RuntimeException("Unsupported type if Id = " + referenceeId.getClass());
    }
    return q;
}
Also used : Query(org.summerb.easycrud.api.query.Query)

Example 5 with Query

use of org.summerb.easycrud.api.query.Query 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

Query (org.summerb.easycrud.api.query.Query)14 EasyCrudService (org.summerb.easycrud.api.EasyCrudService)4 HasId (org.summerb.easycrud.api.dto.HasId)4 ArrayList (java.util.ArrayList)3 PaginatedList (org.summerb.easycrud.api.dto.PaginatedList)3 TestDto1 (integr.org.summerb.easycrud.TestDto1)2 List (java.util.List)2 Test (org.junit.Test)2 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)2 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)2 PagerParams (org.summerb.easycrud.api.dto.PagerParams)2 ManyToManyDto (org.summerb.easycrud.api.dto.relations.ManyToManyDto)2 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 Entry (java.util.Map.Entry)1 Set (java.util.Set)1 PostMapping (org.springframework.web.bind.annotation.PostMapping)1 DataSet (org.summerb.easycrud.api.dto.datapackage.DataSet)1 Ref (org.summerb.easycrud.api.dto.relations.Ref)1 EntityNotFoundException (org.summerb.easycrud.api.exceptions.EntityNotFoundException)1