Revision 43987 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app/org.gvsig.app.mainplugin/src/main/java/org/gvsig/app/extension/SelectByAttributesExtension.java

View differences:

SelectByAttributesExtension.java
22 22
 */
23 23
package org.gvsig.app.extension;
24 24

  
25
import java.awt.BorderLayout;
26
import java.awt.FlowLayout;
27
import java.awt.event.ActionEvent;
25 28
import java.util.Iterator;
29
import javax.swing.AbstractAction;
30
import javax.swing.JButton;
26 31

  
27 32
import javax.swing.JOptionPane;
33
import javax.swing.JPanel;
28 34

  
29 35
import org.gvsig.andami.IconThemeHelper;
30 36
import org.gvsig.andami.PluginServices;
......
36 42
import org.gvsig.app.gui.filter.FilterDialog;
37 43
import org.gvsig.app.project.documents.view.ViewDocument;
38 44
import org.gvsig.app.project.documents.view.gui.IView;
45
import org.gvsig.expressionevaluator.Expression;
46
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
47
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
48
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
49
import org.gvsig.expressionevaluator.swing.Element;
39 50
import org.gvsig.fmap.dal.DALLocator;
40 51
import org.gvsig.fmap.dal.DataManager;
41 52
import org.gvsig.fmap.dal.exception.DataException;
......
44 55
import org.gvsig.fmap.dal.feature.FeatureSelection;
45 56
import org.gvsig.fmap.dal.feature.FeatureSet;
46 57
import org.gvsig.fmap.dal.feature.FeatureStore;
58
import org.gvsig.fmap.dal.swing.DataSwingManager;
47 59
import org.gvsig.fmap.mapcontext.layers.FLayer;
48 60
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
49 61
import org.gvsig.i18n.Messages;
62
import org.gvsig.tools.ToolsLocator;
63
import org.gvsig.tools.i18n.I18nManager;
64
import org.gvsig.tools.swing.api.ToolsSwingLocator;
65
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
50 66
import org.gvsig.utils.exceptionHandling.ExceptionListener;
51 67

  
52 68
/**
......
54 70
 *
55 71
 * @author Vicente Caballero Navarro
56 72
 */
73
@SuppressWarnings("UseSpecificCatch")
57 74
public class SelectByAttributesExtension extends Extension implements ExpressionListener {
58 75

  
59 76
    protected FeatureStore featureStore = null;
60 77
    private String filterTitle;
61 78

  
79
    @Override
62 80
    public void initialize() {
63 81
        IconThemeHelper.registerIcon("action", "selection-by-attributes", this);
64 82
    }
65 83

  
84
    @Override
66 85
    public void execute(String actionCommand) {
67 86
        ApplicationManager application = ApplicationLocator.getManager();
68 87

  
......
70 89
        if (view == null) {
71 90
            return;
72 91
        }
73
        ViewDocument document = view.getViewDocument();
74
        
75
        if ("selection-by-attributes-layer".equalsIgnoreCase(actionCommand)) {
92
        if ("selection-by-attributes-layer2".equals(actionCommand)) {
93
            ViewDocument document = view.getViewDocument();
94

  
76 95
            FLayer layer = document.getMapContext().getLayers().getActives()[0];
77 96
            filterTitle = layer.getName();
78 97
            featureStore = ((FLyrVect) layer).getFeatureStore();
79 98
            document.setModified(true);
99
            doSelectByAttributes2(filterTitle, featureStore);
100

  
101
        } else if ("selection-by-attributes-layer".equals(actionCommand)) {
102
            ViewDocument document = view.getViewDocument();
103

  
104
            FLayer layer = document.getMapContext().getLayers().getActives()[0];
105
            filterTitle = layer.getName();
106
            featureStore = ((FLyrVect) layer).getFeatureStore();
107
            document.setModified(true);
80 108
            doExecute();
81 109
        }
82 110
    }
......
90 118
        dlg.addExpressionListener(this);
91 119
        dlg.addExceptionListener(new ExceptionListener() {
92 120

  
121
            @Override
93 122
            public void exceptionThrown(Throwable t) {
94 123
                NotificationManager.addError(t.getMessage(), t);
95 124
            }
......
98 127
        PluginServices.getMDIManager().addWindow(dlg);
99 128
    }
100 129

  
130
    @Override
101 131
    public boolean isEnabled() {
102 132
        return true;
103 133
    }
104 134

  
135
    @Override
105 136
    public boolean isVisible() {
106 137
        ApplicationManager application = ApplicationLocator.getManager();
107 138

  
......
114 145
    }
115 146

  
116 147
    // By Pablo: if no filter expression -> no element selected
148
    @Override
117 149
    public void newSet(String expression) throws DataException {
118 150
        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
119 151
            FeatureSet set = null;
......
152 184
        return featureStore.getFeatureSet(query);
153 185
    }
154 186

  
187
    @Override
155 188
    public void addToSet(String expression) throws DataException {
156 189
        // By Pablo: if no filter expression -> don't add more elements to set
157 190
        if (!this.filterExpressionFromWhereIsEmpty(expression)) {
......
172 205
        }
173 206
    }
174 207

  
208
    @Override
175 209
    public void fromSet(String expression) throws DataException {
176 210
        // By Pablo: if no filter expression -> no element selected
177 211
        try {
......
179 213
                // NotificationManager.showMessageInfo("Falta por implementar",
180 214
                // null);
181 215

  
182
                FeatureSet set = null;
216
                FeatureSet set;
183 217
                set = doSet(expression);
184 218

  
185 219
                if (set == null) {
......
204 238
            } else {
205 239
                // By Pablo: if no expression -> no element selected
206 240
                featureStore.getFeatureSelection().deselectAll();
207
                ;
208 241
            }
209 242
        } catch (DataException e) {
210 243
            NotificationManager.addError(e);
......
263 296
        }
264 297
        return p.getMessage();
265 298
    }
299

  
300
    private void doSelectByAttributes2(String title, final FeatureStore store) {
301
        I18nManager i18n = ToolsLocator.getI18nManager();
302
        WindowManager windowManager = ToolsSwingLocator.getWindowManager();
303
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
304

  
305
        final JPanel panel = new JPanel();
306
        panel.setLayout(new BorderLayout());
307

  
308
        final JExpressionBuilder builder = swingManager.createJExpressionBuilder();
309
        builder.addSymbolTable(DataManager.FEATURE_SYMBOL_TABLE);
310
        Element element = swingManager.createElement(
311
                DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
312
                builder,
313
                store
314
        );
315
        if (element != null) {
316
            builder.getElements().add(element);
317
        }
318
        panel.add(builder.asJComponent(), BorderLayout.CENTER);
319
        JPanel buttons = new JPanel();
320
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
321
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Set_selection")) {
322
            @Override
323
            public void actionPerformed(ActionEvent e) {
324
                doSetSelection(store, builder.getExpression());
325
            }
326
        }));
327
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
328
            @Override
329
            public void actionPerformed(ActionEvent e) {
330
                doAddToSelection(store, builder.getExpression());
331
            }
332
        }));
