use of com.haulmont.cuba.gui.data.aggregation.AggregationStrategy in project cuba by cuba-platform.
the class AggregatableDelegate method doPropertyAggregation.
@SuppressWarnings("unchecked")
protected Object doPropertyAggregation(AggregationInfo aggregationInfo, Collection<K> itemIds) {
List items = valuesByProperty(aggregationInfo.getPropertyPath(), itemIds);
if (aggregationInfo.getStrategy() == null) {
Class rangeJavaClass = aggregationInfo.getPropertyPath().getRangeJavaClass();
Aggregation aggregation = Aggregations.get(rangeJavaClass);
switch(aggregationInfo.getType()) {
case COUNT:
return aggregation.count(items);
case AVG:
return aggregation.avg(items);
case MAX:
return aggregation.max(items);
case MIN:
return aggregation.min(items);
case SUM:
return aggregation.sum(items);
default:
throw new IllegalArgumentException(String.format("Unknown aggregation type: %s", aggregationInfo.getType()));
}
} else {
AggregationStrategy strategy = aggregationInfo.getStrategy();
return strategy.aggregate(items);
}
}
use of com.haulmont.cuba.gui.data.aggregation.AggregationStrategy in project cuba by cuba-platform.
the class AbstractTableLoader method loadAggregation.
protected void loadAggregation(Table.Column column, Element columnElement) {
Element aggregationElement = columnElement.element("aggregation");
if (aggregationElement != null) {
final AggregationInfo aggregation = new AggregationInfo();
aggregation.setPropertyPath((MetaPropertyPath) column.getId());
String aggregationType = aggregationElement.attributeValue("type");
if (StringUtils.isNotEmpty(aggregationType)) {
aggregation.setType(AggregationInfo.Type.valueOf(aggregationType));
}
String valueDescription = aggregationElement.attributeValue("valueDescription");
if (StringUtils.isNotEmpty(valueDescription)) {
column.setValueDescription(loadResourceString(valueDescription));
}
Formatter formatter = loadFormatter(aggregationElement);
aggregation.setFormatter(formatter == null ? column.getFormatter() : formatter);
column.setAggregation(aggregation);
String strategyClass = aggregationElement.attributeValue("strategyClass");
if (StringUtils.isNotEmpty(strategyClass)) {
Class<?> aggregationClass = scripting.loadClass(strategyClass);
if (aggregationClass == null) {
throw new GuiDevelopmentException(String.format("Class %s is not found", strategyClass), context.getFullFrameId());
}
try {
AggregationStrategy customStrategy = (AggregationStrategy) aggregationClass.newInstance();
aggregation.setStrategy(customStrategy);
} catch (Exception e) {
throw new RuntimeException("Unable to instantiate strategy for aggregation", e);
}
}
if (aggregationType == null && strategyClass == null) {
throw new GuiDevelopmentException("Incorrect aggregation - type or strategyClass is required", context.getFullFrameId());
}
}
}
Aggregations