Search in sources :

Example 1 with Order

use of org.hisp.dhis.query.Order in project dhis2-core by dhis2.

the class AbstractCrudController method getObjectList.

//--------------------------------------------------------------------------
// GET
//--------------------------------------------------------------------------
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public RootNode getObjectList(@RequestParam Map<String, String> rpParameters, OrderParams orderParams, HttpServletResponse response, HttpServletRequest request, User currentUser) throws QueryParserException {
    List<String> fields = Lists.newArrayList(contextService.getParameterValues("fields"));
    List<String> filters = Lists.newArrayList(contextService.getParameterValues("filter"));
    List<Order> orders = orderParams.getOrders(getSchema());
    if (fields.isEmpty()) {
        fields.addAll(Preset.defaultPreset().getFields());
    }
    WebOptions options = new WebOptions(rpParameters);
    WebMetadata metadata = new WebMetadata();
    if (!aclService.canRead(currentUser, getEntityClass())) {
        throw new ReadAccessDeniedException("You don't have the proper permissions to read objects of this type.");
    }
    List<T> entities = getEntityList(metadata, options, filters, orders);
    Pager pager = metadata.getPager();
    if (options.hasPaging() && pager == null) {
        pager = new Pager(options.getPage(), entities.size(), options.getPageSize());
        entities = PagerUtils.pageCollection(entities, pager);
    }
    postProcessEntities(entities);
    postProcessEntities(entities, options, rpParameters);
    handleLinksAndAccess(entities, fields, false, currentUser);
    linkService.generatePagerLinks(pager, getEntityClass());
    RootNode rootNode = NodeUtils.createMetadata();
    rootNode.getConfig().setInclusionStrategy(getInclusionStrategy(rpParameters.get("inclusionStrategy")));
    if (pager != null) {
        rootNode.addChild(NodeUtils.createPager(pager));
    }
    rootNode.addChild(fieldFilterService.filter(getEntityClass(), entities, fields));
    return rootNode;
}
Also used : Order(org.hisp.dhis.query.Order) RootNode(org.hisp.dhis.node.types.RootNode) Pager(org.hisp.dhis.common.Pager) ReadAccessDeniedException(org.hisp.dhis.hibernate.exception.ReadAccessDeniedException) WebOptions(org.hisp.dhis.webapi.webdomain.WebOptions) WebMetadata(org.hisp.dhis.webapi.webdomain.WebMetadata) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 2 with Order

use of org.hisp.dhis.query.Order in project dhis2-core by dhis2.

the class JdbcEventStore method getOrderQuery.

private String getOrderQuery(List<Order> orders) {
    if (orders != null) {
        ArrayList<String> orderFields = new ArrayList<String>();
        for (Order order : orders) {
            if (QUERY_PARAM_COL_MAP.containsKey(order.getProperty().getName())) {
                String orderText = QUERY_PARAM_COL_MAP.get(order.getProperty().getName());
                orderText += order.isAscending() ? " asc" : " desc";
                orderFields.add(orderText);
            }
        }
        if (!orderFields.isEmpty()) {
            return "order by " + StringUtils.join(orderFields, ',') + " ";
        }
    }
    return "order by psi_lastupdated desc ";
}
Also used : Order(org.hisp.dhis.query.Order) ArrayList(java.util.ArrayList) DateUtils.getMediumDateString(org.hisp.dhis.system.util.DateUtils.getMediumDateString)

Example 3 with Order

use of org.hisp.dhis.query.Order in project dhis2-core by dhis2.

the class DataElementOperandController method getObjectList.

