01: /* uDig - User Friendly Desktop Internet GIS client
02: * http://udig.refractions.net
03: * (C) 2004, Refractions Research Inc.
04: *
05: * This library is free software; you can redistribute it and/or
06: * modify it under the terms of the GNU Lesser General Public
07: * License as published by the Free Software Foundation;
08: * version 2.1 of the License.
09: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: */
15: package net.refractions.udig.project.ui.tool.selection.provider;
16:
17: import net.refractions.udig.project.EditManagerEvent;
18: import net.refractions.udig.project.IEditManagerListener;
19: import net.refractions.udig.project.ILayer;
20: import net.refractions.udig.project.ILayerListener;
21: import net.refractions.udig.project.IMap;
22: import net.refractions.udig.project.LayerEvent;
23: import net.refractions.udig.project.LayerEvent.EventType;
24: import net.refractions.udig.project.ui.internal.AdaptingFilter;
25: import net.refractions.udig.project.ui.tool.IMapEditorSelectionProvider;
26:
27: import org.eclipse.jface.viewers.StructuredSelection;
28: import org.eclipse.ui.IEditorPart;
29: import org.geotools.filter.Filter;
30:
31: /**
32: * A selection provider that provides as the current selection the currently selected layer's selection filter.
33: * (map.getEditManager().getSelectedLayer().getFilter()). The filter will be an Adaptable filter that adapts
34: * to the layer that the filter is from.
35: *
36: * @author Jesse
37: * @since 1.1.0
38: */
39: public class FilterSelectionProvider extends
40: AbstractMapEditorSelectionProvider implements
41: IMapEditorSelectionProvider {
42: private ILayerListener layerListener = new ILayerListener() {
43:
44: public void refresh(LayerEvent event) {
45: if (event.getSource() != map.getEditManager()
46: .getSelectedLayer()) {
47: event.getSource().removeListener(this );
48: }
49: if (event.getType() == EventType.FILTER) {
50: selection = new StructuredSelection(
51: new AdaptingFilter(
52: (Filter) event.getNewValue(), event
53: .getSource()));
54: notifyListeners();
55: }
56: }
57:
58: };
59: private IMap map;
60:
61: public void setActiveMap(IMap map, IEditorPart editor) {
62: this .map = map;
63: if (map == null || map.getMapLayers().size() == 0) {
64: selection = new StructuredSelection();
65: return;
66: } else {
67: ILayer selectedLayer = map.getEditManager()
68: .getSelectedLayer();
69: if (selectedLayer != null) {
70: selectedLayer.addListener(layerListener);
71:
72: Filter filter = selectedLayer.getFilter();
73: selection = new StructuredSelection(new AdaptingFilter(
74: filter, selectedLayer));
75: }
76: }
77:
78: map.getEditManager().addListener(new IEditManagerListener() {
79:
80: public void changed(EditManagerEvent event) {
81: if (event.getType() == EditManagerEvent.SELECTED_LAYER) {
82: ILayer oldLayer = (ILayer) event.getOldValue();
83: if (oldLayer != null)
84: oldLayer.removeListener(layerListener);
85: ILayer selectedLayer = (ILayer) event.getNewValue();
86: if (selectedLayer != null) {
87: selectedLayer.addListener(layerListener);
88: Filter filter = selectedLayer.getFilter();
89: selection = new StructuredSelection(
90: new AdaptingFilter(filter,
91: selectedLayer));
92: }
93: notifyListeners();
94: }
95: }
96: });
97: }
98:
99: }
|