Project

General

Profile

Download (4.53 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2018 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
package eu.etaxonomy.taxeditor.editor.workingSet.matrix;
10

    
11
import java.util.HashSet;
12
import java.util.Set;
13

    
14
import org.apache.commons.lang.StringUtils;
15
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
16
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
17
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
18
import org.eclipse.nebula.widgets.nattable.summaryrow.DefaultSummaryRowConfiguration;
19
import org.eclipse.nebula.widgets.nattable.summaryrow.ISummaryProvider;
20
import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowConfigAttributes;
21
import org.eclipse.nebula.widgets.nattable.summaryrow.SummaryRowLayer;
22
import org.eclipse.nebula.widgets.nattable.util.GUIHelper;
23

    
24
import eu.etaxonomy.cdm.model.description.CategoricalData;
25
import eu.etaxonomy.cdm.model.description.Feature;
26
import eu.etaxonomy.cdm.model.description.QuantitativeData;
27
import eu.etaxonomy.cdm.model.description.State;
28

    
29
/**
30
 * @author pplitzner
31
 * @since Jan 4, 2018
32
 *
33
 */
34
public class AggregationConfiguration extends DefaultSummaryRowConfiguration {
35

    
36
    private final IDataProvider dataProvider;
37
    private Feature feature;
38

    
39
    public AggregationConfiguration(IDataProvider dataProvider, Feature feature) {
40
        this.dataProvider = dataProvider;
41
        this.feature = feature;
42
        this.summaryRowBgColor = GUIHelper.COLOR_BLUE;
43
        this.summaryRowFgColor = GUIHelper.COLOR_WHITE;
44
    }
45

    
46
    @Override
47
    public void addSummaryProviderConfig(IConfigRegistry configRegistry) {
48
        if(feature.isSupportsQuantitativeData()){
49
            configRegistry.registerConfigAttribute(
50
                    SummaryRowConfigAttributes.SUMMARY_PROVIDER,
51
                    new QuantitativeSummaryProvider(),
52
                    DisplayMode.NORMAL,
53
                    SummaryRowLayer.DEFAULT_SUMMARY_COLUMN_CONFIG_LABEL_PREFIX+MatrixUtility.getProperty(feature));
54
        }
55
        if(feature.isSupportsCategoricalData()){
56
            configRegistry.registerConfigAttribute(
57
                    SummaryRowConfigAttributes.SUMMARY_PROVIDER,
58
                    new CategoricalSummaryProvider(),
59
                    DisplayMode.NORMAL,
60
                    SummaryRowLayer.DEFAULT_SUMMARY_COLUMN_CONFIG_LABEL_PREFIX+MatrixUtility.getProperty(feature));
61
        }
62
    }
63

    
64
    private class QuantitativeSummaryProvider implements ISummaryProvider {
65
        @Override
66
        public Object summarize(int columnIndex) {
67
            Float minTotal = null;
68
            Float maxTotal = null;
69
            int rowCount = AggregationConfiguration.this.dataProvider.getRowCount();
70

    
71
            for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
72
                Object dataValue = AggregationConfiguration.this.dataProvider.getDataValue(columnIndex,
73
                        rowIndex);
74
                if(dataValue instanceof QuantitativeData){
75
                    QuantitativeData quantitativeData = (QuantitativeData)dataValue;
76
                    Float min = quantitativeData.getMin();
77
                    Float max = quantitativeData.getMax();
78
                    if(min!=null && (minTotal==null || min<minTotal)){
79
                        minTotal = min;
80
                    }
81
                    if(max!=null && (maxTotal==null || max>maxTotal)){
82
                        maxTotal = max;
83
                    }
84
                }
85
            }
86
            String summaryString = (minTotal==null?"?":minTotal.toString())
87
                    +" - "
88
                    +(maxTotal==null?"?":maxTotal.toString());
89
            return summaryString;
90
        }
91
    }
92

    
93
    private class CategoricalSummaryProvider implements ISummaryProvider {
94
        @Override
95
        public Object summarize(int columnIndex) {
96
            int rowCount = AggregationConfiguration.this.dataProvider.getRowCount();
97
            Set<State> states = new HashSet<>();
98
            for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
99
                Object dataValue = AggregationConfiguration.this.dataProvider.getDataValue(columnIndex,
100
                        rowIndex);
101
                if(dataValue instanceof CategoricalData){
102
                    CategoricalData categoricalData = (CategoricalData)dataValue;
103
                    states.addAll(categoricalData.getStatesOnly());
104
                }
105
            }
106
            return StringUtils.join(states, ", ");
107
        }
108
    }
109
}
(1-1/10)