Statistics
| Revision:

gvsig-vectorediting / org.gvsig.vectorediting / trunk / org.gvsig.vectorediting / org.gvsig.vectorediting.main / src / main / java / org / gvsig / vectorediting / main / Main.java @ 387

History | View | Annotate | Download (41.5 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2014 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 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
 * 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
package org.gvsig.vectorediting.main;
26

    
27
import java.awt.BorderLayout;
28
import java.awt.Dimension;
29
import java.awt.GridLayout;
30
import java.awt.event.ActionEvent;
31
import java.io.File;
32
import java.util.ArrayList;
33
import java.util.List;
34

    
35
import javax.swing.AbstractAction;
36
import javax.swing.JButton;
37
import javax.swing.JFileChooser;
38
import javax.swing.JFrame;
39
import javax.swing.JMenu;
40
import javax.swing.JMenuBar;
41
import javax.swing.JMenuItem;
42
import javax.swing.JToolBar;
43
import javax.swing.SwingUtilities;
44
import javax.swing.WindowConstants;
45

    
46
import org.cresques.cts.IProjection;
47
import org.slf4j.Logger;
48
import org.slf4j.LoggerFactory;
49

    
50
import org.gvsig.fmap.crs.CRSFactory;
51
import org.gvsig.fmap.dal.DALLocator;
52
import org.gvsig.fmap.dal.DataManager;
53
import org.gvsig.fmap.dal.DataStoreParameters;
54
import org.gvsig.fmap.dal.exception.InitializeException;
55
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
56
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
57
import org.gvsig.fmap.dal.feature.FeatureStore;
58
import org.gvsig.fmap.geom.primitive.Envelope;
59
import org.gvsig.fmap.mapcontext.MapContext;
60
import org.gvsig.fmap.mapcontext.MapContextLocator;
61
import org.gvsig.fmap.mapcontext.MapContextManager;
62
import org.gvsig.fmap.mapcontext.ViewPort;
63
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
64
import org.gvsig.fmap.mapcontext.layers.FLayer;
65
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
66
import org.gvsig.fmap.mapcontrol.MapControl;
67
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
68
import org.gvsig.fmap.mapcontrol.MapControlLocator;
69
import org.gvsig.fmap.mapcontrol.MapControlManager;
70
import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
71
import org.gvsig.fmap.mapcontrol.tools.PointSelectionListener;
72
import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
73
import org.gvsig.fmap.mapcontrol.tools.ZoomOutListenerImpl;
74
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
75
import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
76
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
77
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
78
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
79
import org.gvsig.tools.observer.Observable;
80
import org.gvsig.tools.observer.Observer;
81
import org.gvsig.tools.swing.api.ToolsSwingLocator;
82
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
83
import org.gvsig.utils.GenericFileFilter;
84
import org.gvsig.vectorediting.lib.api.EditingLocator;
85
import org.gvsig.vectorediting.lib.api.EditingManager;
86
import org.gvsig.vectorediting.lib.prov.arc.ArcEditingProviderFactory;
87
import org.gvsig.vectorediting.lib.prov.autopolygon.AutopolygonEditingProviderFactory;
88
import org.gvsig.vectorediting.lib.prov.circle3p.Circle3PEditingProviderFactory;
89
import org.gvsig.vectorediting.lib.prov.circle3p.Circumference3PEditingProviderFactory;
90
import org.gvsig.vectorediting.lib.prov.circlecr.CircleCREditingProviderFactory;
91
import org.gvsig.vectorediting.lib.prov.circlecr.CircumferenceCREditingProviderFactory;
92
import org.gvsig.vectorediting.lib.prov.duplicate.DuplicateEditingProviderFactory;
93
import org.gvsig.vectorediting.lib.prov.editvertex.EditVertexEditingProviderFactory;
94
import org.gvsig.vectorediting.lib.prov.ellipse.EllipseEditingProviderFactory;
95
import org.gvsig.vectorediting.lib.prov.ellipse.FilledEllipseEditingProviderFactory;
96
import org.gvsig.vectorediting.lib.prov.explode.ExplodeEditingProviderFactory;
97
import org.gvsig.vectorediting.lib.prov.extendline.ExtendLineEditingProviderFactory;
98
import org.gvsig.vectorediting.lib.prov.internalpolygon.InternalPolygonEditingProviderFactory;
99
import org.gvsig.vectorediting.lib.prov.join.JoinEditingProviderFactory;
100
import org.gvsig.vectorediting.lib.prov.line.LineEditingProviderFactory;
101
import org.gvsig.vectorediting.lib.prov.move.MoveEditingProviderFactory;
102
import org.gvsig.vectorediting.lib.prov.multipoint.MultipointEditingProviderFactory;
103
import org.gvsig.vectorediting.lib.prov.point.PointEditingProviderFactory;
104
import org.gvsig.vectorediting.lib.prov.polarmatrix.PolarMatrixEditingProviderFactory;
105
import org.gvsig.vectorediting.lib.prov.polyline.PolygonEditingProviderFactory;
106
import org.gvsig.vectorediting.lib.prov.polyline.PolylineEditingProviderFactory;
107
import org.gvsig.vectorediting.lib.prov.rectangle.FilledRectangleEditingProviderFactory;
108
import org.gvsig.vectorediting.lib.prov.rectangle.RectangleEditingProviderFactory;
109
import org.gvsig.vectorediting.lib.prov.rectangularmatrix.RectangularMatrixEditingProviderFactory;
110
import org.gvsig.vectorediting.lib.prov.regularpolygon.FilledRegularPolygonEditingProviderFactory;
111
import org.gvsig.vectorediting.lib.prov.regularpolygon.RegularPolygonEditingProviderFactory;
112
import org.gvsig.vectorediting.lib.prov.rotate.RotateEditingProviderFactory;
113
import org.gvsig.vectorediting.lib.prov.scale.ScaleEditingProviderFactory;
114
import org.gvsig.vectorediting.lib.prov.simplify.SimplifyEditingProviderFactory;
115
import org.gvsig.vectorediting.lib.prov.smoothline.SmoothLineEditingProviderFactory;
116
import org.gvsig.vectorediting.lib.prov.spline.FilledSplineEditingProviderFactory;
117
import org.gvsig.vectorediting.lib.prov.spline.SplineEditingProviderFactory;
118
import org.gvsig.vectorediting.lib.prov.split.SplitEditingProviderFactory;
119
import org.gvsig.vectorediting.lib.prov.splitline.SplitLineEditingProviderFactory;
120
import org.gvsig.vectorediting.lib.prov.stretch.StretchEditingProviderFactory;
121
import org.gvsig.vectorediting.lib.prov.trimline.TrimLineEditingProviderFactory;
122
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
123
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
124
import org.gvsig.vectorediting.swing.api.EditingContext;
125
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
126
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
127
import org.gvsig.vectorediting.swing.impl.DefaultEditingBehavior;
128

    
129
/**
130
 * Main executable class for testing the VectorEditing library.
131
 *
132
 * @author gvSIG Team
133
 * @version $Id$
134
 */
135
public class Main implements Observer {
136

    
137
    public static void main(String args[]) {
138
        new DefaultLibrariesInitializer().fullInitialize();
139
        Main main = new Main();
140
        main.doMain();
141
    }
142

    
143
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
144

    
145
    final EditingManager manager;
146

    
147
    final EditingSwingManager swingManager;
148

    
149
    final EditingProviderManager providerManager;
150

    
151
    final MapControlManager mapControlManager;
152

    
153
    final DataManager dataManager;
154

    
155
    final MapContextManager mapContextManager;
156

    
157
    DefaultEditingBehavior editingBehavior;
158

    
159
    MapControl mapControl;
160

    
161
    EditingContext editingContext;
162

    
163
    FeatureStore store;
164

    
165
    FLyrVect currentLayer;
166

    
167
    final String DEFAULT_CRS_CODE = "EPSG:23030";
168

    
169
    IProjection defaultProjection;
170

    
171
    JFrame mainFrame;
172

    
173
    JFrame paletteTools;
174

    
175
    JButton openPaletteToolsButtons;
176

    
177
    JButton editingExtensionButtons;
178

    
179
    JButton endEditingExtensionButtons;
180

    
181
    JButton cleanMapButton;
182

    
183
    List<JButton> buttons;
184

    
185
    public Main() {
186
        manager = EditingLocator.getManager();
187
        swingManager = EditingSwingLocator.getSwingManager();
188
        providerManager = EditingProviderLocator.getProviderManager();
189
        mapControlManager = MapControlLocator.getMapControlManager();
190
        dataManager = DALLocator.getDataManager();
191
        mapContextManager = MapContextLocator.getMapContextManager();
192
        defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
193

    
194
        MapContextLocator
195
            .registerDefaultOrderManager(DummieLayerOrderManager.class);
196
    }
197

    
198
    public void addLayer(String shpPath) throws InitializeException,
199
        ProviderNotRegisteredException, ValidateDataParametersException,
200
        LoadLayerException {
201
        DataStoreParameters params;
202
        params = dataManager.createStoreParameters("Shape");
203

    
204
        String dbfPath =
205
            shpPath.substring(0, shpPath.length() - 3).concat("dbf");
206
        String shxPath =
207
            shpPath.substring(0, shpPath.length() - 3).concat("shx");
208

    
209
        File shpFile = new File(shpPath);
210
        File dbFile = new File(dbfPath);
211
        File shxFile = new File(shxPath);
212

    
213
        params.setDynValue("shpFile", shpFile.getPath());
214
        params.setDynValue("dbfFile", dbFile.getPath());
215
        params.setDynValue("shxFile", shxFile.getPath());
216
        params.setDynValue("CRS", defaultProjection);
217

    
218
        store = (FeatureStore) dataManager.openStore("Shape", params);
219

    
220
        FLayer layer = mapContextManager.createLayer(store.getName(), store);
221
        mapControl.getMapContext().getLayers().addLayer(layer);
222
        layer.setActive(true);
223
        try {
224
            currentLayer = (FLyrVect) layer;
225
        } catch (Exception e) {
226
            logger.error("Can't load layer " + e.getMessage());
227
        }
228
        refreshButtons();
229
    }
230

    
231
    private void createActionButtons() {
232

    
233
        buttons = new ArrayList<JButton>();
234

    
235
        buttons.add(new JButton(getPointAction()));
236
        buttons.add(new JButton(getMultiPointAction()));
237
        buttons.add(new JButton(getLineAction()));
238
        buttons.add(new JButton(getArcAction()));
239
        buttons.add(new JButton(getCircumferenceCrAction()));
240
        buttons.add(new JButton(getCircleCrAction()));
241
        buttons.add(new JButton(getCircumference3PAction()));
242
        buttons.add(new JButton(getCircle3PAction()));
243
        buttons.add(new JButton(getPolylineAction()));
244
        buttons.add(new JButton(getPolygonAction()));
245
        buttons.add(new JButton(getEclipseAction()));
246
        buttons.add(new JButton(getFilledEclipseAction()));
247
        buttons.add(new JButton(getRegularPolygonAction()));
248
        buttons.add(new JButton(getFilledRegularPolygonAction()));
249
        buttons.add(new JButton(getRectangleAction()));
250
        buttons.add(new JButton(getFilledRectangleAction()));
251
        buttons.add(new JButton(getSplineAction()));
252
        buttons.add(new JButton(getFilledSplineAction()));
253
        buttons.add(new JButton(getAutopolygonAction()));
254
        buttons.add(new JButton(getInternalPolygonAction()));
255
        buttons.add(new JButton(getExplodeGeometryAction()));
256
        buttons.add(new JButton(getMoveAction()));
257
        buttons.add(new JButton(getDuplicateAction()));
258
        buttons.add(new JButton(getStretchAction()));
259
        buttons.add(new JButton(getRotateAction()));
260
        buttons.add(new JButton(getSplitLineAction()));
261
        buttons.add(new JButton(getSplitAction()));
262
        buttons.add(new JButton(getExtendLineAction()));
263
        buttons.add(new JButton(getTrimLineAction()));
264
        buttons.add(new JButton(getSimplifyAction()));
265
        buttons.add(new JButton(getScaleAction()));
266
        buttons.add(new JButton(getJoinAction()));
267
        buttons.add(new JButton(getSmoothLineAction()));
268
        buttons.add(new JButton(getRectangularMatrixAction()));
269
        buttons.add(new JButton(getPolarMatrixAction()));
270
        buttons.add(new JButton(getEditVertexAction()));
271

    
272
    }
273

    
274
    private JButton getOpenPaletteToolsButton() {
275

    
276
        if (openPaletteToolsButtons == null) {
277
            openPaletteToolsButtons = new JButton(getOpenPaletteToolsAction());
278
            openPaletteToolsButtons.setEnabled(false);
279
        }
280
        return openPaletteToolsButtons;
281
    }
282

    
283
    private JButton getEditingExtensionButton() {
284

    
285
        if (editingExtensionButtons == null) {
286
            editingExtensionButtons = new JButton(getEditingExtensionAction());
287
        }
288
        return editingExtensionButtons;
289
    }
290

    
291
    private JButton getEndEditingExtensionButton() {
292

    
293
        if (endEditingExtensionButtons == null) {
294
            endEditingExtensionButtons =
295
                new JButton(getEndEditingExtensionAction());
296
            endEditingExtensionButtons.setEnabled(false);
297
        }
298
        return endEditingExtensionButtons;
299
    }
300

    
301
    private JButton getCleanMapButton() {
302
        if (cleanMapButton == null) {
303
            cleanMapButton = new JButton(getCleanMapAction());
304
            cleanMapButton.setEnabled(false);
305
        }
306
        return cleanMapButton;
307
    }
308

    
309
    private AbstractAction getInternalPolygonAction() {
310
        return new AbstractAction(InternalPolygonEditingProviderFactory.PROVIDER_NAME) {
311

    
312
            /**
313
             *
314
             */
315
            private static final long serialVersionUID = -5366590032240258186L;
316

    
317
            public void actionPerformed(ActionEvent e) {
318
                editingContext = swingManager.getEditingContext(mapControl);
319
                editingContext
320
                    .activateService(InternalPolygonEditingProviderFactory.PROVIDER_NAME);
321
            }
322
        };
323
    }
324

    
325
    private AbstractAction getExplodeGeometryAction() {
326
        return new AbstractAction(ExplodeEditingProviderFactory.PROVIDER_NAME) {
327

    
328
            /**
329
             *
330
             */
331
            private static final long serialVersionUID = -5366590032240258186L;
332

    
333
            public void actionPerformed(ActionEvent e) {
334
                editingContext = swingManager.getEditingContext(mapControl);
335
                editingContext
336
                    .activateService(ExplodeEditingProviderFactory.PROVIDER_NAME);
337
            }
338
        };
339
    }
340

    
341
    private AbstractAction getMoveAction() {
342
        return new AbstractAction(MoveEditingProviderFactory.PROVIDER_NAME) {
343

    
344
            /**
345
             *
346
             */
347
            private static final long serialVersionUID = -5366590032240258186L;
348

    
349
            public void actionPerformed(ActionEvent e) {
350
                editingContext = swingManager.getEditingContext(mapControl);
351
                editingContext
352
                    .activateService(MoveEditingProviderFactory.PROVIDER_NAME);
353
            }
354
        };
355
    }
356

    
357
    private AbstractAction getDuplicateAction() {
358
        return new AbstractAction(DuplicateEditingProviderFactory.PROVIDER_NAME) {
359

    
360
            /**
361
             *
362
             */
363
            private static final long serialVersionUID = -5366590032240258186L;
364

    
365
            public void actionPerformed(ActionEvent e) {
366
                editingContext = swingManager.getEditingContext(mapControl);
367
                editingContext
368
                    .activateService(DuplicateEditingProviderFactory.PROVIDER_NAME);
369
            }
370
        };
371
    }
372

    
373
    private AbstractAction getSimplifyAction() {
374
        return new AbstractAction(SimplifyEditingProviderFactory.PROVIDER_NAME) {
375

    
376
            /**
377
             *
378
             */
379
            private static final long serialVersionUID = -5366590032240258186L;
380

    
381
            public void actionPerformed(ActionEvent e) {
382
                editingContext = swingManager.getEditingContext(mapControl);
383
                editingContext
384
                    .activateService(SimplifyEditingProviderFactory.PROVIDER_NAME);
385
            }
386
        };
387
    }
388

    
389
    private AbstractAction getFilledSplineAction() {
390
        return new AbstractAction(FilledSplineEditingProviderFactory.PROVIDER_NAME) {
391

    
392
            /**
393
             *
394
             */
395
            private static final long serialVersionUID = 357716596419507221L;
396

    
397
            public void actionPerformed(ActionEvent e) {
398
                editingContext = swingManager.getEditingContext(mapControl);
399
                editingContext
400
                    .activateService(FilledSplineEditingProviderFactory.PROVIDER_NAME);
401

    
402
            }
403
        };
404
    }
405

    
406
    private AbstractAction getSplineAction() {
407
        return new AbstractAction(SplineEditingProviderFactory.PROVIDER_NAME) {
408

    
409
            /**
410
             *
411
             */
412
            private static final long serialVersionUID = -2308770572409304622L;
413

    
414
            public void actionPerformed(ActionEvent e) {
415
                editingContext = swingManager.getEditingContext(mapControl);
416
                editingContext
417
                    .activateService(SplineEditingProviderFactory.PROVIDER_NAME);
418

    
419
            }
420
        };
421
    }
422

    
423
    private AbstractAction getFilledRectangleAction() {
424
        return new AbstractAction(FilledRectangleEditingProviderFactory.PROVIDER_NAME) {
425

    
426
            /**
427
             *
428
             */
429
            private static final long serialVersionUID = 2293196006002423664L;
430

    
431
            public void actionPerformed(ActionEvent e) {
432
                editingContext = swingManager.getEditingContext(mapControl);
433
                editingContext
434
                    .activateService(FilledRectangleEditingProviderFactory.PROVIDER_NAME);
435

    
436
            }
437
        };
438
    }
439

    
440
    private AbstractAction getRectangleAction() {
441
        return new AbstractAction(RectangleEditingProviderFactory.PROVIDER_NAME) {
442

    
443
            /**
444
             *
445
             */
446
            private static final long serialVersionUID = -6429005619655148416L;
447

    
448
            public void actionPerformed(ActionEvent e) {
449
                editingContext = swingManager.getEditingContext(mapControl);
450
                editingContext
451
                    .activateService(RectangleEditingProviderFactory.PROVIDER_NAME);
452

    
453
            }
454
        };
455
    }
456

    
457
    private AbstractAction getFilledRegularPolygonAction() {
458
        return new AbstractAction(FilledRegularPolygonEditingProviderFactory.PROVIDER_NAME) {
459

    
460
            /**
461
             *
462
             */
463
            private static final long serialVersionUID = 7944728685657584703L;
464

    
465
            public void actionPerformed(ActionEvent e) {
466
                editingContext = swingManager.getEditingContext(mapControl);
467
                editingContext
468
                    .activateService(FilledRegularPolygonEditingProviderFactory.PROVIDER_NAME);
469

    
470
            }
471
        };
472
    }
473

    
474
    private AbstractAction getRegularPolygonAction() {
475
        return new AbstractAction(RegularPolygonEditingProviderFactory.PROVIDER_NAME) {
476

    
477
            /**
478
             *
479
             */
480
            private static final long serialVersionUID = 1465569443777907186L;
481

    
482
            public void actionPerformed(ActionEvent e) {
483
                editingContext = swingManager.getEditingContext(mapControl);
484
                editingContext
485
                    .activateService(RegularPolygonEditingProviderFactory.PROVIDER_NAME);
486
            }
487
        };
488
    }
489

    
490
    private AbstractAction getPolygonAction() {
491
        return new AbstractAction(PolygonEditingProviderFactory.PROVIDER_NAME) {
492

    
493
            /**
494
             *
495
             */
496
            private static final long serialVersionUID = 966582628310445218L;
497

    
498
            public void actionPerformed(ActionEvent e) {
499
                editingContext = swingManager.getEditingContext(mapControl);
500
                editingContext
501
                    .activateService(PolygonEditingProviderFactory.PROVIDER_NAME);
502
            }
503
        };
504
    }
505

    
506
    private AbstractAction getPolylineAction() {
507
        return new AbstractAction(PolylineEditingProviderFactory.PROVIDER_NAME) {
508

    
509
            /**
510
             *
511
             */
512
            private static final long serialVersionUID = 2859732316623830924L;
513

    
514
            public void actionPerformed(ActionEvent e) {
515
                editingContext = swingManager.getEditingContext(mapControl);
516
                editingContext
517
                    .activateService(PolylineEditingProviderFactory.PROVIDER_NAME);
518
            }
519
        };
520
    }
521
    
522
    private AbstractAction getEclipseAction() {
523
        return new AbstractAction(EllipseEditingProviderFactory.PROVIDER_NAME) {
524

    
525
            /**
526
             *
527
             */
528
            private static final long serialVersionUID = -4698275458250358502L;
529

    
530
            public void actionPerformed(ActionEvent e) {
531
                editingContext = swingManager.getEditingContext(mapControl);
532
                editingContext
533
                    .activateService(EllipseEditingProviderFactory.PROVIDER_NAME);
534
            }
535
        };
536
    }
537

    
538
    private AbstractAction getFilledEclipseAction() {
539
        return new AbstractAction(FilledEllipseEditingProviderFactory.PROVIDER_NAME) {
540

    
541
            /**
542
             *
543
             */
544
            private static final long serialVersionUID = -4698275458250358502L;
545

    
546
            public void actionPerformed(ActionEvent e) {
547
                editingContext = swingManager.getEditingContext(mapControl);
548
                editingContext
549
                    .activateService(FilledEllipseEditingProviderFactory.PROVIDER_NAME);
550
            }
551
        };
552
    }
553

    
554
    private AbstractAction getCircumferenceCrAction() {
555
        return new AbstractAction(CircumferenceCREditingProviderFactory.PROVIDER_NAME) {
556

    
557
            /**
558
             *
559
             */
560
            private static final long serialVersionUID = -4422429984929119239L;
561

    
562
            public void actionPerformed(ActionEvent e) {
563
                editingContext = swingManager.getEditingContext(mapControl);
564
                editingContext
565
                    .activateService(CircumferenceCREditingProviderFactory.PROVIDER_NAME);
566
            }
567
        };
568
    }
569

    
570
    private AbstractAction getCircleCrAction() {
571
        return new AbstractAction(CircleCREditingProviderFactory.PROVIDER_NAME) {
572

    
573
            /**
574
             *
575
             */
576
            private static final long serialVersionUID = 1564163738941995373L;
577

    
578
            public void actionPerformed(ActionEvent e) {
579
                editingContext = swingManager.getEditingContext(mapControl);
580
                editingContext
581
                    .activateService(CircleCREditingProviderFactory.PROVIDER_NAME);
582
            }
583
        };
584
    }
585

    
586
    private AbstractAction getCircumference3PAction() {
587
        return new AbstractAction(Circumference3PEditingProviderFactory.PROVIDER_NAME) {
588

    
589
            /**
590
             *
591
             */
592
            private static final long serialVersionUID = -4422429984929119239L;
593

    
594
            public void actionPerformed(ActionEvent e) {
595
                editingContext = swingManager.getEditingContext(mapControl);
596
                editingContext
597
                    .activateService(Circumference3PEditingProviderFactory.PROVIDER_NAME);
598
            }
599
        };
600
    }
601

    
602
    private AbstractAction getCircle3PAction() {
603
        return new AbstractAction(Circle3PEditingProviderFactory.PROVIDER_NAME) {
604

    
605
            /**
606
             *
607
             */
608
            private static final long serialVersionUID = 1564163738941995373L;
609

    
610
            public void actionPerformed(ActionEvent e) {
611
                editingContext = swingManager.getEditingContext(mapControl);
612
                editingContext
613
                    .activateService(Circle3PEditingProviderFactory.PROVIDER_NAME);
614
            }
615
        };
616
    }
617

    
618
    private AbstractAction getArcAction() {
619
        return new AbstractAction(ArcEditingProviderFactory.PROVIDER_NAME) {
620

    
621
            /**
622
             *
623
             */
624
            private static final long serialVersionUID = 5529987067864211418L;
625

    
626
            public void actionPerformed(ActionEvent e) {
627
                editingContext = swingManager.getEditingContext(mapControl);
628
                editingContext
629
                    .activateService(ArcEditingProviderFactory.PROVIDER_NAME);
630
            }
631
        };
632
    }
633

    
634
    private AbstractAction getLineAction() {
635
        return new AbstractAction(LineEditingProviderFactory.PROVIDER_NAME) {
636

    
637
            /**
638
             *
639
             */
640
            private static final long serialVersionUID = 7464822491323014704L;
641

    
642
            public void actionPerformed(ActionEvent e) {
643
                editingContext = swingManager.getEditingContext(mapControl);
644
                editingContext
645
                    .activateService(LineEditingProviderFactory.PROVIDER_NAME);
646
            }
647
        };
648
    }
649

    
650
    private AbstractAction getPointAction() {
651
        return new AbstractAction(PointEditingProviderFactory.PROVIDER_NAME) {
652

    
653
            /**
654
             *
655
             */
656
            private static final long serialVersionUID = -9147590153911397886L;
657

    
658
            public void actionPerformed(ActionEvent e) {
659
                editingContext = swingManager.getEditingContext(mapControl);
660
                editingContext
661
                    .activateService(PointEditingProviderFactory.PROVIDER_NAME);
662
            }
663

    
664
        };
665
    }
666

    
667
    private AbstractAction getMultiPointAction() {
668
        return new AbstractAction(MultipointEditingProviderFactory.PROVIDER_NAME) {
669

    
670
            /**
671
             *
672
             */
673
            private static final long serialVersionUID = -9147590153911397886L;
674

    
675
            public void actionPerformed(ActionEvent e) {
676
                editingContext = swingManager.getEditingContext(mapControl);
677
                editingContext
678
                    .activateService(MultipointEditingProviderFactory.PROVIDER_NAME);
679
            }
680

    
681
        };
682
    }
683

    
684
    private AbstractAction getSplitLineAction() {
685
        return new AbstractAction(SplitLineEditingProviderFactory.PROVIDER_NAME) {
686

    
687
            /**
688
             *
689
             */
690
            private static final long serialVersionUID = -5366590032240258186L;
691

    
692
            public void actionPerformed(ActionEvent e) {
693
                editingContext = swingManager.getEditingContext(mapControl);
694
                editingContext
695
                    .activateService(SplitLineEditingProviderFactory.PROVIDER_NAME);
696
            }
697
        };
698
    }
699

    
700
    private AbstractAction getSplitAction() {
701
        return new AbstractAction(SplitEditingProviderFactory.PROVIDER_NAME) {
702

    
703
            /**
704
             *
705
             */
706
            private static final long serialVersionUID = -5366590032240258186L;
707

    
708
            public void actionPerformed(ActionEvent e) {
709
                editingContext = swingManager.getEditingContext(mapControl);
710
                editingContext
711
                    .activateService(SplitEditingProviderFactory.PROVIDER_NAME);
712
            }
713
        };
714
    }
715

    
716
    private AbstractAction getExtendLineAction() {
717
        return new AbstractAction(ExtendLineEditingProviderFactory.PROVIDER_NAME) {
718

    
719
            /**
720
             *
721
             */
722
            private static final long serialVersionUID = -5366590032240258186L;
723

    
724
            public void actionPerformed(ActionEvent e) {
725
                editingContext = swingManager.getEditingContext(mapControl);
726
                editingContext
727
                    .activateService(ExtendLineEditingProviderFactory.PROVIDER_NAME);
728
            }
729
        };
730
    }
731

    
732
    private AbstractAction getTrimLineAction() {
733
        return new AbstractAction(TrimLineEditingProviderFactory.PROVIDER_NAME) {
734

    
735
            /**
736
             *
737
             */
738
            private static final long serialVersionUID = -5366590032240258186L;
739

    
740
            public void actionPerformed(ActionEvent e) {
741
                editingContext = swingManager.getEditingContext(mapControl);
742
                editingContext
743
                    .activateService(TrimLineEditingProviderFactory.PROVIDER_NAME);
744
            }
745
        };
746
    }
747

    
748
    private AbstractAction getEndEditingExtensionAction() {
749
        return new AbstractAction("end-editing") {
750

    
751
            /**
752
             *
753
             */
754
            private static final long serialVersionUID = -1026680183527522379L;
755

    
756
            public void actionPerformed(ActionEvent e) {
757
                editingContext = swingManager.getEditingContext(mapControl);
758
                editingContext.endEdition(currentLayer);
759

    
760
                if (currentLayer != null && !currentLayer.isEditing()) {
761
                    getPaletteTools().setVisible(false);
762
                }
763

    
764
                refreshButtons();
765
            }
766
        };
767
    }
768

    
769
    private AbstractAction getRotateAction() {
770
        return new AbstractAction(RotateEditingProviderFactory.PROVIDER_NAME) {
771

    
772
            /**
773
            *
774
            */
775
            private static final long serialVersionUID = -1026680183527522379L;
776

    
777
            public void actionPerformed(ActionEvent e) {
778
                editingContext = swingManager.getEditingContext(mapControl);
779
                editingContext
780
                    .activateService(RotateEditingProviderFactory.PROVIDER_NAME);
781
            }
782
        };
783
    }
784

    
785
    private AbstractAction getEditingExtensionAction() {
786
        return new AbstractAction("start-editing") {
787

    
788
            /**
789
             *
790
             */
791
            private static final long serialVersionUID = 5524271695550380473L;
792

    
793
            public void actionPerformed(ActionEvent e) {
794
                editingContext = swingManager.getEditingContext(mapControl);
795
                registerObserver(editingContext);
796
                editingContext.beginEdition(currentLayer, null);
797
                refreshButtons();
798

    
799
                // XXX Forces component repaint.
800
                SwingUtilities.updateComponentTreeUI(mainFrame);
801
            }
802
        };
803
    }
804

    
805
    private AbstractAction getExitAction() {
806
        return new AbstractAction("Exit") {
807

    
808
            /**
809
             *
810
             */
811
            private static final long serialVersionUID = 7506436995278783992L;
812

    
813
            public void actionPerformed(ActionEvent e) {
814
                System.exit(0);
815
            }
816
        };
817
    }
818

    
819
    private AbstractAction getOpenPaletteToolsAction() {
820
        return new AbstractAction("Show palette tools") {
821

    
822
            /**
823
             *
824
             */
825
            private static final long serialVersionUID = -2643193186380529723L;
826

    
827
            public void actionPerformed(ActionEvent e) {
828
                getPaletteTools().setVisible(true);
829
            }
830
        };
831
    }
832

    
833
    private AbstractAction getAddLayerAction() {
834
        return new AbstractAction("Add layer") {
835

    
836
            /**
837
             *
838
             */
839
            private static final long serialVersionUID = -7527908235576117027L;
840

    
841
            public void actionPerformed(ActionEvent e) {
842
                ThreadSafeDialogsManager dlgManager =
843
                    ToolsSwingLocator.getThreadSafeDialogsManager();
844

    
845
                File[] file =
846
                    dlgManager.showChooserDialog("Seleccione archivo SHP",
847
                        JFileChooser.OPEN_DIALOG, JFileChooser.FILES_ONLY,
848
                        false, new File(System.getProperty("user.home")),
849
                        new GenericFileFilter(new String[] { ".shp" },
850
                            "(*.shp)"), true);
851

    
852
                if (file != null) {
853
                    try {
854
                        addLayer(file[0].getAbsolutePath());
855
                    } catch (Exception ex) {
856
                        logger.warn("Problems adding layer", ex);
857
                    }
858
                }
859
            }
860
        };
861
    }
862

    
863
    private AbstractAction getCleanMapAction() {
864
        return new AbstractAction("Clean Map") {
865

    
866
            /**
867
             *
868
             */
869
            private static final long serialVersionUID = 5059847015866672405L;
870

    
871
            public void actionPerformed(ActionEvent e) {
872
                MapContext mapContext = mapControl.getMapContext();
873
                mapContext.beginAtomicEvent();
874
                while (mapContext.getLayers().getLayersCount() > 0) {
875
                    mapContext.getLayers().removeLayer(0);
876
                }
877
                mapContext.endAtomicEvent();
878
                currentLayer = null;
879
                refreshButtons();
880
            }
881
        };
882
    }
883

    
884
    private AbstractAction getZoomAllAction() {
885
        return new AbstractAction("Zoom all") {
886

    
887
            /**
888
             *
889
             */
890
            private static final long serialVersionUID = -1338436395515982258L;
891

    
892
            public void actionPerformed(ActionEvent e) {
893
                zoomAll();
894
            }
895
        };
896
    }
897

    
898
    private AbstractAction getZoomAction() {
899
        return new AbstractAction("Zoom") {
900

    
901
            /**
902
             *
903
             */
904
            private static final long serialVersionUID = -7231543178928614445L;
905

    
906
            public void actionPerformed(ActionEvent e) {
907
                mapControl.setTool("zoom");
908
            }
909
        };
910
    }
911

    
912
    private AbstractAction getPanAction() {
913
        return new AbstractAction("Pan") {
914

    
915
            /**
916
             *
917
             */
918
            private static final long serialVersionUID = -6520053841602571307L;
919

    
920
            public void actionPerformed(ActionEvent e) {
921
                mapControl.setTool("pan");
922
            }
923
        };
924
    }
925

    
926
    private AbstractAction getAutopolygonAction() {
927
        return new AbstractAction(AutopolygonEditingProviderFactory.PROVIDER_NAME) {
928

    
929
            /**
930
             *
931
             */
932
            private static final long serialVersionUID = -6520053841602571307L;
933

    
934
            public void actionPerformed(ActionEvent e) {
935
                editingContext = swingManager.getEditingContext(mapControl);
936
                editingContext
937
                    .activateService(AutopolygonEditingProviderFactory.PROVIDER_NAME);
938
            }
939
        };
940
    }
941

    
942
    private AbstractAction getJoinAction() {
943
        return new AbstractAction(JoinEditingProviderFactory.PROVIDER_NAME) {
944

    
945
            /**
946
             *
947
             */
948
            private static final long serialVersionUID = -6520053841602571307L;
949

    
950
            public void actionPerformed(ActionEvent e) {
951
                editingContext = swingManager.getEditingContext(mapControl);
952
                editingContext
953
                    .activateService(JoinEditingProviderFactory.PROVIDER_NAME);
954
            }
955
        };
956
    }
957

    
958
    private AbstractAction getSmoothLineAction() {
959
        return new AbstractAction(SmoothLineEditingProviderFactory.PROVIDER_NAME) {
960

    
961
            /**
962
             *
963
             */
964
            private static final long serialVersionUID = 4659561526143686702L;
965

    
966
            public void actionPerformed(ActionEvent e) {
967
                editingContext = swingManager.getEditingContext(mapControl);
968
                editingContext
969
                    .activateService(SmoothLineEditingProviderFactory.PROVIDER_NAME);
970
            }
971
        };
972
    }
973

    
974
    private AbstractAction getScaleAction() {
975
        return new AbstractAction(ScaleEditingProviderFactory.PROVIDER_NAME) {
976

    
977
            /**
978
             *
979
             */
980
            private static final long serialVersionUID = -6520053841602571307L;
981

    
982
            public void actionPerformed(ActionEvent e) {
983
                editingContext = swingManager.getEditingContext(mapControl);
984
                editingContext
985
                    .activateService(ScaleEditingProviderFactory.PROVIDER_NAME);
986
            }
987
        };
988
    }
989

    
990
    private AbstractAction getRectangularMatrixAction() {
991
        return new AbstractAction(RectangularMatrixEditingProviderFactory.PROVIDER_NAME) {
992

    
993
            /**
994
             *
995
             */
996
            private static final long serialVersionUID = -6520053841602571307L;
997

    
998
            public void actionPerformed(ActionEvent e) {
999
                editingContext = swingManager.getEditingContext(mapControl);
1000
                editingContext
1001
                    .activateService(RectangularMatrixEditingProviderFactory.PROVIDER_NAME);
1002
            }
1003
        };
1004
    }
1005

    
1006
    private AbstractAction getPolarMatrixAction() {
1007
        return new AbstractAction(PolarMatrixEditingProviderFactory.PROVIDER_NAME) {
1008

    
1009
            /**
1010
             *
1011
             */
1012
            private static final long serialVersionUID = -6520053841602571307L;
1013

    
1014
            public void actionPerformed(ActionEvent e) {
1015
                editingContext = swingManager.getEditingContext(mapControl);
1016
                editingContext
1017
                    .activateService(PolarMatrixEditingProviderFactory.PROVIDER_NAME);
1018
            }
1019
        };
1020
    }
1021

    
1022
    private AbstractAction getEditVertexAction() {
1023
        return new AbstractAction(EditVertexEditingProviderFactory.PROVIDER_NAME) {
1024

    
1025
            /**
1026
             *
1027
             */
1028
            private static final long serialVersionUID = 6445235261647995856L;
1029

    
1030
            public void actionPerformed(ActionEvent e) {
1031
                editingContext = swingManager.getEditingContext(mapControl);
1032
                editingContext
1033
                    .activateService(EditVertexEditingProviderFactory.PROVIDER_NAME);
1034
            }
1035
        };
1036
    }
1037
    
1038
    private AbstractAction getStretchAction() {
1039
        return new AbstractAction(StretchEditingProviderFactory.PROVIDER_NAME) {
1040

    
1041
            /**
1042
             *
1043
             */
1044
            private static final long serialVersionUID = 6445235261647995856L;
1045

    
1046
            public void actionPerformed(ActionEvent e) {
1047
                editingContext = swingManager.getEditingContext(mapControl);
1048
                editingContext
1049
                    .activateService(StretchEditingProviderFactory.PROVIDER_NAME);
1050
            }
1051
        };
1052
    }
1053

    
1054
    private void createMenu() {
1055
        // Create the menu bar.
1056
        JMenuBar menuBar = new JMenuBar();
1057

    
1058
        // Build the menu.
1059
        JMenu menuFile = new JMenu("File");
1060
        menuFile.add(new JMenuItem(getExitAction()));
1061

    
1062
        menuBar.add(menuFile);
1063

    
1064
        mainFrame.setJMenuBar(menuBar);
1065
    }
1066

    
1067
    private JFrame getPaletteTools() {
1068
        if (paletteTools == null) {
1069
            paletteTools = new JFrame("Palette tools");
1070
            paletteTools.setLayout(new GridLayout(0, 2, 1, 5));
1071
            paletteTools.setLocation(0, 0);
1072
            paletteTools
1073
                .setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
1074

    
1075
            for (JButton button : buttons) {
1076
                paletteTools.add(button);
1077
            }
1078

    
1079
            paletteTools.pack();
1080
        }
1081
        return paletteTools;
1082
    }
1083

    
1084
    private void createToolBar() {
1085
        JToolBar toolBar = new JToolBar();
1086

    
1087
        toolBar.add(new JButton(getAddLayerAction()));
1088
        toolBar.add(getEditingExtensionButton());
1089
        toolBar.add(getEndEditingExtensionButton());
1090
        toolBar.add(new JButton(getPanAction()));
1091
        toolBar.add(new JButton(getZoomAction()));
1092
        toolBar.add(new JButton(getZoomAllAction()));
1093
        toolBar.add(getCleanMapButton());
1094
        toolBar.add(getOpenPaletteToolsButton());
1095

    
1096
        mainFrame.add(toolBar, BorderLayout.PAGE_START);
1097
    }
1098

    
1099
    public void doMain() {
1100

    
1101
        try {
1102
            MapContext mapContext =
1103
                new MapContext(new ViewPort(defaultProjection));
1104
            mapControl = mapControlManager.createJMapControlPanel(mapContext);
1105

    
1106
            mapControl.addBehavior("zoom", new Behavior[] {
1107
                new RectangleBehavior(new ZoomInListenerImpl(mapControl)),
1108
                new PointBehavior(new ZoomOutListenerImpl(mapControl),
1109
                    Behavior.BUTTON_RIGHT) });
1110
            mapControl.addBehavior("pan", new MoveBehavior(new PanListenerImpl(
1111
                mapControl)));
1112

    
1113
            mapControl.addBehavior("pointSelection",
1114
                new Behavior[] { new PointBehavior(new PointSelectionListener(
1115
                    mapControl)) });
1116

    
1117
            IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
1118
            mapControl.getViewPort().setProjection(defaultProjection);
1119

    
1120
            mapControl.setTool("pan");
1121

    
1122
            swingManager.registerEditingContext(mapControl);
1123

    
1124
            // Create buttons
1125
            createActionButtons();
1126

    
1127
        } catch (MapControlCreationException e) {
1128
            logger.error("Can't create mapControl", e);
1129
        }
1130

    
1131
        // Create JFrame to show data
1132
        mainFrame = new JFrame("Editing test app");
1133
        mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
1134
        mainFrame.setPreferredSize(new Dimension(800, 680));
1135
        mainFrame.add(mapControl, BorderLayout.CENTER);
1136

    
1137
        // Create menu bar
1138
        createMenu();
1139

    
1140
        // Create tools bar
1141
        createToolBar();
1142

    
1143
        // Display the window.
1144
        mainFrame.pack();
1145
        mainFrame.setLocation(500, 0);
1146
        mainFrame.setVisible(true);
1147
    }
1148

    
1149
    private void registerObserver(EditingContext editingContext) {
1150
        editingContext.addObserver(this);
1151
    }
1152

    
1153
    private void refreshButtons() {
1154

    
1155
        // Refresh palette tool buttons
1156
        for (JButton button : buttons) {
1157
            String acctionCommand = button.getActionCommand();
1158
            editingContext = swingManager.getEditingContext(mapControl);
1159
            boolean enable = editingContext.isServiceCompatible(acctionCommand);
1160
            button.setEnabled(enable);
1161
        }
1162

    
1163
        // Refresh toolbar buttons
1164

    
1165
        if (currentLayer != null) {
1166

    
1167
            if (currentLayer.isEditing()) {
1168
                getOpenPaletteToolsButton().setEnabled(true);
1169
                getEditingExtensionButton().setEnabled(false);
1170
                getEndEditingExtensionButton().setEnabled(true);
1171
                getCleanMapButton().setEnabled(false);
1172
            } else {
1173
                getOpenPaletteToolsButton().setEnabled(false);
1174
                getEditingExtensionButton().setEnabled(true);
1175
                getEndEditingExtensionButton().setEnabled(false);
1176
                getCleanMapButton().setEnabled(true);
1177
            }
1178
        } else {
1179
            getOpenPaletteToolsButton().setEnabled(false);
1180
            getEditingExtensionButton().setEnabled(false);
1181
            getEndEditingExtensionButton().setEnabled(false);
1182
            getCleanMapButton().setEnabled(false);
1183
        }
1184
    }
1185

    
1186
    private void zoomAll() {
1187
        MapContext mapContext = mapControl.getMapContext();
1188
        Envelope all = mapContext.getLayers().getFullEnvelope();
1189
        logger.info("Full extdents " + all.toString());
1190
        mapContext.getViewPort().setEnvelope(all);
1191
        mapContext.invalidate();
1192
    }
1193

    
1194
    public void update(Observable observable, Object notification) {
1195

    
1196
        if (observable instanceof EditingContext) {
1197
            refreshButtons();
1198
        }
1199
    }
1200
}