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