Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.fmap.control / src / main / java / org / gvsig / fmap / mapcontrol / impl / DefaultMapControlManager.java @ 42146

History | View | Annotate | Download (12.3 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
/*
25
 * AUTHORS (In addition to CIT):
26
 * 2009 {Iver T.I.}   {Task}
27
 */
28

    
29
package org.gvsig.fmap.mapcontrol.impl;
30

    
31
import java.awt.Color;
32
import java.util.ArrayList;
33
import java.util.HashSet;
34
import java.util.Iterator;
35
import java.util.LinkedHashSet;
36
import java.util.List;
37
import java.util.Map;
38
import java.util.Set;
39
import java.util.prefs.Preferences;
40

    
41
import org.slf4j.Logger;
42
import org.slf4j.LoggerFactory;
43

    
44
import org.gvsig.fmap.geom.Geometry;
45
import org.gvsig.fmap.mapcontext.MapContext;
46
import org.gvsig.fmap.mapcontext.MapContextLocator;
47
import org.gvsig.fmap.mapcontext.MapContextManager;
48
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
49
import org.gvsig.fmap.mapcontrol.MapControl;
50
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
51
import org.gvsig.fmap.mapcontrol.MapControlCreationListener;
52
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
53
import org.gvsig.fmap.mapcontrol.MapControlManager;
54
import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
55
import org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent;
56
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
57
import org.gvsig.tools.ToolsLocator;
58
import org.gvsig.tools.dynobject.DynObjectSet;
59
import org.gvsig.tools.extensionpoint.ExtensionPoint;
60
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
61
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
62

    
63
/**
64
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
65
 */
66
public class DefaultMapControlManager implements MapControlManager{
67
        private static final Logger logger = LoggerFactory.getLogger(MapControlManager.class);
68
        private static final String MAPCONTROL_MANAGER_EXTENSION_POINT = "MapControlManagerExtensionPoint";
69
        private static final String DEFAULT_MAPCONTROLMANAGER_NAME = null;
70
        private static final String SNAPPING_EXTENSION_POINT = "Snapper";
71

    
72
        private ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
73
        private int snappingTolerance = 4;
74
        private ISymbol selectionSymbol = null;
75
        private ISymbol axisReferencesSymbol = null;
76
        private ISymbol geometrySelectionSymbol = null;
77
        private ISymbol handlerSymbol = null;
78
        private static MapContextManager mapContextManager = MapContextLocator
79
        .getMapContextManager();
80
        private Preferences prefs = Preferences.userRoot().node( "cadtooladapter" );
81
        private static Preferences prefSnappers = Preferences.userRoot().node("snappers");
82
        private List<ISnapper> snappers = null;
83
        private Set<MapControlCreationListener> mapControlCreationListeners = new LinkedHashSet<MapControlCreationListener>();
84

    
85

    
86
        public DefaultMapControlManager() {
87
                super();
88
                snappers = new ArrayList<ISnapper>();
89
        }
90

    
91
        /* (non-Javadoc)
92
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#createDefaultMapControlDrawer()
93
         */
94
        public MapControlDrawer createDefaultMapControlDrawer() throws MapControlCreationException {
95
                ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
96
                try {
97
                        return (MapControlDrawer)ep.create(DEFAULT_MAPCONTROLMANAGER_NAME);
98
                } catch (Exception e) {
99
                        throw new MapControlCreationException(e);
100
                }
101
        }
102

    
103
        /*
104
         * (non-Javadoc)
105
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#createMapControlDrawer(java.lang.String)
106
         */
107
        public MapControlDrawer createMapControlDrawer(String name) throws MapControlCreationException {
108
                ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
109
                try {
110
                        return (MapControlDrawer)ep.create(name);
111
                } catch (Exception e) {
112
                        throw new MapControlCreationException(e);
113
                }
114
        }
115

    
116
        /* (non-Javadoc)
117
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerDefaultMapControlDrawer(java.lang.Class)
118
         */
119
        public void registerDefaultMapControlDrawer(Class mapControlDrawerClass) {
120
                if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
121
                        throw new IllegalArgumentException(mapControlDrawerClass.getName()
122
                                        + " must implement the MapControlDrawer interface");
123
                }
124

    
125
                ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
126
                extensionPoint.append(DEFAULT_MAPCONTROLMANAGER_NAME, "Default MapControl", mapControlDrawerClass);
127
        }
128

    
129
        /* (non-Javadoc)
130
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerMapControlDrawer(int, java.lang.Class)
131
         */
132
        public void registerMapControlDrawer(String name,
133
                        Class mapControlDrawerClass) {
134

    
135
                if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
136
                        throw new IllegalArgumentException(mapControlDrawerClass.getName()
137
                                        + " must implement the MapControlDrawer interface");
138
                }
139

    
140
                ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
141
                extensionPoint.append(name, "Default MapControl", mapControlDrawerClass);
142
        }
