Search in sources :

Example 21 with DefaultResourceList

use of io.crnk.core.resource.list.DefaultResourceList in project crnk-framework by crnk-project.

the class ClientStubBase method toResourceResponse.

private static Object toResourceResponse(Document document, ObjectMapper objectMapper) {
    Object data = document.getData().get();
    if (data instanceof List) {
        DefaultResourceList<Resource> list = new DefaultResourceList<>();
        list.addAll((List<Resource>) data);
        if (document.getMeta() != null) {
            list.setMeta(new JsonMetaInformation(document.getMeta(), objectMapper));
        }
        if (document.getLinks() != null) {
            list.setLinks(new JsonLinksInformation(document.getMeta(), objectMapper));
        }
        return list;
    } else {
        return data;
    }
}
Also used : JsonLinksInformation(io.crnk.client.response.JsonLinksInformation) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) JsonMetaInformation(io.crnk.client.response.JsonMetaInformation) Resource(io.crnk.core.engine.document.Resource) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) List(java.util.List)

Example 22 with DefaultResourceList

use of io.crnk.core.resource.list.DefaultResourceList in project crnk-framework by crnk-project.

the class GetFromOwnerStrategy method toResult.

private MultivaluedMap<I, D> toResult(ResourceField field, ResourceInformation targetInformation, List sources, List<D> targets) {
    MultivaluedMap bulkResult = new MultivaluedMap<I, D>() {

        @Override
        protected List<D> newList() {
            return new DefaultResourceList<>();
        }
    };
    Map targetMap = new HashMap();
    for (D target : targets) {
        Object targetId = targetInformation.getId(target);
        targetMap.put(targetId, target);
    }
    for (Object source : sources) {
        Object sourceId = field.getParentResourceInformation().getId(source);
        Object targetId = field.getIdAccessor().getValue(source);
        if (field.isCollection()) {
            for (Object targetElementId : (Collection) targetId) {
                addResult(bulkResult, field, sourceId, targetElementId, targetMap);
            }
        } else if (targetId != null) {
            addResult(bulkResult, field, sourceId, targetId, targetMap);
        } else {
            bulkResult.add(sourceId, null);
        }
    }
    return bulkResult;
}
Also used : DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) HashMap(java.util.HashMap) Collection(java.util.Collection) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) HashMap(java.util.HashMap) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) Map(java.util.Map)

Example 23 with DefaultResourceList

use of io.crnk.core.resource.list.DefaultResourceList in project crnk-framework by crnk-project.

the class ImplicitOwnerBasedRelationshipRepository method toResult.

private MultivaluedMap<I, D> toResult(String fieldName, ResourceInformation targetInformation, List sources, List<D> targets) {
    RegistryEntry sourceEntry = getSourceEntry();
    ResourceInformation sourceInformation = sourceEntry.getResourceInformation();
    ResourceField field = sourceInformation.findFieldByUnderlyingName(fieldName);
    MultivaluedMap bulkResult = new MultivaluedMap<I, D>() {

        @Override
        protected List<D> newList() {
            return new DefaultResourceList<>();
        }
    };
    Map targetMap = new HashMap();
    for (D target : targets) {
        Object targetId = targetInformation.getId(target);
        targetMap.put(targetId, target);
    }
    for (Object source : sources) {
        Object sourceId = sourceInformation.getId(source);
        Object targetId = field.getIdAccessor().getValue(source);
        if (field.isCollection()) {
            for (Object targetElementId : (Collection) targetId) {
                addResult(bulkResult, field, sourceId, targetElementId, targetMap);
            }
        } else if (targetId != null) {
            addResult(bulkResult, field, sourceId, targetId, targetMap);
        } else {
            bulkResult.add(sourceId, null);
        }
    }
    return bulkResult;
}
Also used : ResourceField(io.crnk.core.engine.information.resource.ResourceField) ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) HashMap(java.util.HashMap) Collection(java.util.Collection) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) RegistryEntry(io.crnk.core.engine.registry.RegistryEntry) HashMap(java.util.HashMap) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) Map(java.util.Map)

Example 24 with DefaultResourceList

use of io.crnk.core.resource.list.DefaultResourceList in project crnk-framework by crnk-project.

the class ImplicitOwnerBasedRelationshipRepository method findTargets.

