Search in sources :

Example 1 with AggregationStrategy

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);
    }
}
Also used : Aggregation(com.haulmont.cuba.gui.data.aggregation.Aggregation) AggregationStrategy(com.haulmont.cuba.gui.data.aggregation.AggregationStrategy)

Example 2 with AggregationStrategy

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());
        }
    }
}
Also used : Element(org.dom4j.Element) GuiDevelopmentException(com.haulmont.cuba.gui.GuiDevelopmentException) GuiDevelopmentException(com.haulmont.cuba.gui.GuiDevelopmentException) AggregationStrategy(com.haulmont.cuba.gui.data.aggregation.AggregationStrategy)

Aggregations

AggregationStrategy (com.haulmont.cuba.gui.data.aggregation.AggregationStrategy)2 GuiDevelopmentException (com.haulmont.cuba.gui.GuiDevelopmentException)1 Aggregation (com.haulmont.cuba.gui.data.aggregation.Aggregation)1 Element (org.dom4j.Element)1