@GetMapping
@SuppressWarnings("unchecked")
@ResponseBody
public RootNode getObjectList(@RequestParam Map<String, String> rpParameters, OrderParams orderParams) throws QueryParserException {
    Schema schema = schemaService.getDynamicSchema(DataElementOperand.class);
    List<String> fields = Lists.newArrayList(contextService.getParameterValues("fields"));
    List<String> filters = Lists.newArrayList(contextService.getParameterValues("filter"));
    List<Order> orders = orderParams.getOrders(schema);
    if (fields.isEmpty()) {
        fields.addAll(Preset.ALL.getFields());
    }
    WebOptions options = new WebOptions(rpParameters);
    WebMetadata metadata = new WebMetadata();
    List<DataElementOperand> dataElementOperands;
    if (options.isTrue("persisted")) {
        dataElementOperands = Lists.newArrayList(manager.getAll(DataElementOperand.class));
    } else {
        boolean totals = options.isTrue("totals");
        String deg = CollectionUtils.popStartsWith(filters, "dataElement.dataElementGroups.id:eq:");
        deg = deg != null ? deg.substring("dataElement.dataElementGroups.id:eq:".length()) : null;
        String ds = options.get("dataSet");
        if (deg != null) {
            DataElementGroup dataElementGroup = manager.get(DataElementGroup.class, deg);
            dataElementOperands = dataElementCategoryService.getOperands(dataElementGroup.getMembers(), totals);
        } else if (ds != null) {
            DataSet dataSet = manager.get(DataSet.class, ds);
            dataElementOperands = dataElementCategoryService.getOperands(dataSet, totals);
        } else {
            List<DataElement> dataElements = new ArrayList<>(manager.getAllSorted(DataElement.class));
            dataElementOperands = dataElementCategoryService.getOperands(dataElements, totals);
        }
    }
    Query query = queryService.getQueryFromUrl(DataElementOperand.class, filters, orders, options.getRootJunction());
    query.setDefaultOrder();
    query.setObjects(dataElementOperands);
    dataElementOperands = (List<DataElementOperand>) queryService.query(query);
    Pager pager = metadata.getPager();
    if (options.hasPaging() && pager == null) {
        pager = new Pager(options.getPage(), dataElementOperands.size(), options.getPageSize());
        linkService.generatePagerLinks(pager, DataElementOperand.class);
        dataElementOperands = PagerUtils.pageCollection(dataElementOperands, pager);
    }
    RootNode rootNode = NodeUtils.createMetadata();
    if (pager != null) {
        rootNode.addChild(NodeUtils.createPager(pager));
    }
    rootNode.addChild(fieldFilterService.filter(DataElementOperand.class, dataElementOperands, fields));
    return rootNode;
}
Also used : Order(org.hisp.dhis.query.Order) DataElementOperand(org.hisp.dhis.dataelement.DataElementOperand) RootNode(org.hisp.dhis.node.types.RootNode) Query(org.hisp.dhis.query.Query) DataSet(org.hisp.dhis.dataset.DataSet) Schema(org.hisp.dhis.schema.Schema) WebOptions(org.hisp.dhis.webapi.webdomain.WebOptions) WebMetadata(org.hisp.dhis.webapi.webdomain.WebMetadata) Pager(org.hisp.dhis.common.Pager) DataElementGroup(org.hisp.dhis.dataelement.DataElementGroup) ArrayList(java.util.ArrayList) List(java.util.List) GetMapping(org.springframework.web.bind.annotation.GetMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 4 with Order

use of org.hisp.dhis.query.Order in project dhis2-core by dhis2.

the class ProgramDataElementController method getObjectList.

@GetMapping
@SuppressWarnings("unchecked")
@ResponseBody
public RootNode getObjectList(@RequestParam Map<String, String> rpParameters, OrderParams orderParams) throws QueryParserException {
    Schema schema = schemaService.getDynamicSchema(ProgramDataElementDimensionItem.class);
    List<String> fields = Lists.newArrayList(contextService.getParameterValues("fields"));
    List<String> filters = Lists.newArrayList(contextService.getParameterValues("filter"));
    List<Order> orders = orderParams.getOrders(schema);
    if (fields.isEmpty()) {
        fields.addAll(Preset.ALL.getFields());
    }
    WebOptions options = new WebOptions(rpParameters);
    WebMetadata metadata = new WebMetadata();
    List<ProgramDataElementDimensionItem> programDataElements;
    Query query = queryService.getQueryFromUrl(ProgramDataElementDimensionItem.class, filters, orders, options.getRootJunction());
    query.setDefaultOrder();
    if (options.contains("program")) {
        String programUid = options.get("program");
        programDataElements = programService.getGeneratedProgramDataElements(programUid);
        query.setObjects(programDataElements);
    }
    programDataElements = (List<ProgramDataElementDimensionItem>) queryService.query(query);
    Pager pager = metadata.getPager();
    if (options.hasPaging() && pager == null) {
        pager = new Pager(options.getPage(), programDataElements.size(), options.getPageSize());
        programDataElements = PagerUtils.pageCollection(programDataElements, pager);
    }
    RootNode rootNode = NodeUtils.createMetadata();
    if (pager != null) {
        rootNode.addChild(NodeUtils.createPager(pager));
    }
    rootNode.addChild(fieldFilterService.filter(ProgramDataElementDimensionItem.class, programDataElements, fields));
    return rootNode;
}
Also used : Order(org.hisp.dhis.query.Order) RootNode(org.hisp.dhis.node.types.RootNode) ProgramDataElementDimensionItem(org.hisp.dhis.program.ProgramDataElementDimensionItem) Query(org.hisp.dhis.query.Query) Schema(org.hisp.dhis.schema.Schema) Pager(org.hisp.dhis.common.Pager) WebOptions(org.hisp.dhis.webapi.webdomain.WebOptions) WebMetadata(org.hisp.dhis.webapi.webdomain.WebMetadata) GetMapping(org.springframework.web.bind.annotation.GetMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 5 with Order

use of org.hisp.dhis.query.Order in project dhis2-core by dhis2.

the class OrderParams method getOrders.

public List<Order> getOrders(Schema schema) {
    Map<String, Order> orders = new LinkedHashMap<>();
    for (String o : order) {
        String[] split = o.split(":");
        //Using ascending as default direction. 
        String direction = "asc";
        if (split.length < 1) {
            continue;
        } else if (split.length == 2) {
            direction = split[1].toLowerCase();
        }
        String propertyName = split[0];
        Property property = schema.getProperty(propertyName);
        if (orders.containsKey(propertyName) || !schema.haveProperty(propertyName) || !validProperty(property) || !validDirection(direction)) {
            continue;
        }
        orders.put(propertyName, Order.from(direction, property));
    }
    return new ArrayList<>(orders.values());
}
Also used : Order(org.hisp.dhis.query.Order) ArrayList(java.util.ArrayList) Property(org.hisp.dhis.schema.Property) LinkedHashMap(java.util.LinkedHashMap)

Aggregations

Order (org.hisp.dhis.query.Order)5 ArrayList (java.util.ArrayList)3 Pager (org.hisp.dhis.common.Pager)3 RootNode (org.hisp.dhis.node.types.RootNode)3 WebMetadata (org.hisp.dhis.webapi.webdomain.WebMetadata)3 WebOptions (org.hisp.dhis.webapi.webdomain.WebOptions)3 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)3 Query (org.hisp.dhis.query.Query)2 Schema (org.hisp.dhis.schema.Schema)2 GetMapping (org.springframework.web.bind.annotation.GetMapping)2 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 DataElementGroup (org.hisp.dhis.dataelement.DataElementGroup)1 DataElementOperand (org.hisp.dhis.dataelement.DataElementOperand)1 DataSet (org.hisp.dhis.dataset.DataSet)1 ReadAccessDeniedException (org.hisp.dhis.hibernate.exception.ReadAccessDeniedException)1 ProgramDataElementDimensionItem (org.hisp.dhis.program.ProgramDataElementDimensionItem)1 Property (org.hisp.dhis.schema.Property)1 DateUtils.getMediumDateString (org.hisp.dhis.system.util.DateUtils.getMediumDateString)1 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)1