143

    
144
        /* (non-Javadoc)
145
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnappingTolerance()
146
         */
147
        public int getTolerance() {
148
                return snappingTolerance;
149
        }
150

    
151
        /* (non-Javadoc)
152
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSnappingTolerance(int)
153
         */
154
        public void setTolerance(int tolerance) {
155
                snappingTolerance = tolerance;
156
        }
157

    
158
        /* (non-Javadoc)
159
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#clearSnappers()
160
         */
161
        public void clearSnappers() {
162
                snappers.clear();
163
        }
164

    
165
        /* (non-Javadoc)
166
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getAxisReferenceSymbol()
167
         */
168
        public ISymbol getAxisReferenceSymbol() {
169
                if (axisReferencesSymbol == null){
170
                        axisReferencesSymbol =
171
                                        mapContextManager.getSymbolManager()
172
                        .createSymbol(Geometry.TYPES.GEOMETRY,
173
                                        new Color(100, 100, 100, 100));
174
                }
175
                return axisReferencesSymbol;
176
        }
177

    
178
        /* (non-Javadoc)
179
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getGeometrySelectionSymbol()
180
         */
181
        public ISymbol getGeometrySelectionSymbol() {
182
                if (geometrySelectionSymbol == null){
183
                        geometrySelectionSymbol =
184
                                        mapContextManager.getSymbolManager()
185
                        .createSymbol(Geometry.TYPES.GEOMETRY, Color.RED);
186
                }
187
                return geometrySelectionSymbol;
188
        }
189

    
190
        /* (non-Javadoc)
191
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getHandlerSymbol()
192
         */
193
        public ISymbol getHandlerSymbol() {
194
                if (handlerSymbol == null){
195
                        handlerSymbol =
196
                                        mapContextManager.getSymbolManager().createSymbol(
197
                                        Geometry.TYPES.GEOMETRY, Color.ORANGE);
198
                }
199
                return handlerSymbol;
200
        }
201

    
202
        /* (non-Javadoc)
203
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSelectionSymbol()
204
         */
205
        public ISymbol getSelectionSymbol() {
206
                if (selectionSymbol == null){
207
                        selectionSymbol =
208
                                        mapContextManager.getSymbolManager().createSymbol(
209
                                        Geometry.TYPES.GEOMETRY, new Color(255, 0, 0, 100));
210
                }
211
                return selectionSymbol;
212
        }
213

    
214
        /*
215
         * (non-Javadoc)
216
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setAxisReferenceSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
217
         */
218
        public void setAxisReferenceSymbol(ISymbol axisReferencesSymbol) {
219
                this.axisReferencesSymbol = axisReferencesSymbol;
220
        }
221

    
222
        /*
223
         * (non-Javadoc)
224
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setGeometrySelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
225
         */
226
        public void setGeometrySelectionSymbol(ISymbol geometrySelectionSymbol) {
227
                this.geometrySelectionSymbol = geometrySelectionSymbol;
228
        }
229

    
230
        /*
231
         * (non-Javadoc)
232
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setHandlerSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
233
         */
234
        public void setHandlerSymbol(ISymbol handlerSymbol) {
235
                this.handlerSymbol = handlerSymbol;
236
        }
237

    
238
        /*
239
         * (non-Javadoc)
240
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSelectionSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
241
         */
242
        public void setSelectionSymbol(ISymbol selectionSymbol) {
243
                this.selectionSymbol = selectionSymbol;
244
        }
245

    
246
        /* (non-Javadoc)
247
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#addSnapper(org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper)
248
         */