@SuppressWarnings("unchecked")
public MultivaluedMap<I, D> findTargets(Iterable<I> sourceIds, String fieldName, QuerySpec querySpec) {
    RegistryEntry sourceEntry = getSourceEntry();
    ResourceInformation sourceInformation = sourceEntry.getResourceInformation();
    ResourceField field = sourceInformation.findFieldByUnderlyingName(fieldName);
    List sources = (List) sourceEntry.getResourceRepository().findAll(sourceIds, getSaveQueryAdapter(fieldName)).getEntity();
    ResourceInformation targetInformation = getTargetInformation(field);
    List<D> targets;
    if (field.hasIdField()) {
        Set targetIds = new HashSet();
        for (Object source : sources) {
            Object targetId = field.getIdAccessor().getValue(source);
            if (field.isCollection()) {
                targetIds.addAll((Collection) targetId);
            } else {
                targetIds.add(targetId);
            }
        }
        QuerySpec idQuerySpec = new QuerySpec(targetInformation);
        ResourceRepositoryAdapter<D, J> targetAdapter = getTargetEntry(field).getResourceRepository();
        JsonApiResponse response = targetAdapter.findAll(targetIds, new QuerySpecAdapter(idQuerySpec, resourceRegistry));
        targets = (List<D>) response.getEntity();
        return toResult(fieldName, targetInformation, sources, targets);
    } else {
        MultivaluedMap bulkResult = new MultivaluedMap<I, D>() {

            @Override
            protected List<D> newList() {
                return new DefaultResourceList<>();
            }
        };
        for (Object source : sources) {
            Object sourceId = sourceInformation.getId(source);
            Object target = field.getAccessor().getValue(source);
            if (target != null) {
                if (field.isCollection()) {
                    bulkResult.addAll(sourceId, (Collection) target);
                } else {
                    bulkResult.add(sourceId, target);
                }
            }
        }
        return bulkResult;
    }
}
Also used : ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) Set(java.util.Set) HashSet(java.util.HashSet) QuerySpecAdapter(io.crnk.core.queryspec.internal.QuerySpecAdapter) RegistryEntry(io.crnk.core.engine.registry.RegistryEntry) ResourceField(io.crnk.core.engine.information.resource.ResourceField) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) List(java.util.List) JsonApiResponse(io.crnk.core.repository.response.JsonApiResponse) QuerySpec(io.crnk.core.queryspec.QuerySpec) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) HashSet(java.util.HashSet)

Example 25 with DefaultResourceList

use of io.crnk.core.resource.list.DefaultResourceList in project crnk-framework by crnk-project.

the class GetFromOppositeStrategy method findTargets.

@SuppressWarnings("unchecked")
public MultivaluedMap<I, D> findTargets(Iterable<I> sourceIds, String fieldName, QuerySpec querySpec) {
    RegistryEntry sourceEntry = context.getSourceEntry();
    ResourceInformation sourceInformation = sourceEntry.getResourceInformation();
    ResourceField field = sourceInformation.findFieldByUnderlyingName(fieldName);
    RegistryEntry targetEntry = context.getTargetEntry(field);
    ResourceInformation targetInformation = targetEntry.getResourceInformation();
    ResourceField oppositeField = Objects.requireNonNull(targetInformation.findFieldByUnderlyingName(field.getOppositeName()));
    QuerySpec idQuerySpec = querySpec.duplicate();
    idQuerySpec.addFilter(new FilterSpec(Arrays.asList(oppositeField.getUnderlyingName(), sourceInformation.getIdField().getUnderlyingName()), FilterOperator.EQ, sourceIds));
    idQuerySpec.includeRelation(Arrays.asList(oppositeField.getUnderlyingName()));
    ResourceRepositoryAdapter<D, J> targetAdapter = targetEntry.getResourceRepository();
    JsonApiResponse response = targetAdapter.findAll(context.createQueryAdapter(idQuerySpec));
    Collection<D> results = (Collection<D>) response.getEntity();
    MultivaluedMap<I, D> bulkResult = new MultivaluedMap<I, D>() {

        @Override
        protected List<D> newList() {
            return new DefaultResourceList<>();
        }
    };
    Set<I> sourceIdSet = new HashSet<>();
    for (I sourceId : sourceIds) {
        sourceIdSet.add(sourceId);
    }
    for (D result : results) {
        handleTarget(bulkResult, result, sourceIdSet, oppositeField, sourceInformation);
    }
    return bulkResult;
}
Also used : ResourceInformation(io.crnk.core.engine.information.resource.ResourceInformation) FilterSpec(io.crnk.core.queryspec.FilterSpec) RegistryEntry(io.crnk.core.engine.registry.RegistryEntry) ResourceField(io.crnk.core.engine.information.resource.ResourceField) DefaultResourceList(io.crnk.core.resource.list.DefaultResourceList) Collection(java.util.Collection) JsonApiResponse(io.crnk.core.repository.response.JsonApiResponse) QuerySpec(io.crnk.core.queryspec.QuerySpec) MultivaluedMap(io.crnk.core.engine.internal.utils.MultivaluedMap) HashSet(java.util.HashSet)

Aggregations

DefaultResourceList (io.crnk.core.resource.list.DefaultResourceList)26 Task (io.crnk.core.mock.models.Task)7 ResourceInformation (io.crnk.core.engine.information.resource.ResourceInformation)6 MultivaluedMap (io.crnk.core.engine.internal.utils.MultivaluedMap)6 ResourceField (io.crnk.core.engine.information.resource.ResourceField)5 RegistryEntry (io.crnk.core.engine.registry.RegistryEntry)5 QuerySpec (io.crnk.core.queryspec.QuerySpec)5 JsonApiResponse (io.crnk.core.repository.response.JsonApiResponse)4 DefaultHasMoreResourcesMetaInformation (io.crnk.core.resource.meta.DefaultHasMoreResourcesMetaInformation)4 Collection (java.util.Collection)4 HashSet (java.util.HashSet)4 List (java.util.List)4 Test (org.junit.Test)4 QuerySpecAdapter (io.crnk.core.queryspec.internal.QuerySpecAdapter)3 ResourceList (io.crnk.core.resource.list.ResourceList)3 JsonLinksInformation (io.crnk.client.response.JsonLinksInformation)2 JsonMetaInformation (io.crnk.client.response.JsonMetaInformation)2 Resource (io.crnk.core.engine.document.Resource)2 ModuleRegistry (io.crnk.core.module.ModuleRegistry)2 FilterSpec (io.crnk.core.queryspec.FilterSpec)2