Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / actions / GraphAction.java @ 47049

History | View | Annotate | Download (7.3 KB)

1
package org.gvsig.fmap.dal.swing.impl.actions;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.util.ArrayList;
6
import java.util.List;
7
import javax.json.JsonArray;
8
import javax.json.JsonObject;
9
import javax.json.JsonValue;
10
import javax.swing.AbstractAction;
11
import javax.swing.Action;
12
import javax.swing.event.ListSelectionEvent;
13
import javax.swing.event.ListSelectionListener;
14
import org.apache.commons.lang3.StringUtils;
15
import org.gvsig.expressionevaluator.Expression;
16
import org.gvsig.featureform.swing.JFeaturesForm;
17
import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
18
import org.gvsig.fmap.dal.DataStore;
19
import org.gvsig.fmap.dal.feature.Feature;
20
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
21
import org.gvsig.fmap.dal.feature.FeatureQuery;
22
import org.gvsig.fmap.dal.feature.FeatureQueryOrder;
23
import org.gvsig.fmap.dal.feature.FeatureSet;
24
import org.gvsig.fmap.dal.feature.FeatureStore;
25
import org.gvsig.fmap.dal.swing.AbstractDALActionFactory;
26
import org.gvsig.fmap.dal.swing.DALSwingLocator;
27
import org.gvsig.fmap.dal.swing.DataSwingManager;
28
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
29
import org.gvsig.tools.ToolsLocator;
30
import org.gvsig.tools.i18n.I18nManager;
31
import org.gvsig.tools.swing.api.ToolsSwingLocator;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34
import org.gvsig.fmap.dal.swing.DALActionFactory;
35
import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
36
import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
37
import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel.SearchActionContext;
38
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
39
import org.jfree.chart.ChartFactory;
40
import org.jfree.chart.ChartPanel;
41
import org.jfree.chart.JFreeChart;
42
import org.jfree.chart.plot.PlotOrientation;
43
import org.jfree.data.category.DefaultCategoryDataset;
44

    
45
/**
46
 *
47
 * @author jjdelcerro
48
 */
49
@SuppressWarnings("UseSpecificCatch")
50
public class GraphAction 
51
        extends AbstractAction 
52
        implements ListSelectionListener
53
    {
54
    
55
    private class svDefaultCategoryDataset extends DefaultCategoryDataset {
56

    
57
        public svDefaultCategoryDataset() {
58
            
59
        }
60
    }
61
    
62
    public static class GraphActionFactory extends AbstractDALActionFactory {
63

    
64
        public static final String ACTION_NAME = "Graph";
65
        
66
        public GraphActionFactory() {
67
            super(ACTION_NAME);
68
        }
69

    
70
        @Override
71
        public Action createAction(DALActionContext context) {
72
            return new GraphAction(context);
73
        }
74
        
75
        @Override
76
        public boolean isApplicable(Object... args) {
77
            return false; // args[0] instanceof SearchActionContext;
78
        }
79

    
80
        public static void selfRegister() {
81
            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
82
            dalSwingManager.registerStoreAction(new GraphActionFactory());
83
        }        
84
        
85
    }
86

    
87

    
88
    private static final Logger LOGGER = LoggerFactory.getLogger(ShowFormAction.class);
89
    
90
    private final DALActionContext context;
91
    private boolean showFormSingleElement;
92

    
93
    public GraphAction(DALActionContext context) {
94
        this.context = context;
95
        I18nManager i18n = ToolsLocator.getI18nManager();
96
        this.putValue(
97
                Action.ACTION_COMMAND_KEY, 
98
                GraphActionFactory.ACTION_NAME
99
        );
100
        this.putValue(
101
                Action.SHORT_DESCRIPTION, 
102
                i18n.getTranslation("_Show_graph")
103
        );
104
        this.putValue(
105
                Action.SMALL_ICON, 
106
                ToolsSwingLocator.getIconThemeManager().getCurrent().get("chart")
107
        );
108
        try {
109
            this.showFormSingleElement = true;
110
            DataStore store = this.context.getStore();
111
            if( !(store instanceof FeatureStore) ) {
112
                return;
113
            }
114
            FeatureStore featureStore = (FeatureStore) store;
115
            FeatureAttributeDescriptor[] pks = featureStore.getDefaultFeatureType().getPrimaryKey();
116
            if (pks == null || pks.length < 1) {
117
                this.showFormSingleElement = false;
118
            }
119
        } catch (Exception ex) {
120
        }        
121
    }
122
    
123
    @Override
124
    public void actionPerformed(ActionEvent e) {
125
        try {
126
            this.setEnabled(false);
127
            DataStore store = this.context.getStore();
128
            if( !(store instanceof FeatureStore) ) {
129
                return ;
130
            }
131
            FeatureStore featureStore = (FeatureStore) store;
132
            FeatureQuery query = this.context.getQuery();
133
            
134
            svDefaultCategoryDataset dataset = new svDefaultCategoryDataset();
135
            FeatureSet features = featureStore.getFeatureSet(query);
136

    
137
            Iterable<FeatureQueryOrder.FeatureQueryOrderMember> orderMembers = query.getOrder().members();
138
            ArrayList<String> fields = new ArrayList<>();
139
            for (FeatureQueryOrder.FeatureQueryOrderMember orderMember : orderMembers) {
140
                fields.add(orderMember.getAttributeName());
141
            }
142
            if (fields.size()<2) {
143
                return;
144
            }
145
            
146
            fields.add((String) this.context.getQuery().getAggregateFunctions().keySet().toArray()[0]);
147
            
148
            String field1 = fields.get(0);
149
            String field2 = fields.get(1);
150
            String fieldValue = fields.get(2);
151
            
152
            for (Feature feature : features) {
153
                Object value = feature.get(fieldValue);
154
                if (value instanceof Number) {
155
                    String valueField1;
156
                    String valueField2;
157
                    if(feature.getType().getAttributeDescriptor(field1)!=null) {
158
                        valueField1 = feature.getLabelOfValue(field1);
159
                    } else {
160
                        valueField1 = feature.get(field1).toString();
161
                    }
162
                    if(feature.getType().getAttributeDescriptor(field2)!=null) {
163
                        valueField2 = feature.getLabelOfValue(field2);
164
                    } else {
165
                        valueField2 = feature.get(field1).toString();
166
                    }
167
                    
168
                    dataset.addValue((Number) value, valueField1, valueField2);
169
                }
170
            }
171
            
172
            JFreeChart barChart = ChartFactory.createBarChart(
173
                    field1 + " " + field2,
174
                    field2,
175
                    fieldValue,
176
                    dataset,
177
                    PlotOrientation.VERTICAL,
178
                    true,
179
                    true,
180
                    false);
181
            ChartPanel chartPanel = new ChartPanel(barChart);
182
            chartPanel.setPreferredSize(new Dimension( 360 , 200 ));
183
            ToolsSwingLocator.getWindowManager().showWindow(chartPanel, "title", WindowManager.MODE.DIALOG);
184
            
185
            
186
        } catch (Exception ex) {
187
            LOGGER.warn("Can't show form", ex);
188
        } finally {
189
            this.setEnabled(true);
190
        }
191
    }
192
    
193
    @Override
194
    public void valueChanged(ListSelectionEvent e) {
195
        if (e.getValueIsAdjusting()) {
196
            return;
197
        }
198
        if (this.context.getSelectedsCount()== 0) {
199
            this.setEnabled(true);
200
            return;
201
        }
202
        this.setEnabled(showFormSingleElement);
203
    }
204
    
205
}