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

History | View | Annotate | Download (5.71 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
        Element element = swingManager.createElement("View");
53
        if (element != null) {
54
            builder.getElements().add(element);
55
        }
56
        element = swingManager.createElement(
57
                DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
58
                builder,
59
                store
60
        );
61
        if (element != null) {
62
            builder.getElements().add(element);
63
        }
64
        panel.add(builder.asJComponent(), BorderLayout.CENTER);
65
        JPanel buttons = new JPanel();
66
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
67
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Set_selection")) {
68
            @Override
69
            public void actionPerformed(ActionEvent e) {
70
                setSelection(store, builder.getExpression());
71
            }
72
        }));
73
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
74
            @Override
75
            public void actionPerformed(ActionEvent e) {
76
                addToSelection(store, builder.getExpression());
77
            }
78
        }));
79
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
80
            @Override
81
            public void actionPerformed(ActionEvent e) {
82
                filterSelection(store, builder.getExpression());
83
            }
84
        }));
85
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
86
            @Override
87
            public void actionPerformed(ActionEvent e) {
88
                panel.setVisible(false);
89
            }
90
        }));
91
        panel.add(buttons, BorderLayout.SOUTH);
92
        
93
        windowManager.showWindow(
94
                panel,
95
                title,
96
                mode
97
        );
98

    
99
    }
100

    
101
    public void setSelection(FeatureStore store, Expression expression) {
102
        try {
103
            DataManager manager = DALLocator.getDataManager();
104

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

    
116
    public void addToSelection(FeatureStore store, Expression expression) {
117
        try {
118
            DataManager manager = DALLocator.getDataManager();
119

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

    
130
    public void filterSelection(FeatureStore store, Expression expression) {
131
        try {
132
            DataManager manager = DALLocator.getDataManager();
133

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