Revision 44011 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;
28 25
import java.util.Iterator;
29
import javax.swing.AbstractAction;
30
import javax.swing.JButton;
31 26

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

  
35 29
import org.gvsig.andami.IconThemeHelper;
36 30
import org.gvsig.andami.PluginServices;
......
42 36
import org.gvsig.app.gui.filter.FilterDialog;
43 37
import org.gvsig.app.project.documents.view.ViewDocument;
44 38
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;
50 39
import org.gvsig.fmap.dal.DALLocator;
51 40
import org.gvsig.fmap.dal.DataManager;
52 41
import org.gvsig.fmap.dal.exception.DataException;
......
55 44
import org.gvsig.fmap.dal.feature.FeatureSelection;
56 45
import org.gvsig.fmap.dal.feature.FeatureSet;
57 46
import org.gvsig.fmap.dal.feature.FeatureStore;
58
import org.gvsig.fmap.dal.swing.DataSwingManager;
59 47
import org.gvsig.fmap.mapcontext.layers.FLayer;
60 48
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
61 49
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 50
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
66 51
import org.gvsig.utils.exceptionHandling.ExceptionListener;
67 52

  
......
89 74
        if (view == null) {
90 75
            return;
91 76
        }
92
        if ("selection-by-attributes-layer2".equals(actionCommand)) {
77
        if ("selection-by-attributes-layer".equals(actionCommand)) {
93 78
            ViewDocument document = view.getViewDocument();
94 79

  
95 80
            FLayer layer = document.getMapContext().getLayers().getActives()[0];
96 81
            filterTitle = layer.getName();
97 82
            featureStore = ((FLyrVect) layer).getFeatureStore();
98 83
            document.setModified(true);
99
            doSelectByAttributes2(filterTitle, featureStore);
84
            SelectByAttributes selector = new SelectByAttributes();
85
            selector.showWindow(filterTitle, featureStore, WindowManager.MODE.TOOL);
100 86

  
101
        } else if ("selection-by-attributes-layer".equals(actionCommand)) {
87

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

  
104 91
            FLayer layer = document.getMapContext().getLayers().getActives()[0];
......
296 283
        }
297 284
        return p.getMessage();
298 285
    }
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("View");
311
        if (element != null) {
312
            builder.getElements().add(element);
313
        }
314
        element = swingManager.createElement(
315
                DataSwingManager.FEATURE_STORE_EXPRESSION_ELEMENT,
316
                builder,
317
                store
318
        );
319
        if (element != null) {
320
            builder.getElements().add(element);
321
        }
322
        panel.add(builder.asJComponent(), BorderLayout.CENTER);
323
        JPanel buttons = new JPanel();
324
        buttons.setLayout(new FlowLayout(FlowLayout.RIGHT, 4, 4));
325
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Set_selection")) {
326
            @Override
327
            public void actionPerformed(ActionEvent e) {
328
                doSetSelection(store, builder.getExpression());
329
            }
330
        }));
331
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Add_to_selection")) {
332
            @Override
333
            public void actionPerformed(ActionEvent e) {
334
                doAddToSelection(store, builder.getExpression());
335
            }
336
        }));
337
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Filter_selection")) {
338
            @Override
339
            public void actionPerformed(ActionEvent e) {
340
                doFilterSelection(store, builder.getExpression());
341
            }
342
        }));
343
        buttons.add(new JButton(new AbstractAction(i18n.getTranslation("_Close")) {
344
            @Override
345
            public void actionPerformed(ActionEvent e) {
346
                panel.setVisible(false);
347
            }
348
        }));
349
        panel.add(buttons, BorderLayout.SOUTH);
350
        
351
        windowManager.showWindow(
352
                panel,
353
                title,
354
                WindowManager.MODE.TOOL
355
        );
356

  
357
    }
358

  
359
    private void doSetSelection(FeatureStore store, Expression expression) {
360
        try {
361
            DataManager manager = DALLocator.getDataManager();
362

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

  
374
    private void doAddToSelection(FeatureStore store, Expression expression) {
375
        try {
376
            DataManager manager = DALLocator.getDataManager();
377

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

  
388
    private void doFilterSelection(FeatureStore store, Expression expression) {
389
        try {
390
            DataManager manager = DALLocator.getDataManager();
391

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

  
408 286
}

Also available in: Unified diff