Statistics
| Revision:

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
}