Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2020 / libraries / libFMap_controls / src / org / gvsig / fmap / mapcontrol / impl / DefaultMapControlManager.java @ 33783

History | View | Annotate | Download (11.6 KB)

1
/* 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
import java.util.Map;
34
import java.util.prefs.Preferences;
35

    
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

    
39
import org.gvsig.fmap.geom.Geometry;
40
import org.gvsig.fmap.mapcontext.MapContextLocator;
41
import org.gvsig.fmap.mapcontext.MapContextManager;
42
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
43
import org.gvsig.fmap.mapcontrol.MapControl;
44
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
45
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
46
import org.gvsig.fmap.mapcontrol.MapControlManager;
47
import org.gvsig.fmap.mapcontrol.swing.dynobject.LayersDynObjectSetComponent;
48
import org.gvsig.fmap.mapcontrol.swing.dynobject.impl.DefaultLayersDynObjectSetComponent;
49
import org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper;
50
import org.gvsig.tools.ToolsLocator;
51
import org.gvsig.tools.dynobject.DynObjectSet;
52
import org.gvsig.tools.extensionpoint.ExtensionPoint;
53
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
54
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
55

    
56
/**
57
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
58
 */
59
public class DefaultMapControlManager implements MapControlManager{
60
        private static final Logger logger = LoggerFactory.getLogger(MapControlManager.class);
61
        private static final String MAPCONTROL_MANAGER_EXTENSION_POINT = "MapControlManagerExtensionPoint";
62
        private static final String DEFAULT_MAPCONTROLMANAGER_NAME = null;
63
        private static final String SNAPPING_EXTENSION_POINT = "Snapper";
64

    
65
        private ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
66
        private int snappingTolerance = 4;
67
        private ISymbol selectionSymbol = null;        
68
        private ISymbol axisReferencesSymbol = null;
69
        private ISymbol geometrySelectionSymbol = null;
70
        private ISymbol handlerSymbol = null;
71
        private static MapContextManager mapContextManager = MapContextLocator
72
        .getMapContextManager();
73
        private Preferences prefs = Preferences.userRoot().node( "cadtooladapter" );
74
        private static Preferences prefSnappers = Preferences.userRoot().node("snappers");
75
        private ArrayList<ISnapper> snappers = null;        
76

    
77
        public DefaultMapControlManager() {
78
                super();
79
                snappers = new ArrayList<ISnapper>();
80
        }
81

    
82
        /* (non-Javadoc)
83
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#createDefaultMapControlDrawer()
84
         */
85
        public MapControlDrawer createDefaultMapControlDrawer() throws MapControlCreationException {
86
                ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
87
                try {
88
                        return (MapControlDrawer)ep.create(DEFAULT_MAPCONTROLMANAGER_NAME);                        
89
                } catch (Exception e) {
90
                        throw new MapControlCreationException(e);
91
                }        
92
        }
93

    
94
        /*
95
         * (non-Javadoc)
96
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#createMapControlDrawer(java.lang.String)
97
         */
98
        public MapControlDrawer createMapControlDrawer(String name) throws MapControlCreationException {
99
                ExtensionPoint ep = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT);
100
                try {
101
                        return (MapControlDrawer)ep.create(name);                        
102
                } catch (Exception e) {
103
                        throw new MapControlCreationException(e);
104
                }
105
        }
106

    
107
        /* (non-Javadoc)
108
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerDefaultMapControlDrawer(java.lang.Class)
109
         */
110
        public void registerDefaultMapControlDrawer(Class mapControlDrawerClass) {
111
                if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
112
                        throw new IllegalArgumentException(mapControlDrawerClass.getName()
113
                                        + " must implement the MapControlDrawer interface");
114
                }
115

    
116
                ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
117
                extensionPoint.append(DEFAULT_MAPCONTROLMANAGER_NAME, "Default MapControl", mapControlDrawerClass);                
118
        }
119

    
120
        /* (non-Javadoc)
121
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#registerMapControlDrawer(int, java.lang.Class)
122
         */
123
        public void registerMapControlDrawer(String name,
124
                        Class mapControlDrawerClass) {
125

    
126
                if (!MapControlDrawer.class.isAssignableFrom(mapControlDrawerClass)) {
127
                        throw new IllegalArgumentException(mapControlDrawerClass.getName()
128
                                        + " must implement the MapControlDrawer interface");
129
                }
130

    
131
                ExtensionPoint extensionPoint = extensionPoints.add(MAPCONTROL_MANAGER_EXTENSION_POINT, "");
132
                extensionPoint.append(name, "Default MapControl", mapControlDrawerClass);                
133
        }
134

    
135
        /* (non-Javadoc)
136
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnappingTolerance()
137
         */
138
        public int getTolerance() {
139
                return snappingTolerance;
140
        }
141

    
142
        /* (non-Javadoc)
143
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setSnappingTolerance(int)
144
         */
145
        public void setTolerance(int tolerance) {
146
                snappingTolerance = tolerance;                
147
        }
148

    
149
        /* (non-Javadoc)
150
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#clearSnappers()
151
         */
152
        public void clearSnappers() {
153
                snappers.clear();                
154
        }
155

    
156
        /* (non-Javadoc)
157
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getAxisReferenceSymbol()
158
         */
159
        public ISymbol getAxisReferenceSymbol() {
160
                if (axisReferencesSymbol == null){
161
                        axisReferencesSymbol =
162
                                        mapContextManager.getSymbolManager()
163
                        .createSymbol(Geometry.TYPES.GEOMETRY,
164
                                        new Color(100, 100, 100, 100));
165
                }
166
                return axisReferencesSymbol;
167
        }
168

    
169
        /* (non-Javadoc)
170
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getGeometrySelectionSymbol()
171
         */