249
        public void registerSnapper(String name, Class snapperClass) {
250
                if (!ISnapper.class.isAssignableFrom(snapperClass)) {
251
                        throw new IllegalArgumentException(snapperClass.getName()
252
                                        + " must implement the ISnapper interface");
253
                }
254

    
255
                ExtensionPoint extensionPoint = extensionPoints.add(SNAPPING_EXTENSION_POINT, "");
256
                Extension extension = extensionPoint.append(name, "", snapperClass);
257

    
258
                ISnapper snapper;
259
                try {
260
                        snapper = (ISnapper)extension.create();
261
                        snappers.add(snapper);
262
            String nameClass=snapper.getClass().getName();
263
                nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
264
                boolean select = prefSnappers.getBoolean("snapper_activated" + nameClass, false);
265
                int priority = prefs.getInt("snapper_priority" + nameClass,3);
266
                snapper.setPriority(priority);
267
                if (select){
268
                          snapper.setEnabled(select);
269
                }
270

    
271
                } catch (Exception e) {
272
                        logger.error("It is not possible to create the snapper");
273
                }
274
        }
275

    
276
        /* (non-Javadoc)
277
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperAt(int)
278
         */
279
        public ISnapper getSnapperAt(int index) {
280
                return snappers.get(index);
281
        }
282

    
283
        /* (non-Javadoc)
284
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperCount()
285
         */
286
        public int getSnapperCount() {
287
                return snappers.size();
288
        }
289

    
290
        /* (non-Javadoc)
291
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#disableSnapping()
292
         */
293
        public void disableSnapping() {
294
                snappers.clear();
295
        }
296

    
297
        /* (non-Javadoc)
298
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#enableSnapping()
299
         */
300
        public void enableSnapping() {
301
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
302
                ExtensionPoint ep = extensionPoints.get(SNAPPING_EXTENSION_POINT);
303
                Iterator iterator = ep.iterator();
304

    
305
                while (iterator.hasNext()) {
306
                        try {
307
                                Extension obj= (Extension)iterator.next();
308
                                ISnapper snapper = (ISnapper) ep.create(obj.getName());
309
                                snappers.add(snapper);
310
                        } catch (Exception e) {
311
                                logger.error("Creating a snapper", e);
312
                        }
313
                }
314

    
315
                for (int n = 0; n < getSnapperCount(); n++) {
316
                        ISnapper snp = getSnapperAt(n);
317
                        String nameClass = snp.getClass().getName();
318
                        nameClass = nameClass.substring(nameClass.lastIndexOf('.'));
319
                        boolean select = prefs.getBoolean("snapper_activated" + nameClass, false);
320
                        if (select) {
321
                                snp.setEnabled(select);
322
                        }
323
                        int priority = prefs.getInt("snapper_priority" + nameClass, 3);
324
                        snp.setPriority(priority);
325
                }
326

    
327
        }
328

    
329
        /* (non-Javadoc)
330
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getEditionPreferences()
331
         */
332
        public Preferences getEditionPreferences() {
333
                return prefs;
334
        }
335

    
336
        public MapControl createJMapControlPanel(MapContext mapContext) throws MapControlCreationException {
337
                MapControl mapControl = new MapControl(mapContext);
338
                mapControl.setMapControlDrawer(this.createDefaultMapControlDrawer());
339
                for( MapControlCreationListener listener : this.mapControlCreationListeners ) {
340
                    if( listener!=null ) {
341
                        mapControl = listener.mapControlCreated(mapControl);
342
                    }
343
                }
344
                return mapControl;
345
        }
346

    
347
        public void addMapControlCreationListener(MapControlCreationListener listener) {
348
            this.mapControlCreationListeners.add(listener);
349
        }
350

    
351
    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
352
        Map<String, DynObjectSet> layerName2InfoByPoint) {
353
        return createLayersDynObjectSetComponent(layerName2InfoByPoint, false);
354
    }
355

    
356
    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
357
        Map<String, DynObjectSet> layerName2InfoByPoint, boolean writable) {
358
        return new DefaultLayersDynObjectSetComponent(layerName2InfoByPoint,
359
            writable);
360
    }
361
}