Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extEditing / src / com / iver / cit / gvsig / layers / VectorialLayerEdited.java @ 26912

History | View | Annotate | Download (26 KB)

1
package com.iver.cit.gvsig.layers;
2

    
3
import java.awt.Graphics2D;
4
import java.awt.Image;
5
import java.awt.geom.Point2D;
6
import java.awt.image.BufferedImage;
7
import java.util.ArrayList;
8
import java.util.ConcurrentModificationException;
9
import java.util.EmptyStackException;
10
import java.util.Iterator;
11

    
12
import org.cresques.cts.ICoordTrans;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.dal.exception.ReadException;
15
import org.gvsig.fmap.dal.feature.Feature;
16
import org.gvsig.fmap.dal.feature.FeatureSelection;
17
import org.gvsig.fmap.dal.feature.FeatureSet;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
19
import org.gvsig.fmap.geom.handler.Handler;
20
import org.gvsig.fmap.geom.operation.Draw;
21
import org.gvsig.fmap.geom.operation.DrawOperationContext;
22
import org.gvsig.fmap.geom.operation.GeometryOperationException;
23
import org.gvsig.fmap.geom.operation.GeometryOperationNotSupportedException;
24
import org.gvsig.fmap.geom.operation.tojts.ToJTS;
25
import org.gvsig.fmap.geom.primitive.DefaultEnvelope;
26
import org.gvsig.fmap.geom.primitive.Envelope;
27
import org.gvsig.fmap.mapcontext.ViewPort;
28
import org.gvsig.fmap.mapcontext.layers.CancelationException;
29
import org.gvsig.fmap.mapcontext.layers.FLayer;
30
import org.gvsig.fmap.mapcontext.layers.LayerDrawEvent;
31
import org.gvsig.fmap.mapcontext.layers.LayerDrawingListener;
32
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
33
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
34
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
35
import org.gvsig.fmap.mapcontext.rendering.symbols.FGraphicUtilities;
36
import org.gvsig.fmap.mapcontrol.MapControl;
37
import org.gvsig.tools.observer.Observable;
38
import org.gvsig.tools.observer.Observer;
39

    
40
import com.iver.andami.PluginServices;
41
import com.iver.andami.messages.NotificationManager;
42
import com.iver.andami.ui.mdiManager.IWindow;
43
import com.iver.cit.gvsig.CADExtension;
44
import com.iver.cit.gvsig.EditionChangeManager;
45
import com.iver.cit.gvsig.StartEditing;
46
import com.iver.cit.gvsig.ViewCommandStackExtension;
47
import com.iver.cit.gvsig.gui.cad.CADTool;
48
import com.iver.cit.gvsig.gui.cad.DefaultCADTool;
49
import com.iver.cit.gvsig.gui.cad.tools.SelectionCADTool;
50
import com.iver.cit.gvsig.project.documents.view.gui.View;
51
import com.vividsolutions.jts.geom.Geometry;
52

    
53
public class VectorialLayerEdited extends DefaultLayerEdited implements
54
                LayerDrawingListener, Observer {
55
        private ArrayList selectedHandler = new ArrayList();
56
        private Point2D lastPoint;
57
        private Point2D firstPoint;
58
        private CADTool cadtool = null;
59

    
60
        // private ArrayList snappers = new ArrayList();
61
        // private ArrayList layersToSnap = new ArrayList();
62
        private ILegend legend;
63
        /** Selecci?n previa* */
64
//        private ArrayList previousRowSelection = new ArrayList();
65
//        private ArrayList previousHandlerSelection = new ArrayList();
66
        private Image imageSelection;
67
        private Image imageHandlers;
68
        public static final boolean SAVEPREVIOUS = true;
69
        public static final boolean NOTSAVEPREVIOUS = false;
70
        private EditionChangeManager echm=null;
71

    
72
        public VectorialLayerEdited(FLayer lyr) {
73
                super(lyr);
74
                lyr.getMapContext().addLayerDrawingListener(this);
75
                // Por defecto, siempre hacemos snapping sobre la capa en edici?n.
76
                lyr.getMapContext().getLayersToSnap().add(lyr);
77
                try {
78
                        ((FLyrVect) lyr).getFeatureStore().addObserver(this);
79
                } catch (ReadException e) {
80
                        NotificationManager.addError(e.getMessage(), e);
81
                }
82
        }
83

    
84
        public ArrayList getSelectedHandler() {
85
                return selectedHandler;
86
        }
87

    
88
        public void clearSelection(boolean savePrevious) throws DataException {
89
                if (getFeatureStore() == null)
90
                        return;
91
                FeatureSelection selection = getFeatureStore().getFeatureSelection();
92

    
93
//                if (!selection.isEmpty() && savePrevious) {
94
//                        previousRowSelection.clear();
95
//                        previousHandlerSelection.clear();
96
//                }
97
//                if (savePrevious) {
98
//                        previousRowSelection.addAll(selection);
99
//                        previousHandlerSelection.addAll(selectedHandler);
100
//                }
101
                selectedHandler.clear();
102
                selection.deselectAll();
103
        }
104

    
105
//        public void restorePreviousSelection() throws ReadException {
106
//                FeatureSet selection = (FeatureSet) getFeatureStore().getSelection();
107
//                selection.dispose();
108
//                selectedHandler.clear();
109
//                selection.addAll(previousRowSelection);
110
//                selectedHandler.addAll(previousHandlerSelection);
111
//                // VectorialEditableAdapter vea=getVEA();
112
//                // FBitSet selection=vea.getSelection();
113
//                //
114
//                // selection.clear();
115
//                // selectedRow.clear();
116
//                // selectedHandler.clear();
117
//                //
118
//                // selectedRow.addAll(previousRowSelection);
119
//                // selectedHandler.addAll(previousHandlerSelection);
120
//                // for (int i = 0;i < selectedRow.size(); i++) {
121
//                // IRowEdited edRow = (IRowEdited) selectedRow.get(i);
122
//                // selection.set(edRow.getIndex());
123
//                // }
124
//
125
//                previousRowSelection.clear();
126
//                previousHandlerSelection.clear();
127
//        }
128

    
129
        public void selectWithPoint(double x, double y, boolean multipleSelection) {
130
                try {
131
                        firstPoint = new Point2D.Double(x, y);
132
                        FeatureStore featureStore = getFeatureStore();
133
                        FeatureSelection selection = (FeatureSelection) featureStore
134
                                        .getSelection();
135
                        if (!multipleSelection) {
136
                                clearSelection(SAVEPREVIOUS);
137
                        }
138
                        // Se comprueba si se pincha en una gemometr?a
139
                        ViewPort vp = getLayer().getMapContext().getViewPort();
140
                        double tol = vp.toMapDistance(MapControl.tolerance);
141

    
142
                        FeatureSet newSelection = ((FLyrVect) getLayer()).queryByPoint(
143
                                        firstPoint, tol, getFeatureStore().getDefaultFeatureType());
144

    
145
                        String strEPSG = vp.getProjection().getAbrev();
146
                        BufferedImage selectionImage = null;
147
                        BufferedImage handlersImage = null;
148
                        if (multipleSelection && getSelectionImage()!=null && getHandlersImage()!=null) {
149
                                selectionImage=(BufferedImage)getSelectionImage();
150
                                handlersImage = (BufferedImage)getHandlersImage();
151
                        }else{
152
                                selectionImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
153
                                handlersImage = new BufferedImage(vp.getImageWidth(), vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
154
                        }
155

    
156
                        Graphics2D gs = selectionImage.createGraphics();
157
                        Graphics2D gh = handlersImage.createGraphics();
158
                        Iterator iterator = newSelection.iterator();
159
                        while (iterator.hasNext()) {
160
                                Feature feature = (Feature) iterator.next();
161
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
162
                                                .getDefaultGeometry();
163
                                if (geom == null) {
164
                                        continue;
165
                                }
166
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
167
                                                .cloneGeometry();
168
                                // if (ct!=null)
169
                                // geomReproject.reProject(ct);
170
                                // if (geomReproject.intersects(new
171
                                // Rectangle2D.Double(rect.getMinimum(0),rect.getMaximum(0),rect.getMinimum(1)-rect.getMinimum(0),rect.getMaximum(1)-rect.getMaximum(0))))
172
                                // { // , 0.1)){
173
                                selection.select(feature);
174
                                // selection.set(feats[i].getIndex(), true);
175
                                // selectedRow.add(feats[i]);
176
                                DrawOperationContext doc = new DrawOperationContext();
177
                                doc.setGraphics(gs);
178
                                doc.setViewPort(vp);
179
                                doc.setSymbol(DefaultCADTool.selectionSymbol);
180
                                drawHandlers(geomReproject.cloneGeometry(), gh, vp);
181
                                geomReproject.invokeOperation(Draw.CODE, doc);// cloneGeometry().draw(gs,
182
                                // vp,
183
                                // DefaultCADTool.selectionSymbol);
184

    
185
                        }
186
                        setSelectionImage(selectionImage);
187
                        setHandlersImage(handlersImage);
188
                } catch (ReadException e) {
189
                        NotificationManager.addError(e.getMessage(), e);
190
                } catch (GeometryOperationNotSupportedException e) {
191
                        NotificationManager.addError(e.getMessage(), e);
192
                } catch (GeometryOperationException e) {
193
                        NotificationManager.addError(e.getMessage(), e);
194
                } catch (DataException e) {
195
                        NotificationManager.addError(e.getMessage(), e);
196
                }
197
        }
198

    
199
        public void selectWithSecondPoint(double x, double y) {
200
                try {
201
                        FeatureStore featureStore = getFeatureStore();
202

    
203
                        lastPoint = new Point2D.Double(x, y);
204
                        clearSelection(SAVEPREVIOUS);
205

    
206
                        ViewPort vp = getLayer().getMapContext().getViewPort();
207
                        double x1;
208
                        double y1;
209
                        double w1;
210
                        double h1;
211

    
212
                        if (firstPoint.getX() < lastPoint.getX()) {
213
                                x1 = firstPoint.getX();
214
                                w1 = lastPoint.getX() - firstPoint.getX();
215
                        } else {
216
                                x1 = lastPoint.getX();
217
                                w1 = firstPoint.getX() - lastPoint.getX();
218
                        }
219

    
220
                        if (firstPoint.getY() < lastPoint.getY()) {
221
                                y1 = firstPoint.getY();
222
                                h1 = lastPoint.getY() - firstPoint.getY();
223
                        } else {
224
                                y1 = lastPoint.getY();
225
                                h1 = firstPoint.getY() - lastPoint.getY();
226
                        }
227

    
228
                        Envelope envelope = new DefaultEnvelope(x1, y1, x1 + w1, y1 + h1);
229
                        String strEPSG = vp.getProjection().getAbrev();
230
                        BufferedImage selectionImage = new BufferedImage(
231
                                        vp.getImageWidth(), vp.getImageHeight(),
232
                                        BufferedImage.TYPE_INT_ARGB);
233
                        Graphics2D gs = selectionImage.createGraphics();
234
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
235
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
236
                        Graphics2D gh = handlersImage.createGraphics();
237
                        ICoordTrans ct = getLayer().getCoordTrans();
238

    
239
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
240
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
241
                        DrawOperationContext doc = new DrawOperationContext();
242
                        doc.setGraphics(gs);
243
                        doc.setViewPort(vp);
244
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
245
                        while (iterator.hasNext()) {
246
                                Feature feature = (Feature) iterator.next();
247
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
248
                                                .getDefaultGeometry();
249

    
250
                                if (geom == null) {
251
                                        continue;
252
                                }
253
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
254
                                                .cloneGeometry();
255
                                if (ct != null)
256
                                        geomReproject.reProject(ct);
257

    
258
                                if (firstPoint.getX() < lastPoint.getX()) {
259
                                        if (envelope.contains(geomReproject.getEnvelope())) {
260
                                                ((FeatureSelection) featureStore.getSelection())
261
                                                                .select(feature);
262
                                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
263
                                                drawHandlers(geom.cloneGeometry(), gh, vp);
264
                                        }
265
                                } else {
266
                                        if (geomReproject.getEnvelope().intersects(envelope.getGeometry()
267
                                                        .getEnvelope())) { // , 0.1)){
268
                                                ((FeatureSelection) featureStore.getSelection())
269
                                                                .select(feature);
270
                                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
271
                                                drawHandlers(geom.cloneGeometry(), gh, vp);
272
                                        }
273
                                }
274
                        }
275
                        setSelectionImage(selectionImage);
276
                        setHandlersImage(handlersImage);
277
                } catch (ReadException e) {
278
                        NotificationManager.addError(e.getMessage(), e);
279
                } catch (GeometryOperationNotSupportedException e) {
280
                        NotificationManager.addError(e.getMessage(), e);
281
                } catch (GeometryOperationException e) {
282
                        NotificationManager.addError(e.getMessage(), e);
283
                } catch (DataException e) {
284
                        NotificationManager.addError(e.getMessage(), e);
285
                }
286
        }
287

    
288
        public void selectInsidePolygon(org.gvsig.fmap.geom.Geometry polygon) {
289
                try {
290
                        FeatureStore featureStore = getFeatureStore();
291
                        clearSelection(SAVEPREVIOUS);
292
                        ViewPort vp = getLayer().getMapContext().getViewPort();
293
                        Envelope envelope = polygon.getEnvelope();
294

    
295
                        String strEPSG = vp.getProjection().getAbrev();
296
                        BufferedImage selectionImage = new BufferedImage(
297
                                vp.getImageWidth(), vp.getImageHeight(),
298
                                        BufferedImage.TYPE_INT_ARGB);
299
                        Graphics2D gs = selectionImage.createGraphics();
300
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
301
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
302
                        Graphics2D gh = handlersImage.createGraphics();
303
                        ICoordTrans ct = getLayer().getCoordTrans();
304
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
305
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
306
                        DrawOperationContext doc = new DrawOperationContext();
307
                        doc.setGraphics(gs);
308
                        doc.setViewPort(vp);
309
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
310
                        while (iterator.hasNext()) {
311
                                Feature feature = (Feature) iterator.next();
312
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
313
                                                .getDefaultGeometry();
314
                                if (geom == null) {
315
                                        continue;
316
                                }
317
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
318
                                                .cloneGeometry();
319
                                if (ct != null)
320
                                        geomReproject.reProject(ct);
321
                                if (contains(polygon, geomReproject)) {
322
                                        ((FeatureSelection) featureStore.getSelection())
323
                                                        .select(feature);
324
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
325
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
326
                                }
327
                        }
328
                        setSelectionImage(selectionImage);
329
                        setHandlersImage(handlersImage);
330
                } catch (ReadException e) {
331
                        NotificationManager.addError(e.getMessage(), e);
332
                } catch (DataException e) {
333
                        NotificationManager.addError(e.getMessage(), e);
334
                } catch (GeometryOperationNotSupportedException e) {
335
                        NotificationManager.addError(e.getMessage(), e);
336
                } catch (GeometryOperationException e) {
337
                        NotificationManager.addError(e.getMessage(), e);
338
                }
339
        }
340

    
341
        public void selectCrossPolygon(org.gvsig.fmap.geom.Geometry polygon) {
342
                try {
343
                        FeatureStore featureStore = getFeatureStore();
344
                        clearSelection(SAVEPREVIOUS);
345
                        ViewPort vp = getLayer().getMapContext().getViewPort();
346
                        Envelope envelope = polygon.getEnvelope();
347

    
348
                        String strEPSG = vp.getProjection().getAbrev();
349
                        BufferedImage selectionImage = new BufferedImage(
350
                                        vp.getImageWidth(), vp.getImageHeight(),
351
                                        BufferedImage.TYPE_INT_ARGB);
352
                        Graphics2D gs = selectionImage.createGraphics();
353
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
354
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
355
                        Graphics2D gh = handlersImage.createGraphics();
356
                        ICoordTrans ct = getLayer().getCoordTrans();
357
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
358
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
359

    
360
                        DrawOperationContext doc = new DrawOperationContext();
361
                        doc.setGraphics(gs);
362
                        doc.setViewPort(vp);
363
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
364
                        while (iterator.hasNext()) {
365
                                Feature feature = (Feature) iterator.next();
366
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
367
                                                .getDefaultGeometry();
368
                                if (geom == null) {
369
                                        continue;
370
                                }
371
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
372
                                                .cloneGeometry();
373
                                if (ct != null)
374
                                        geomReproject.reProject(ct);
375
                                if (contains(polygon, geomReproject)
376
                                                || intersects(polygon, geomReproject)) {
377
                                        ((FeatureSelection) featureStore.getSelection())
378
                                                        .select(feature);
379
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
380
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
381
                                }
382
                        }
383
                        setSelectionImage(selectionImage);
384
                        setHandlersImage(handlersImage);
385
                } catch (ReadException e) {
386
                        NotificationManager.addError(e.getMessage(), e);
387
                } catch (DataException e) {
388
                        NotificationManager.addError(e.getMessage(), e);
389
                } catch (GeometryOperationNotSupportedException e) {
390
                        NotificationManager.addError(e.getMessage(), e);
391
                } catch (GeometryOperationException e) {
392
                        NotificationManager.addError(e.getMessage(), e);
393
                }
394
        }
395

    
396
        public void selectOutPolygon(org.gvsig.fmap.geom.Geometry polygon) {
397
                try {
398
                        FeatureStore featureStore = getFeatureStore();
399
                        clearSelection(SAVEPREVIOUS);
400
                        ViewPort vp = getLayer().getMapContext().getViewPort();
401
                        Envelope envelope = polygon.getEnvelope();
402

    
403
                        String strEPSG = vp.getProjection().getAbrev();
404
                        BufferedImage selectionImage = new BufferedImage(
405
                                        vp.getImageWidth(), vp.getImageHeight(),
406
                                        BufferedImage.TYPE_INT_ARGB);
407
                        Graphics2D gs = selectionImage.createGraphics();
408
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
409
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
410
                        Graphics2D gh = handlersImage.createGraphics();
411
                        ICoordTrans ct = getLayer().getCoordTrans();
412
                        Iterator iterator = ((FLyrVect) getLayer()).queryByEnvelope(
413
                                        envelope, featureStore.getDefaultFeatureType()).iterator();
414

    
415
                        DrawOperationContext doc = new DrawOperationContext();
416
                        doc.setGraphics(gs);
417
                        doc.setViewPort(vp);
418
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
419
                        while (iterator.hasNext()) {
420
                                Feature feature = (Feature) iterator.next();
421
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
422
                                                .getDefaultGeometry();
423
                                if (geom == null) {
424
                                        continue;
425
                                }
426
                                org.gvsig.fmap.geom.Geometry geomReproject = geom
427
                                                .cloneGeometry();
428
                                if (ct != null)
429
                                        geomReproject.reProject(ct);
430
                                if (!contains(polygon, geomReproject)
431
                                                && !intersects(polygon, geomReproject)) {
432
                                        ((FeatureSelection) featureStore.getSelection())
433
                                                        .select(feature);
434
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
435
                                        drawHandlers(geom.cloneGeometry(), gh, vp);
436
                                }
437
                        }
438
                        setSelectionImage(selectionImage);
439
                        setHandlersImage(handlersImage);
440
                } catch (ReadException e) {
441
                        NotificationManager.addError(e.getMessage(), e);
442
                } catch (DataException e) {
443
                        NotificationManager.addError(e.getMessage(), e);
444
                } catch (GeometryOperationNotSupportedException e) {
445
                        NotificationManager.addError(e.getMessage(), e);
446
                } catch (GeometryOperationException e) {
447
                        NotificationManager.addError(e.getMessage(), e);
448
                }
449
        }
450

    
451
        public void selectAll() {
452
                try {
453
                        FeatureStore featureStore = getFeatureStore();
454
                        clearSelection(SAVEPREVIOUS);
455
                        ViewPort vp = getLayer().getMapContext().getViewPort();
456
                        BufferedImage selectionImage = new BufferedImage(
457
                                        vp.getImageWidth(), vp.getImageHeight(),
458
                                        BufferedImage.TYPE_INT_ARGB);
459
                        Graphics2D gs = selectionImage.createGraphics();
460
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
461
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
462
                        Graphics2D gh = handlersImage.createGraphics();
463
                        ICoordTrans ct = getLayer().getCoordTrans();
464
                        FeatureSet fCollection = (FeatureSet) featureStore.getDataSet();
465
                        Iterator iterator = fCollection.iterator();
466
                        featureStore.setSelection(fCollection);
467

    
468
                        DrawOperationContext doc = new DrawOperationContext();
469
                        doc.setGraphics(gs);
470
                        doc.setViewPort(vp);
471
                        doc.setSymbol(DefaultCADTool.selectionSymbol);
472

    
473
                        while (iterator.hasNext()) {
474
                                Feature feature = (Feature) iterator.next();
475
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
476
                                                .getDefaultGeometry();
477
                                if (ct != null)
478
                                        geom.reProject(ct);
479
                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
480
                                drawHandlers(geom.cloneGeometry(), gh, vp);
481
                        }
482
                        setSelectionImage(selectionImage);
483
                        setHandlersImage(handlersImage);
484
                } catch (ReadException e) {
485
                        NotificationManager.addError(e.getMessage(), e);
486
                } catch (DataException e) {
487
                        NotificationManager.addError(e.getMessage(), e);
488
                } catch (GeometryOperationNotSupportedException e) {
489
                        NotificationManager.addError(e.getMessage(), e);
490
                } catch (GeometryOperationException e) {
491
                        NotificationManager.addError(e.getMessage(), e);
492
                }
493
        }
494

    
495
//        public void refreshSelectionCache(Point2D firstPoint, CADToolAdapter cta) {
496
//                try {
497
//                        clearSelection(SAVEPREVIOUS);
498
//                        double min = java.lang.Double.MAX_VALUE;
499
//                        ViewPort vp = getLayer().getMapContext().getViewPort();
500
//                        BufferedImage selectionImage = new BufferedImage(
501
//                                        vp.getImageWidth(), vp.getImageHeight(),
502
//                                        BufferedImage.TYPE_INT_ARGB);
503
//                        Graphics2D gs = selectionImage.createGraphics();
504
//                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
505
//                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
506
//                        Graphics2D gh = handlersImage.createGraphics();
507
//                        FeatureStore featureStore = getFeatureStore();
508
//
509
//                        Iterator iterator = ((FeatureSelection) featureStore.getSelection())
510
//                                        .iterator();
511
//
512
//                        DrawOperationContext doc = new DrawOperationContext();
513
//                        doc.setGraphics(gs);
514
//                        doc.setViewPort(vp);
515
//                        doc.setSymbol(DefaultCADTool.selectionSymbol);
516
//                        while (iterator.hasNext()) {
517
//                                Feature feature = (Feature) iterator.next();
518
//                                Handler[] handlers = null;
519
//                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
520
//                                                .getDefaultGeometry();
521
//                                handlers = geom
522
//                                                .getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
523
//
524
//                                geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
525
//                                drawHandlers(geom.cloneGeometry(), gh, vp);
526
//                                // y miramos los handlers de cada entidad seleccionada
527
//                                min = cta.getMapControl().getViewPort().toMapDistance(
528
//                                                MapControl.tolerance);
529
//                                for (int j = 0; j < handlers.length; j++) {
530
//                                        Point2D handlerPoint = handlers[j].getPoint();
531
//                                        double distance = firstPoint.distance(handlerPoint);
532
//                                        if (distance <= min) {
533
//                                                min = distance;
534
//                                                selectedHandler.add(handlers[j]);
535
//                                        }
536
//                                }
537
//
538
//                        }
539
//
540
//                        setSelectionImage(selectionImage);
541
//                        setHandlersImage(handlersImage);
542
//                } catch (ReadException e) {
543
//                        NotificationManager.addError(e.getMessage(), e);
544
//                } catch (GeometryOperationNotSupportedException e) {
545
//                        NotificationManager.addError(e.getMessage(), e);
546
//                } catch (GeometryOperationException e) {
547
//                        NotificationManager.addError(e.getMessage(), e);
548
//                } catch (DataException e) {
549
//                        NotificationManager.addError(e.getMessage(), e);
550
//                }
551
//        }
552

    
553
        public void drawHandlers(org.gvsig.fmap.geom.Geometry geom, Graphics2D gs,
554
                        ViewPort vp) {
555
                // if (!(getLayer() instanceof FLyrAnnotation)){
556
                Handler[] handlers = geom
557
                                .getHandlers(org.gvsig.fmap.geom.Geometry.SELECTHANDLER);
558
                FGraphicUtilities.DrawHandlers(gs, vp.getAffineTransform(), handlers,
559
                                DefaultCADTool.handlerSymbol);
560
                // }
561
        }
562

    
563
        public Image getSelectionImage() {
564
                return imageSelection;
565
        }
566

    
567
        public void setSelectionImage(Image image) {
568
                imageSelection = image;
569
        }
570

    
571
        public Image getHandlersImage() {
572
                return imageHandlers;
573
        }
574

    
575
        public void setHandlersImage(Image image) {
576
                imageHandlers = image;
577
        }
578

    
579
        public void beforeLayerDraw(LayerDrawEvent e) throws CancelationException {
580
                FeatureStore featureStore = null;
581
                try {
582
                        featureStore = getFeatureStore();
583
                } catch (ReadException e2) {
584
                        e2.printStackTrace();
585
                }
586
                if (featureStore.isEditing()) {
587
                        ViewPort vp = getLayer().getMapContext().getViewPort();
588
                        BufferedImage selectionImage = new BufferedImage(
589
                                        vp.getImageWidth(), vp.getImageHeight(),
590
                                        BufferedImage.TYPE_INT_ARGB);
591
                        BufferedImage handlersImage = new BufferedImage(vp.getImageWidth(),
592
                                        vp.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
593
                        Graphics2D gs = selectionImage.createGraphics();
594
                        Graphics2D gh = handlersImage.createGraphics();
595
                        Iterator iterator = null;
596
                        try {
597
                                iterator = featureStore.getFeatureSelection()
598
                                                .iterator();
599
                        } catch (DataException e2) {
600
                                e2.printStackTrace();
601
                        }
602
                        try{
603
                        while (iterator.hasNext()) {
604
                                Feature feature = (Feature) iterator.next();
605
                                org.gvsig.fmap.geom.Geometry geom = (org.gvsig.fmap.geom.Geometry) feature
606
                                                .getDefaultGeometry();
607

    
608
                                DrawOperationContext doc = new DrawOperationContext();
609
                                doc.setGraphics(gs);
610
                                doc.setViewPort(vp);
611
                                doc.setSymbol(DefaultCADTool.selectionSymbol);
612
                                try {
613
                                        geom.cloneGeometry().invokeOperation(Draw.CODE, doc);
614
                                } catch (GeometryOperationNotSupportedException e1) {
615
                                        e1.printStackTrace();
616
                                } catch (GeometryOperationException e1) {
617
                                        e1.printStackTrace();
618
                                }
619
                                drawHandlers(geom.cloneGeometry(), gh, vp);
620
                        }
621
                        }catch (ConcurrentModificationException e1) {
622
//                                throw new CancelationException(e1);
623
                                //A mitad de pintado se cambia la selecci?n y por tanto no se puede seguir recorriendo la anterior.
624
                                return;
625
                        }
626
                        setSelectionImage(selectionImage);
627
                        setHandlersImage(handlersImage);
628
                }
629
        }
630

    
631
        public void afterLayerDraw(LayerDrawEvent e) throws CancelationException {
632
        }
633

    
634
        public void beforeGraphicLayerDraw(LayerDrawEvent e)
635
                        throws CancelationException {
636
        }
637

    
638
        public void afterLayerGraphicDraw(LayerDrawEvent e)
639
                        throws CancelationException {
640
        }
641

    
642
        private static boolean contains(org.gvsig.fmap.geom.Geometry g1,
643
                        org.gvsig.fmap.geom.Geometry g2) {
644
                try {
645
                        Geometry geometry1 = (Geometry) g1
646
                                        .invokeOperation(ToJTS.CODE, null);
647
                        Geometry geometry2 = (Geometry) g2
648
                                        .invokeOperation(ToJTS.CODE, null);
649
                        if (geometry1 == null || geometry2 == null)
650
                                return false;
651
                        return geometry1.contains(geometry2);
652
                } catch (GeometryOperationNotSupportedException e) {
653
                        e.printStackTrace();
654
                } catch (GeometryOperationException e) {
655
                        e.printStackTrace();
656
                }
657
                return false;
658
        }
659

    
660
        private static boolean intersects(org.gvsig.fmap.geom.Geometry g1,
661
                        org.gvsig.fmap.geom.Geometry g2) {
662
                try {
663
                        Geometry geometry1 = (Geometry) g1
664
                                        .invokeOperation(ToJTS.CODE, null);
665
                        Geometry geometry2 = (Geometry) g2
666
                                        .invokeOperation(ToJTS.CODE, null);
667
                        if (geometry1 == null || geometry2 == null)
668
                                return false;
669
                        return geometry1.intersects(geometry2);
670
                } catch (GeometryOperationNotSupportedException e) {
671
                        e.printStackTrace();
672
                } catch (GeometryOperationException e) {
673
                        e.printStackTrace();
674
                }
675
                return false;
676
        }
677

    
678
        public void activationGained(LayerEvent e) {
679
                if (ViewCommandStackExtension.csd != null) {
680
                        try {
681
                                ViewCommandStackExtension.csd.setModel(((FLyrVect) getLayer())
682
                                                .getFeatureStore());
683
                        } catch (ReadException e1) {
684
                                e1.printStackTrace();
685
                        } catch (DataException e1) {
686
                                e1.printStackTrace();
687
                        }
688
                }
689
                IWindow window = PluginServices.getMDIManager().getActiveWindow();
690
                if (window instanceof View) {
691
                        View view = (View) window;
692
                        if (e.getSource().isEditing()) {
693
                                view.showConsole();
694
                        }
695
                }
696
                if (cadtool != null) {
697
                        CADExtension.getCADToolAdapter().setCadTool(cadtool);
698
                        PluginServices.getMainFrame().setSelectedTool(cadtool.toString());
699
                        StartEditing.startCommandsApplicable(null, (FLyrVect) getLayer());
700
                        CADExtension.initFocus();
701
                }
702

    
703
        }
704

    
705
        public void activationLost(LayerEvent e) {
706
                try {
707
                        cadtool = CADExtension.getCADTool();
708
                        IWindow window = PluginServices.getMDIManager().getActiveWindow();
709
                        if (window instanceof View) {
710
                                View view = (View) window;
711
                                view.hideConsole();
712
                        }
713
                } catch (EmptyStackException e1) {
714
                        cadtool = new SelectionCADTool();
715
                        cadtool.init();
716
                }
717

    
718
        }
719

    
720
        public void setLegend(ILegend legend) {
721
                this.legend = legend;
722
        }
723

    
724
        public ILegend getLegend() {
725
                return legend;
726
        }
727

    
728
        public FeatureStore getFeatureStore() throws ReadException {
729
                return ((FLyrVect) getLayer()).getFeatureStore();
730
        }
731

    
732
        public void update(Observable observable, Object notification) {
733
                echm.update(observable, notification);
734
//                try {
735
//                        if (((FeatureSelection) getFeatureStore().getSelection()).isEmpty())
736
//                                clearSelection(NOTSAVEPREVIOUS);
737
//                } catch (ReadException e1) {
738
//                        NotificationManager.addError(e1.getMessage(), e1);
739
//                } catch (DataException e1) {
740
//                        NotificationManager.addError(e1.getMessage(), e1);
741
//                }
742
        }
743

    
744
        public EditionChangeManager getEditionChangeManager() {
745
                return echm;
746
        }
747

    
748
        public void setEditionChangeManager(EditionChangeManager echm) {
749
                this.echm = echm;
750
        }
751
}