private Map getAggregate()

in services/src/main/java/org/apache/unomi/services/impl/queries/QueryServiceImpl.java [90:132]


    private Map<String, Long> getAggregate(String itemType, String property, AggregateQuery query, boolean optimizedQuery) {
        if (query != null) {
            // resolve condition
            ParserHelper.resolveConditionType(definitionsService, query.getCondition(), "aggregate on property " + property + " for type " + itemType);

            // resolve aggregate
            BaseAggregate baseAggregate = null;
            if (query.getAggregate() != null) {
                String aggregateType = query.getAggregate().getType();
                if (aggregateType != null) {
                    // try to guess the aggregate type
                    if (aggregateType.equals("date")) {
                        String interval = (String) query.getAggregate().getParameters().get("interval");
                        String format = (String) query.getAggregate().getParameters().get("format");
                        baseAggregate = new DateAggregate(property, interval, format);
                    } else if (aggregateType.equals("dateRange") && query.getAggregate().getDateRanges() != null && !query.getAggregate()
                            .getDateRanges().isEmpty()) {
                        String format = (String) query.getAggregate().getParameters().get("format");
                        baseAggregate = new DateRangeAggregate(query.getAggregate().getProperty(), format, query.getAggregate().getDateRanges());
                    } else if (aggregateType.equals("numericRange") && query.getAggregate().getNumericRanges() != null && !query.getAggregate()
                            .getNumericRanges().isEmpty()) {
                        baseAggregate = new NumericRangeAggregate(query.getAggregate().getProperty(), query.getAggregate().getNumericRanges());
                    } else if (aggregateType.equals("ipRange") && query.getAggregate().ipRanges() != null && !query.getAggregate()
                            .ipRanges().isEmpty()) {
                        baseAggregate = new IpRangeAggregate(query.getAggregate().getProperty(), query.getAggregate().ipRanges());
                    }
                }
            }

            if (baseAggregate == null) {
                baseAggregate = new TermsAggregate(property);
            }

            // fall back on terms aggregate
            if (optimizedQuery) {
                return persistenceService.aggregateWithOptimizedQuery(query.getCondition(), baseAggregate, itemType);
            } else {
                return persistenceService.aggregateQuery(query.getCondition(), baseAggregate, itemType);
            }
        }

        return getAggregate(itemType, property);
    }