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

History | View | Annotate | Download (5.58 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.swing.Element;
11
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
12
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
13
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
14
import org.gvsig.fmap.dal.DALLocator;
15
import org.gvsig.fmap.dal.DataManager;
16
import org.gvsig.fmap.dal.feature.Feature;
17
import org.gvsig.fmap.dal.feature.FeatureQuery;
18
import org.gvsig.fmap.dal.feature.FeatureSelection;
19
import org.gvsig.fmap.dal.feature.FeatureSet;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.fmap.dal.swing.DataSwingManager;
22
import org.gvsig.tools.ToolsLocator;
23
import org.gvsig.tools.i18n.I18nManager;
24
import org.gvsig.tools.swing.api.ToolsSwingLocator;
25
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
26
import org.slf4j.Logger;
27
import org.slf4j.LoggerFactory;
28

    
29
/**
30
 *
31
 * @author jjdelcerro
32
 */
33
@SuppressWarnings("UseSpecificCatch")
34
public class SelectByAttributes {
35
    
36
    private static final Logger LOGGER = LoggerFactory.getLogger(SelectByAttributes.class);
37

    
38
    public SelectByAttributes() {
39
        
40
    }
41
    
42
    public void showWindow(String title, final FeatureStore store, WindowManager.MODE mode) {
43
        I18nManager i18n = ToolsLocator.getI18nManager();
44
        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
45
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
46

    
47
        final JPanel panel = new JPanel();
48
        panel.setLayout(new BorderLayout());
49

    
50
        final JExpressionBuilder builder = swingManager.createJExpressionBuilder();
51
        builder.addSymbolTable(DataManager.FEATURE_SYMBOL_TABLE);
52
        builder.addElement(swingManager.createElement("View"));
53
        builder.addElement(
54
             swingManager.createElement(
55
                DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
56
                builder,
57
                store
58
            )
59
        );
60
        panel.add(builder.asJComponent(), BorderLayout.CENTER);
61
        JPanel buttons = new JPanel();
62
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
63
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Set_selection")) {
64
            @Override
65
            public void actionPerformed(ActionEvent e) {
66
                setSelection(store, builder.getExpression());
67
            }
68
        }));
69
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
70
            @Override
71
            public void actionPerformed(ActionEvent e) {
72
                addToSelection(store, builder.getExpression());
73
            }
74
        }));
75
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
76
            @Override
77
            public void actionPerformed(ActionEvent e) {
78
                filterSelection(store, builder.getExpression());
79
            }
80
        }));
81
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
82
            @Override
83
            public void actionPerformed(ActionEvent e) {
84
                panel.setVisible(false);
85
            }
86
        }));
87
        panel.add(buttons, BorderLayout.SOUTH);
88
        
89
        windowManager.showWindow(
90
                panel,
91
                title,
92
                mode
93
        );
94

    
95
    }
96

    
97
    public void setSelection(FeatureStore store, Expression expression) {
98
        try {
99
            DataManager manager = DALLocator.getDataManager();
100

    
101
            FeatureSelection currentSelection = store.getFeatureSelection();
102
            FeatureQuery query = store.createFeatureQuery();
103
            query.setFilter(manager.createExpresion(expression));
104
            FeatureSet selection = store.getFeatureSet(query);
105
            currentSelection.deselectAll();
106
            currentSelection.select(selection);
107
        } catch (Exception ex) {
108
            LOGGER.warn("Can't build selecction from filter expression.", ex);
109
        }
110
    }
111

    
112
    public void addToSelection(FeatureStore store, Expression expression) {
113
        try {
114
            DataManager manager = DALLocator.getDataManager();
115

    
116
            FeatureSelection currentSelection = store.getFeatureSelection();
117
            FeatureQuery query = store.createFeatureQuery();
118
            query.setFilter(manager.createExpresion(expression));
119
            FeatureSet selection = store.getFeatureSet(query);
120
            currentSelection.select(selection);
121
        } catch (Exception ex) {
122
            LOGGER.warn("Can't build selecction from filter expression.", ex);
123
        }
124
    }
125

    
126
    public void filterSelection(FeatureStore store, Expression expression) {
127
        try {
128
            DataManager manager = DALLocator.getDataManager();
129

    
130
            FeatureSelection currentSelection = store.getFeatureSelection();
131
            FeatureQuery query = store.createFeatureQuery();
132
            query.setFilter(manager.createExpresion(expression));
133
            FeatureSet set = store.getFeatureSet(query);
134
            FeatureSelection newSelection = store.createFeatureSelection();
135
            for (Feature feature : set) {
136
                if( currentSelection.isSelected(feature) ) {
137
                    newSelection.select(feature);
138
                }
139
            }
140
            store.setSelection(newSelection);
141
        } catch (Exception ex) {
142
            LOGGER.warn("Can't build selecction from filter expression.", ex);
143
        }
144
    }
145
    
146
}