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 @ 46052

History | View | Annotate | Download (7.77 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
        
76
        
77
//        public static void selfRegister() {
78
//            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
79
//            dalSwingManager.registerFeatureStoreSearchAction(new ShowFormActionFactory());
80
//            String[][] iconNames = new String[][]{
81
//                new String[]{"dalswing", "search-action-showform"}
82
//            };
83
//            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
84
//            for (String[] icon : iconNames) {
85
//                URL url = ShowFormAction.class.getResource(icon[1] + ".png");
86
//                theme.registerDefault("DALSwing", icon[0], icon[1], null, url);
87
//            }
88
//        }
89

    
90
        @Override
91
        public boolean isApplicable(Object... args) {
92
            return false; // args[0] instanceof SearchActionContext;
93
        }
94
        
95
    }
96

    
97

    
98
    private static final Logger LOGGER = LoggerFactory.getLogger(ShowFormAction.class);
99
    
100
    private final DALActionContext context;
101
    private boolean showFormSingleElement;
102

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

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