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