333
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
334
            @Override
335
            public void actionPerformed(ActionEvent e) {
336
                doFilterSelection(store, builder.getExpression());
337
            }
338
        }));
339
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
340
            @Override
341
            public void actionPerformed(ActionEvent e) {
342
                panel.setVisible(false);
343
            }
344
        }));
345
        panel.add(buttons, BorderLayout.SOUTH);
346
        
347
        windowManager.showWindow(
348
                panel,
349
                title,
350
                WindowManager.MODE.WINDOW
351
        );
352

  
353
    }
354

  
355
    private void doSetSelection(FeatureStore store, Expression expression) {
356
        try {
357
            DataManager manager = DALLocator.getDataManager();
358

  
359
            FeatureSelection currentSelection = store.getFeatureSelection();
360
            FeatureQuery query = store.createFeatureQuery();
361
            query.setFilter(manager.createExpresion(expression));
362
            FeatureSet selection = store.getFeatureSet(query);
363
            currentSelection.deselectAll();
364
            currentSelection.select(selection);
365
        } catch (Exception ex) {
366
            logger.warn("Can't build selecction from filter expression.", ex);
367
        }
368
    }
369

  
370
    private void doAddToSelection(FeatureStore store, Expression expression) {
371
        try {
372
            DataManager manager = DALLocator.getDataManager();
373

  
374
            FeatureSelection currentSelection = store.getFeatureSelection();
375
            FeatureQuery query = store.createFeatureQuery();
376
            query.setFilter(manager.createExpresion(expression));
377
            FeatureSet selection = store.getFeatureSet(query);
378
            currentSelection.select(selection);
379
        } catch (Exception ex) {
380
            logger.warn("Can't build selecction from filter expression.", ex);
381
        }
382
    }
383

  
384
    private void doFilterSelection(FeatureStore store, Expression expression) {
385
        try {
386
            DataManager manager = DALLocator.getDataManager();
387

  
388
            FeatureSelection currentSelection = store.getFeatureSelection();
389
            FeatureQuery query = store.createFeatureQuery();
390
            query.setFilter(manager.createExpresion(expression));
391
            FeatureSet set = store.getFeatureSet(query);
392
            FeatureSelection newSelection = store.createFeatureSelection();
393
            for (Feature feature : set) {
394
                if( currentSelection.isSelected(feature) ) {
395
                    newSelection.select(feature);
396
                }
397
            }
398
            store.setSelection(newSelection);
399
        } catch (Exception ex) {
400
            logger.warn("Can't build selecction from filter expression.", ex);
401
        }
402
    }
403

  
266 404
}

Also available in: Unified diff