Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / extension / SelectByAttributes.java @ 44102

History | View | Annotate | Download (6.53 KB)

1
package org.gvsig.app.extension;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.FlowLayout;
5
import java.awt.event.ActionEvent;
6
import javax.swing.AbstractAction;
7
import javax.swing.JButton;
8
import javax.swing.JPanel;
9
import org.gvsig.expressionevaluator.Expression;
10
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
11
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
12
import org.gvsig.expressionevaluator.MutableSymbolTable;
13
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
14
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
15
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
16
import org.gvsig.fmap.dal.DALLocator;
17
import org.gvsig.fmap.dal.DataManager;
18
import org.gvsig.fmap.dal.exception.DataException;
19
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
20
import org.gvsig.fmap.dal.feature.Feature;
21
import org.gvsig.fmap.dal.feature.FeatureQuery;
22
import org.gvsig.fmap.dal.feature.FeatureSelection;
23
import org.gvsig.fmap.dal.feature.FeatureSet;
24
import org.gvsig.fmap.dal.feature.FeatureStore;
25
import org.gvsig.fmap.dal.swing.DataSwingManager;
26
import org.gvsig.tools.ToolsLocator;
27
import org.gvsig.tools.i18n.I18nManager;
28
import org.gvsig.tools.swing.api.ToolsSwingLocator;
29
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
32

    
33
/**
34
 *
35
 * @author jjdelcerro
36
 */
37
@SuppressWarnings("UseSpecificCatch")
38
public class SelectByAttributes {
39
    
40
    private static final Logger LOGGER = LoggerFactory.getLogger(SelectByAttributes.class);
41

    
42
    public SelectByAttributes() {
43
        
44
    }
45
    
46
    public void showWindow(String title, final FeatureStore store, WindowManager.MODE mode) {
47
        I18nManager i18n = ToolsLocator.getI18nManager();
48
        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
49
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
50
        ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager();
51
        DataManager dataManager = DALLocator.getDataManager();
52
        
53
        Feature sampleFeature = null;
54
        try {
55
            sampleFeature = store.getFeatureSelection().first();
56
            if( sampleFeature == null ) {
57
                sampleFeature = store.first();
58
            }
59
        } catch (DataException ex) {
60
        }      
61
        
62
        final JPanel panel = new JPanel();
63
        panel.setLayout(new BorderLayout());
64

    
65
        final JExpressionBuilder builder = swingManager.createJExpressionBuilder();
66
        if( sampleFeature!=null ) {
67
            FeatureSymbolTable featureSymbolTable = dataManager.createFeatureSymbolTable();
68
            featureSymbolTable.setFeature(sampleFeature);
69
            builder.setPreviewSymbolTable(featureSymbolTable.createParent());
70
        }
71
        
72
        builder.addSymbolTable(DataManager.FEATURE_SYMBOL_TABLE);
73
        builder.addElement(swingManager.createElement("View"));
74
        builder.addElement(
75
             swingManager.createElement(
76
                DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
77
                builder,
78
                store
79
            )
80
        );
81
        panel.add(builder.asJComponent(), BorderLayout.CENTER);
82
        JPanel buttons = new JPanel();
83
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
84
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_New_selection")) {
85
            @Override
86
            public void actionPerformed(ActionEvent e) {
87
                setSelection(store, builder.getExpression());
88
            }
89
        }));
90
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
91
            @Override
92
            public void actionPerformed(ActionEvent e) {
93
                addToSelection(store, builder.getExpression());
94
            }
95
        }));
96
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
97
            @Override
98
            public void actionPerformed(ActionEvent e) {
99
                filterSelection(store, builder.getExpression());
100
            }
101
        }));
102
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
103
            @Override
104
            public void actionPerformed(ActionEvent e) {
105
                panel.setVisible(false);
106
            }
107
        }));
108
        panel.add(buttons, BorderLayout.SOUTH);
109
        
110
        windowManager.showWindow(
111
                panel,
112
                title,
113
                mode
114
        );
115

    
116
    }
117

    
118
    public void setSelection(FeatureStore store, Expression expression) {
119
        try {
120
            DataManager manager = DALLocator.getDataManager();
121

    
122
            FeatureSelection currentSelection = store.getFeatureSelection();
123
            FeatureQuery query = store.createFeatureQuery();
124
            query.setFilter(manager.createExpresion(expression));
125
            FeatureSet selection = store.getFeatureSet(query);
126
            currentSelection.deselectAll();
127
            currentSelection.select(selection);
128
        } catch (Exception ex) {
129
            LOGGER.warn("Can't build selecction from filter expression.", ex);
130
        }
131
    }
132

    
133
    public void addToSelection(FeatureStore store, Expression expression) {
134
        try {
135
            DataManager manager = DALLocator.getDataManager();
136

    
137
            FeatureSelection currentSelection = store.getFeatureSelection();
138
            FeatureQuery query = store.createFeatureQuery();
139
            query.setFilter(manager.createExpresion(expression));
140
            FeatureSet selection = store.getFeatureSet(query);
141
            currentSelection.select(selection);
142
        } catch (Exception ex) {
143
            LOGGER.warn("Can't build selecction from filter expression.", ex);
144
        }
145
    }
146

    
147
    public void filterSelection(FeatureStore store, Expression expression) {
148
        try {
149
            DataManager manager = DALLocator.getDataManager();
150

    
151
            FeatureSelection currentSelection = store.getFeatureSelection();
152
            FeatureQuery query = store.createFeatureQuery();
153
            query.setFilter(manager.createExpresion(expression));
154
            FeatureSet set = store.getFeatureSet(query);
155
            FeatureSelection newSelection = store.createFeatureSelection();
156
            for (Feature feature : set) {
157
                if( currentSelection.isSelected(feature) ) {
158
                    newSelection.select(feature);
159
                }
160
            }
161
            store.setSelection(newSelection);
162
        } catch (Exception ex) {
163
            LOGGER.warn("Can't build selecction from filter expression.", ex);
164
        }
165
    }
166
    
167
}