root / branches / v2_0_0_prep / libraries / libFMap_controls / src / org / gvsig / fmap / mapcontrol / impl / DefaultMapControlManager.java @ 38564
History | View | Annotate | Download (11.6 KB)
1 | 30327 | jpiera | /* gvSIG. Geographic Information System of the Valencian Government
|
---|---|---|---|
2 | *
|
||
3 | * Copyright (C) 2007-2008 Infrastructures and Transports Department
|
||
4 | * of the Valencian Government (CIT)
|
||
5 | *
|
||
6 | * This program is free software; you can redistribute it and/or
|
||
7 | * modify it under the terms of the GNU General Public License
|
||
8 | * as published by the Free Software Foundation; either version 2
|
||
9 | * of the License, or (at your option) any later version.
|
||
10 | *
|
||
11 | * This program is distributed in the hope that it will be useful,
|
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
14 | * GNU General Public License for more details.
|
||
15 | *
|
||
16 | * You should have received a copy of the GNU General Public License
|
||
17 | * along with this program; if not, write to the Free Software
|
||
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||
19 | * MA 02110-1301, USA.
|
||
20 | *
|
||
21 | */
|
||
22 | |||
23 | /*
|
||
24 | * AUTHORS (In addition to CIT):
|
||
25 | * 2009 {Iver T.I.} {Task}
|
||
26 | */
|
||
27 | |||
28 | package org.gvsig.fmap.mapcontrol.impl; |
||
29 | |||
30 | import java.awt.Color; |
||
31 | import java.util.ArrayList; |
||
32 | import java.util.Iterator; |
||
33 | 33429 | cordinyana | import java.util.Map; |
34 | 30327 | jpiera | import java.util.prefs.Preferences; |
35 | |||
36 | import org.gvsig.fmap.geom.Geometry; |
||
37 | import org.gvsig.fmap.mapcontext.MapContextLocator; |
||
38 | import org.gvsig.fmap.mapcontext.MapContextManager; |
||
39 | import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol; |
||
40 | 32961 | jjdelcerro | import org.gvsig.fmap.mapcontrol.MapControl; |
41 | 30327 | jpiera | import org.gvsig.fmap.mapcontrol.MapControlCreationException; |
42 | import org.gvsig.fmap.mapcontrol.MapControlDrawer; |
||
43 | import org.gvsig.fmap.mapcontrol.MapControlManager; |
||
44 | 33429 | cordinyana | import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent; |
45 | import org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent; |
||
46 | 30327 | jpiera | import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper; |
47 | import org.gvsig.tools.ToolsLocator; |
||
48 | 33429 | cordinyana | import org.gvsig.tools.dynobject.DynObjectSet; |
49 | 30327 | jpiera | import org.gvsig.tools.extensionpoint.ExtensionPoint; |
50 | 33429 | cordinyana | import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension; |
51 | 30327 | jpiera | import org.gvsig.tools.extensionpoint.ExtensionPointManager; |
52 | 38564 | jjdelcerro | import org.slf4j.Logger; |
53 | import org.slf4j.LoggerFactory; |
||
54 | 30327 | jpiera | |
55 | /**
|
||
56 | * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
|
||
57 | */
|
||
58 | public class DefaultMapControlManager implements MapControlManager{ |
||
59 | private static final Logger logger = LoggerFactory.getLogger(MapControlManager.class); |
||
60 | private static final String MAPCONTROL_MANAGER_EXTENSION_POINT = "MapControlManagerExtensionPoint"; |
||
61 | private static final String DEFAULT_MAPCONTROLMANAGER_NAME = null; |
||
62 | private static final String SNAPPING_EXTENSION_POINT = "Snapper"; |
||
63 | 32961 | jjdelcerro | |
64 | 30327 | jpiera | private ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
|
65 | private int snappingTolerance = 4; |
||
66 | private ISymbol selectionSymbol = null; |
||
67 | private ISymbol axisReferencesSymbol = null; |
||
68 | private ISymbol geometrySelectionSymbol = null; |
||
69 | private ISymbol handlerSymbol = null; |
||
70 | private static MapContextManager mapContextManager = MapContextLocator |
||
71 | .getMapContextManager(); |
||
72 | private Preferences prefs = Preferences.userRoot().node( "cadtooladapter" ); |
||
73 | 32728 | fpenarrubia | private static Preferences prefSnappers = Preferences.userRoot().node("snappers"); |
74 | 30327 | jpiera | private ArrayList<ISnapper> snappers = null; |
75 | 30349 | jpiera | |
76 | 30327 | jpiera | public DefaultMapControlManager() {
|
77 | super();
|
||
78 | snappers = new ArrayList<ISnapper>(); |
||
79 | } |
||
80 | |||
81 | /* (non-Javadoc)
|
||
82 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#createDefaultMapControlDrawer()
|
||
83 | */
|
||
84 | public MapControlDrawer createDefaultMapControlDrawer() throws MapControlCreationException { |
||
85 | ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT); |
||
86 | try {
|
||
87 | return (MapControlDrawer)ep.create(DEFAULT_MAPCONTROLMANAGER_NAME);
|
||
88 | } catch (Exception e) { |
||
89 | throw new MapControlCreationException(e); |
||
90 | } |
||
91 | } |
||
92 | |||
93 | /*
|
||
94 | * (non-Javadoc)
|
||
95 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#createMapControlDrawer(java.lang.String)
|
||
96 | */
|
||
97 | public MapControlDrawer createMapControlDrawer(String name) throws MapControlCreationException { |
||
98 | ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT); |
||
99 | try {
|
||
100 | return (MapControlDrawer)ep.create(name);
|
||
101 | } catch (Exception e) { |
||
102 | throw new MapControlCreationException(e); |
||
103 | } |
||
104 | } |
||
105 | |||
106 | /* (non-Javadoc)
|
||
107 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerDefaultMapControlDrawer(java.lang.Class)
|
||
108 | */
|
||
109 | public void registerDefaultMapControlDrawer(Class mapControlDrawerClass) { |
||
110 | if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
|
||
111 | throw new IllegalArgumentException(mapControlDrawerClass.getName() |
||
112 | + " must implement the MapControlDrawer interface");
|
||
113 | } |
||
114 | |||
115 | ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
|
||
116 | extensionPoint.append(DEFAULT_MAPCONTROLMANAGER_NAME, "Default MapControl", mapControlDrawerClass);
|
||
117 | } |
||
118 | |||
119 | /* (non-Javadoc)
|
||
120 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerMapControlDrawer(int, java.lang.Class)
|
||
121 | */
|
||
122 | public void registerMapControlDrawer(String name, |
||
123 | Class mapControlDrawerClass) {
|
||
124 | |||
125 | if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
|
||
126 | throw new IllegalArgumentException(mapControlDrawerClass.getName() |
||
127 | + " must implement the MapControlDrawer interface");
|
||
128 | } |
||
129 | 30349 | jpiera | |
130 | 30327 | jpiera | ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
|
131 | extensionPoint.append(name, "Default MapControl", mapControlDrawerClass);
|
||
132 | } |
||
133 | |||
134 | /* (non-Javadoc)
|
||
135 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnappingTolerance()
|
||
136 | */
|
||
137 | public int getTolerance() { |
||
138 | return snappingTolerance;
|
||
139 | } |
||
140 | |||
141 | /* (non-Javadoc)
|
||
142 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSnappingTolerance(int)
|
||
143 | */
|
||
144 | public void setTolerance(int tolerance) { |
||
145 | snappingTolerance = tolerance; |
||
146 | } |
||
147 | |||
148 | /* (non-Javadoc)
|
||
149 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#clearSnappers()
|
||
150 | */
|
||
151 | public void clearSnappers() { |
||
152 | snappers.clear(); |
||
153 | } |
||
154 | |||
155 | /* (non-Javadoc)
|
||
156 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getAxisReferenceSymbol()
|
||
157 | */
|
||
158 | public ISymbol getAxisReferenceSymbol() {
|
||
159 | if (axisReferencesSymbol == null){ |
||
160 | 30892 | cordinyana | axisReferencesSymbol = |
161 | mapContextManager.getSymbolManager() |
||
162 | 30327 | jpiera | .createSymbol(Geometry.TYPES.GEOMETRY, |
163 | 30349 | jpiera | new Color(100, 100, 100, 100)); |
164 | 30327 | jpiera | } |
165 | return axisReferencesSymbol;
|
||
166 | } |
||
167 | |||
168 | /* (non-Javadoc)
|
||
169 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getGeometrySelectionSymbol()
|
||
170 | */
|
||
171 | public ISymbol getGeometrySelectionSymbol() {
|
||
172 | if (geometrySelectionSymbol == null){ |
||
173 | 30892 | cordinyana | geometrySelectionSymbol = |
174 | mapContextManager.getSymbolManager() |
||
175 | 30327 | jpiera | .createSymbol(Geometry.TYPES.GEOMETRY, Color.RED);
|
176 | } |
||
177 | return geometrySelectionSymbol;
|
||
178 | } |
||
179 | |||
180 | /* (non-Javadoc)
|
||
181 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getHandlerSymbol()
|
||
182 | */
|
||
183 | public ISymbol getHandlerSymbol() {
|
||
184 | if (handlerSymbol == null){ |
||
185 | 30892 | cordinyana | handlerSymbol = |
186 | mapContextManager.getSymbolManager().createSymbol( |
||
187 | 30327 | jpiera | Geometry.TYPES.GEOMETRY, Color.ORANGE);
|
188 | } |
||
189 | return handlerSymbol;
|
||
190 | } |
||
191 | |||
192 | /* (non-Javadoc)
|
||
193 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSelectionSymbol()
|
||
194 | */
|
||
195 | public ISymbol getSelectionSymbol() {
|
||
196 | if (selectionSymbol == null){ |
||
197 | 30892 | cordinyana | selectionSymbol = |
198 | mapContextManager.getSymbolManager().createSymbol( |
||
199 | 30327 | jpiera | Geometry.TYPES.GEOMETRY, new Color(255, 0, 0, 100)); |
200 | } |
||
201 | return selectionSymbol;
|
||
202 | } |
||
203 | |||
204 | /*
|
||
205 | * (non-Javadoc)
|
||
206 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#setAxisReferenceSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
|
||
207 | */
|
||
208 | public void setAxisReferenceSymbol(ISymbol axisReferencesSymbol) { |
||
209 | this.axisReferencesSymbol = axisReferencesSymbol;
|
||
210 | } |
||
211 | |||
212 | /*
|
||
213 | * (non-Javadoc)
|
||
214 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#setGeometrySelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
|
||
215 | */
|
||
216 | public void setGeometrySelectionSymbol(ISymbol geometrySelectionSymbol) { |
||
217 | this.geometrySelectionSymbol = geometrySelectionSymbol;
|
||
218 | } |
||
219 | |||
220 | /*
|
||
221 | * (non-Javadoc)
|
||
222 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#setHandlerSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
|
||
223 | */
|
||
224 | public void setHandlerSymbol(ISymbol handlerSymbol) { |
||
225 | this.handlerSymbol = handlerSymbol;
|
||
226 | } |
||
227 | |||
228 | /*
|
||
229 | * (non-Javadoc)
|
||
230 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
|
||
231 | */
|
||
232 | public void setSelectionSymbol(ISymbol selectionSymbol) { |
||
233 | this.selectionSymbol = selectionSymbol;
|
||
234 | } |
||
235 | |||
236 | /* (non-Javadoc)
|
||
237 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#addSnapper(org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper)
|
||
238 | */
|
||
239 | public void registerSnapper(String name, Class snapperClass) { |
||
240 | if (!ISnapper.class.isAssignableFrom(snapperClass)) {
|
||
241 | throw new IllegalArgumentException(snapperClass.getName() |
||
242 | + " must implement the ISnapper interface");
|
||
243 | } |
||
244 | 30349 | jpiera | |
245 | 30327 | jpiera | ExtensionPoint extensionPoint = extensionPoints.add(SNAPPING_EXTENSION_POINT, "");
|
246 | 30349 | jpiera | Extension extension = extensionPoint.append(name, "", snapperClass);
|
247 | |||
248 | ISnapper snapper; |
||
249 | try {
|
||
250 | snapper = (ISnapper)extension.create(); |
||
251 | snappers.add(snapper); |
||
252 | 32728 | fpenarrubia | String nameClass=snapper.getClass().getName();
|
253 | nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
|
||
254 | boolean select = prefSnappers.getBoolean("snapper_activated" + nameClass, false); |
||
255 | int priority = prefs.getInt("snapper_priority" + nameClass,3); |
||
256 | snapper.setPriority(priority); |
||
257 | if (select){
|
||
258 | snapper.setEnabled(select); |
||
259 | } |
||
260 | |||
261 | 30349 | jpiera | } catch (Exception e) { |
262 | logger.error("It is not possible to create the snapper");
|
||
263 | } |
||
264 | 30327 | jpiera | } |
265 | |||
266 | /* (non-Javadoc)
|
||
267 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperAt(int)
|
||
268 | */
|
||
269 | public ISnapper getSnapperAt(int index) { |
||
270 | return snappers.get(index);
|
||
271 | } |
||
272 | |||
273 | /* (non-Javadoc)
|
||
274 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperCount()
|
||
275 | */
|
||
276 | public int getSnapperCount() { |
||
277 | return snappers.size();
|
||
278 | } |
||
279 | |||
280 | /* (non-Javadoc)
|
||
281 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#disableSnapping()
|
||
282 | */
|
||
283 | public void disableSnapping() { |
||
284 | snappers.clear(); |
||
285 | } |
||
286 | |||
287 | /* (non-Javadoc)
|
||
288 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#enableSnapping()
|
||
289 | */
|
||
290 | public void enableSnapping() { |
||
291 | ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager(); |
||
292 | 30349 | jpiera | ExtensionPoint ep = extensionPoints.get(SNAPPING_EXTENSION_POINT); |
293 | Iterator iterator = ep.iterator();
|
||
294 | 30327 | jpiera | |
295 | 30349 | jpiera | while (iterator.hasNext()) {
|
296 | try {
|
||
297 | Extension obj= (Extension)iterator.next(); |
||
298 | ISnapper snapper = (ISnapper) ep.create(obj.getName()); |
||
299 | snappers.add(snapper); |
||
300 | } catch (Exception e) { |
||
301 | logger.error("Creating a snapper", e);
|
||
302 | } |
||
303 | } |
||
304 | |||
305 | 30327 | jpiera | for (int n = 0; n < getSnapperCount(); n++) { |
306 | ISnapper snp = getSnapperAt(n); |
||
307 | String nameClass = snp.getClass().getName();
|
||
308 | nameClass = nameClass.substring(nameClass.lastIndexOf('.'));
|
||
309 | boolean select = prefs.getBoolean("snapper_activated" + nameClass, false); |
||
310 | if (select) {
|
||
311 | snp.setEnabled(select); |
||
312 | } |
||
313 | int priority = prefs.getInt("snapper_priority" + nameClass, 3); |
||
314 | snp.setPriority(priority); |
||
315 | } |
||
316 | 30349 | jpiera | |
317 | 30327 | jpiera | } |
318 | |||
319 | /* (non-Javadoc)
|
||
320 | * @see org.gvsig.fmap.mapcontrol.MapControlManager#getEditionPreferences()
|
||
321 | */
|
||
322 | public Preferences getEditionPreferences() { |
||
323 | return prefs;
|
||
324 | } |
||
325 | 32961 | jjdelcerro | |
326 | public MapControl createJMapControlPanel() throws MapControlCreationException { |
||
327 | MapControl mapControl = new MapControl();
|
||
328 | mapControl.setMapControlDrawer(this.createDefaultMapControlDrawer());
|
||
329 | return mapControl;
|
||
330 | } |
||
331 | 33429 | cordinyana | |
332 | public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
|
||
333 | Map<String, DynObjectSet> layerName2InfoByPoint) { |
||
334 | 33657 | cordinyana | return createLayersDynObjectSetComponent(layerName2InfoByPoint, false); |
335 | 33429 | cordinyana | } |
336 | 33657 | cordinyana | |
337 | public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
|
||
338 | Map<String, DynObjectSet> layerName2InfoByPoint, boolean writable) { |
||
339 | return new DefaultLayersDynObjectSetComponent(layerName2InfoByPoint, |
||
340 | writable); |
||
341 | } |
||
342 | 30327 | jpiera | } |