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);
}