Search in sources :

Example 16 with Node

use of org.hisp.dhis.node.Node in project dhis2-core by dhis2.

the class DimensionController method getItems.

@SuppressWarnings("unchecked")
@GetMapping("/{uid}/items")
@ResponseBody
public RootNode getItems(@PathVariable String uid, @RequestParam Map<String, String> parameters, OrderParams orderParams) throws QueryParserException {
    List<String> fields = newArrayList(contextService.getParameterValues("fields"));
    List<String> filters = newArrayList(contextService.getParameterValues("filter"));
    List<Order> orders = orderParams.getOrders(getSchema(DimensionalItemObject.class));
    WebOptions options = new WebOptions(parameters);
    if (fields.isEmpty()) {
        fields.addAll(Preset.defaultPreset().getFields());
    }
    // This is the base list used in this flow. It contains only items
    // allowed to the current user.
    List<DimensionalItemObject> readableItems = dimensionService.getCanReadDimensionItems(uid);
    // This is needed for two reasons:
    // 1) We are doing in-memory paging;
    // 2) We have to count all items respecting the filtering.
    Query queryForCount = queryService.getQueryFromUrl(DimensionalItemObject.class, filters, orders);
    queryForCount.setObjects(readableItems);
    List<DimensionalItemObject> forCountItems = (List<DimensionalItemObject>) queryService.query(queryForCount);
    Query query = queryService.getQueryFromUrl(DimensionalItemObject.class, filters, orders, getPaginationData(options));
    query.setObjects(readableItems);
    query.setDefaultOrder();
    List<DimensionalItemObject> paginatedItems = (List<DimensionalItemObject>) queryService.query(query);
    RootNode rootNode = NodeUtils.createMetadata();
    CollectionNode collectionNode = rootNode.addChild(fieldFilterService.toCollectionNode(DimensionalItemObject.class, new FieldFilterParams(paginatedItems, fields)));
    collectionNode.setName("items");
    for (Node node : collectionNode.getChildren()) {
        ((AbstractNode) node).setName("item");
    }
    // Adding pagination elements to the root node.
    final int totalOfItems = isNotEmpty(forCountItems) ? forCountItems.size() : 0;
    dimensionItemPageHandler.addPaginationToNodeIfEnabled(rootNode, options, uid, totalOfItems);
    return rootNode;
}
Also used : Order(org.hisp.dhis.query.Order) RootNode(org.hisp.dhis.node.types.RootNode) Query(org.hisp.dhis.query.Query) AbstractNode(org.hisp.dhis.node.AbstractNode) CollectionNode(org.hisp.dhis.node.types.CollectionNode) AbstractNode(org.hisp.dhis.node.AbstractNode) Node(org.hisp.dhis.node.Node) RootNode(org.hisp.dhis.node.types.RootNode) WebOptions(org.hisp.dhis.webapi.webdomain.WebOptions) CollectionNode(org.hisp.dhis.node.types.CollectionNode) DimensionalItemObject(org.hisp.dhis.common.DimensionalItemObject) ArrayList(java.util.ArrayList) Collections.emptyList(java.util.Collections.emptyList) Collectors.toList(java.util.stream.Collectors.toList) List(java.util.List) Lists.newArrayList(com.google.common.collect.Lists.newArrayList) FieldFilterParams(org.hisp.dhis.fieldfilter.FieldFilterParams) GetMapping(org.springframework.web.bind.annotation.GetMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Aggregations

Node (org.hisp.dhis.node.Node)16 CollectionNode (org.hisp.dhis.node.types.CollectionNode)16 SimpleNode (org.hisp.dhis.node.types.SimpleNode)14 ComplexNode (org.hisp.dhis.node.types.ComplexNode)13 RootNode (org.hisp.dhis.node.types.RootNode)11 Query (org.hisp.dhis.query.Query)6 WebOptions (org.hisp.dhis.webapi.webdomain.WebOptions)5 WebMessageException (org.hisp.dhis.dxf2.webmessage.WebMessageException)4 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)4 ArrayList (java.util.ArrayList)3 List (java.util.List)3 IdentifiableObject (org.hisp.dhis.common.IdentifiableObject)3 FieldFilterParams (org.hisp.dhis.fieldfilter.FieldFilterParams)3 AbstractNode (org.hisp.dhis.node.AbstractNode)3 Order (org.hisp.dhis.query.Order)3 Property (org.hisp.dhis.schema.Property)3 JsonNode (com.fasterxml.jackson.databind.JsonNode)2 CsvSchema (com.fasterxml.jackson.dataformat.csv.CsvSchema)2 Enums (com.google.common.base.Enums)2 Joiner (com.google.common.base.Joiner)2