172
        public ISymbol getGeometrySelectionSymbol() {
173
                if (geometrySelectionSymbol == null){
174
                        geometrySelectionSymbol =
175
                                        mapContextManager.getSymbolManager()
176
                        .createSymbol(Geometry.TYPES.GEOMETRY, Color.RED);
177
                }                
178
                return geometrySelectionSymbol;
179
        }
180

    
181
        /* (non-Javadoc)
182
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getHandlerSymbol()
183
         */
184
        public ISymbol getHandlerSymbol() {
185
                if (handlerSymbol == null){
186
                        handlerSymbol =
187
                                        mapContextManager.getSymbolManager().createSymbol(
188
                                        Geometry.TYPES.GEOMETRY, Color.ORANGE);
189
                }
190
                return handlerSymbol;
191
        }
192

    
193
        /* (non-Javadoc)
194
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSelectionSymbol()
195
         */
196
        public ISymbol getSelectionSymbol() {
197
                if (selectionSymbol == null){
198
                        selectionSymbol =
199
                                        mapContextManager.getSymbolManager().createSymbol(
200
                                        Geometry.TYPES.GEOMETRY, new Color(255, 0, 0, 100)); 
201
                }
202
                return selectionSymbol;
203
        }
204

    
205
        /*
206
         * (non-Javadoc)
207
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#setAxisReferenceSymbol(org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol)
208
         */
209
        public void setAxisReferenceSymbol(ISymbol axisReferencesSymbol) {
210
                this.axisReferencesSymbol = axisReferencesSymbol;                
211
        }
212

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

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

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

    
237
        /* (non-Javadoc)
238
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#addSnapper(org.gvsig.fmap.mapcontrol.tools.snapping.snappers.ISnapper)
239
         */
240
        public void registerSnapper(String name, Class snapperClass) {
241
                if (!ISnapper.class.isAssignableFrom(snapperClass)) {
242
                        throw new IllegalArgumentException(snapperClass.getName()
243
                                        + " must implement the ISnapper interface");
244
                }                
245

    
246
                ExtensionPoint extensionPoint = extensionPoints.add(SNAPPING_EXTENSION_POINT, "");
247
                Extension extension = extensionPoint.append(name, "", snapperClass);
248

    
249
                ISnapper snapper;
250
                try {
251
                        snapper = (ISnapper)extension.create();
252
                        snappers.add(snapper);
253
            String nameClass=snapper.getClass().getName();
254
                nameClass=nameClass.substring(nameClass.lastIndexOf('.'));
255
                boolean select = prefSnappers.getBoolean("snapper_activated" + nameClass, false);
256
                int priority = prefs.getInt("snapper_priority" + nameClass,3);
257
                snapper.setPriority(priority);
258
                if (select){
259
                          snapper.setEnabled(select);   
260
                }           
261
                        
262
                } catch (Exception e) {
263
                        logger.error("It is not possible to create the snapper");
264
                }       
265
        }
266

    
267
        /* (non-Javadoc)
268
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperAt(int)
269
         */
270
        public ISnapper getSnapperAt(int index) {
271
                return snappers.get(index);
272
        }
273

    
274
        /* (non-Javadoc)
275
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getSnapperCount()
276
         */
277
        public int getSnapperCount() {
278
                return snappers.size();
279
        }
280

    
281
        /* (non-Javadoc)
282
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#disableSnapping()
283
         */
284
        public void disableSnapping() {
285
                snappers.clear();                
286
        }
287

    
288
        /* (non-Javadoc)
289
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#enableSnapping()
290
         */
291
        public void enableSnapping() {
292
                ExtensionPointManager extensionPoints = ToolsLocator.getExtensionPointManager();
293
                ExtensionPoint ep = extensionPoints.get(SNAPPING_EXTENSION_POINT);
294
                Iterator iterator = ep.iterator();
295

    
296
                while (iterator.hasNext()) {
297
                        try {
298
                                Extension obj= (Extension)iterator.next();
299
                                ISnapper snapper = (ISnapper) ep.create(obj.getName());
300
                                snappers.add(snapper);
301
                        } catch (Exception e) {
302
                                logger.error("Creating a snapper", e);
303
                        }
304
                }
305

    
306
                for (int n = 0; n < getSnapperCount(); n++) {
307
                        ISnapper snp = getSnapperAt(n);
308
                        String nameClass = snp.getClass().getName();
309
                        nameClass = nameClass.substring(nameClass.lastIndexOf('.'));
310
                        boolean select = prefs.getBoolean("snapper_activated" + nameClass, false);
311
                        if (select) {
312
                                snp.setEnabled(select);                                
313
                        }
314
                        int priority = prefs.getInt("snapper_priority" + nameClass, 3);
315
                        snp.setPriority(priority);
316
                }
317

    
318
        }
319

    
320
        /* (non-Javadoc)
321
         * @see org.gvsig.fmap.mapcontrol.MapControlManager#getEditionPreferences()
322
         */
323
        public Preferences getEditionPreferences() {
324
                return prefs;
325
        }
326

    
327
        public MapControl createJMapControlPanel() throws MapControlCreationException {
328
                MapControl mapControl = new MapControl();
329
                mapControl.setMapControlDrawer(this.createDefaultMapControlDrawer());
330
                return mapControl;
331
        }
332

    
333
    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
334
        Map<String, DynObjectSet> layerName2InfoByPoint) {
335
        return createLayersDynObjectSetComponent(layerName2InfoByPoint, false);
336
    }
337

    
338
    public LayersDynObjectSetComponent createLayersDynObjectSetComponent(
339
        Map<String, DynObjectSet> layerName2InfoByPoint, boolean writable) {
340
        return new DefaultLayersDynObjectSetComponent(layerName2InfoByPoint,
341
            writable);
342
    }
343
}