Statistics
| Revision:

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

History | View | Annotate | Download (14.5 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 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
package org.gvsig.vectorediting.main;
25

    
26
import java.awt.BorderLayout;
27
import java.awt.Dimension;
28
import java.awt.GridLayout;
29
import java.awt.event.ActionEvent;
30
import java.io.File;
31

    
32
import javax.swing.AbstractAction;
33
import javax.swing.JButton;
34
import javax.swing.JFrame;
35
import javax.swing.JLabel;
36
import javax.swing.JMenu;
37
import javax.swing.JMenuBar;
38
import javax.swing.JMenuItem;
39
import javax.swing.JTextField;
40
import javax.swing.JToolBar;
41
import javax.swing.WindowConstants;
42

    
43
import org.cresques.cts.IProjection;
44
import org.gvsig.fmap.crs.CRSFactory;
45
import org.gvsig.fmap.dal.DALLocator;
46
import org.gvsig.fmap.dal.DataManager;
47
import org.gvsig.fmap.dal.DataStoreParameters;
48
import org.gvsig.fmap.dal.exception.InitializeException;
49
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
50
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
51
import org.gvsig.fmap.dal.feature.FeatureStore;
52
import org.gvsig.fmap.geom.primitive.Envelope;
53
import org.gvsig.fmap.mapcontext.MapContext;
54
import org.gvsig.fmap.mapcontext.MapContextLocator;
55
import org.gvsig.fmap.mapcontext.MapContextManager;
56
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
57
import org.gvsig.fmap.mapcontext.layers.FLayer;
58
import org.gvsig.fmap.mapcontext.layers.order.impl.TrivialLayerOrderManager;
59
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
60
import org.gvsig.fmap.mapcontrol.MapControl;
61
import org.gvsig.fmap.mapcontrol.MapControlCreationException;
62
import org.gvsig.fmap.mapcontrol.MapControlLocator;
63
import org.gvsig.fmap.mapcontrol.MapControlManager;
64
import org.gvsig.fmap.mapcontrol.tools.PanListenerImpl;
65
import org.gvsig.fmap.mapcontrol.tools.ZoomInListenerImpl;
66
import org.gvsig.fmap.mapcontrol.tools.ZoomOutRightButtonListener;
67
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
68
import org.gvsig.fmap.mapcontrol.tools.Behavior.MoveBehavior;
69
import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
70
import org.gvsig.fmap.mapcontrol.tools.Behavior.RectangleBehavior;
71
import org.gvsig.tools.library.impl.DefaultLibrariesInitializer;
72
import org.gvsig.vectorediting.lib.api.EditingLocator;
73
import org.gvsig.vectorediting.lib.api.EditingManager;
74
import org.gvsig.vectorediting.lib.prov.circlecr.CircleCREditingProviderFactory;
75
import org.gvsig.vectorediting.lib.prov.insertpoint.InsertPointEditingProviderFactory;
76
import org.gvsig.vectorediting.lib.prov.polyline.PolylineEditingProviderFactory;
77
import org.gvsig.vectorediting.lib.prov.symmetry.SymmetryEditingProviderFactory;
78
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
79
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
80
import org.gvsig.vectorediting.swing.api.EditingBehavior;
81
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
82
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
83
import org.gvsig.vectorediting.swing.impl.DefaultEditingBehavior;
84
import org.slf4j.Logger;
85
import org.slf4j.LoggerFactory;
86

    
87
/**
88
 * Main executable class for testing the VectorEditing library.
89
 *
90
 * @author gvSIG Team
91
 * @version $Id$
92
 */
93
public class Main {
94

    
95
  private static final Logger logger = LoggerFactory.getLogger(Main.class);
96

    
97
  final EditingManager manager;
98

    
99
  final EditingSwingManager swingManager;
100

    
101
  final EditingProviderManager providerManager;
102

    
103
  final MapControlManager mapControlManager;
104

    
105
  final DataManager dataManager;
106

    
107
  final MapContextManager mapContextManager;
108

    
109
  EditingBehavior editingBehavior;
110

    
111
  MapControl mapControl;
112

    
113
  FeatureStore store;
114

    
115
  FLyrVect currentLayer;
116

    
117
  final String DEFAULT_CRS_CODE = "EPSG:4326";
118

    
119
  IProjection defaultProjection;
120

    
121
  TrivialLayerOrderManager layerOrderManager;
122

    
123
  JFrame mainFrame;
124

    
125
  JFrame addLayerFrame;
126

    
127
  JFrame paletteTools;
128

    
129
  JTextField shpField;
130

    
131
  // Actions
132
  AbstractAction pan;
133

    
134
  AbstractAction zoom;
135

    
136
  AbstractAction zoomall;
137

    
138
  AbstractAction cleanMap;
139

    
140
  AbstractAction openAddLayerDialog;
141

    
142
  AbstractAction openPaletteTools;
143

    
144
  AbstractAction editingExtensionAction;
145
  
146
  AbstractAction endEditingExtensionAction;
147

    
148
  AbstractAction insertPoint;
149

    
150
  AbstractAction exit;
151

    
152
  AbstractAction addLayer;
153

    
154
  AbstractAction circleCr;
155

    
156
  AbstractAction polyline;
157

    
158
  AbstractAction symmetry;
159

    
160
  public static void main(String args[]) {
161
    new DefaultLibrariesInitializer().fullInitialize();
162
    Main main = new Main();
163
    main.doMain();
164
  }
165

    
166
  public Main() {
167
    manager = EditingLocator.getManager();
168
    swingManager = EditingSwingLocator.getSwingManager();
169
    providerManager = EditingProviderLocator.getProviderManager();
170
    mapControlManager = MapControlLocator.getMapControlManager();
171
    dataManager = DALLocator.getDataManager();
172
    mapContextManager = MapContextLocator.getMapContextManager();
173
    defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
174
    layerOrderManager = new TrivialLayerOrderManager();
175
  }
176

    
177
  public void doMain() {
178

    
179
    try {
180
      mapControl = mapControlManager.createJMapControlPanel();
181
      editingBehavior = new DefaultEditingBehavior(mapControl);
182
      mapControl.addBehavior("zoom", new Behavior[] {
183
          new RectangleBehavior(new ZoomInListenerImpl(mapControl)),
184
          new PointBehavior(new ZoomOutRightButtonListener(mapControl)) });
185
      mapControl.addBehavior("pan", new MoveBehavior(new PanListenerImpl(
186
          mapControl)));
187

    
188

    
189
      IProjection defaultProjection = CRSFactory.getCRS(DEFAULT_CRS_CODE);
190
      mapControl.getViewPort().setProjection(defaultProjection);
191
      mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
192

    
193
      // Create actions
194
      createActions();
195
    }
196
    catch (MapControlCreationException e) {
197
      logger.error("Can't create mapControl");
198
    }
199

    
200
    // Create JFrame to show data
201
    mainFrame = new JFrame("Editing test app");
202
    mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
203
    mainFrame.setPreferredSize(new Dimension(800, 680));
204
    mainFrame.add(mapControl, BorderLayout.CENTER);
205

    
206
    // Create JFrame to add layer
207
    createAddLayerJFrame();
208

    
209
    // create JFrame palette tools
210
    createShowPaletteTools();
211

    
212
    // Create menu bar
213
    createMenu();
214

    
215
    // Create tools bar
216
    createToolBar();
217

    
218
    // Display the window.
219
    mainFrame.pack();
220
    mainFrame.setLocation(500, 0);
221
    mainFrame.setVisible(true);
222
  }
223

    
224
  private void createAddLayerJFrame() {
225
    addLayerFrame = new JFrame("Add layer");
226
    addLayerFrame.setLayout(new GridLayout(4, 2, 3, 3));
227
    addLayerFrame.setPreferredSize(new Dimension(400, 150));
228
    addLayerFrame.pack();
229
    addLayerFrame.setLocation(250, 250);
230
    addLayerFrame.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
231

    
232
    JLabel shpLabel = new JLabel("Archivo SHP");
233
    shpField = new JTextField();
234

    
235
    addLayerFrame.add(shpLabel);
236
    addLayerFrame.add(shpField);
237
    addLayerFrame.add(new JLabel());
238

    
239
    JButton aceptarButton = new JButton(addLayer);
240
    addLayerFrame.add(aceptarButton, BorderLayout.LINE_END);
241

    
242
  }
243

    
244
  private void createShowPaletteTools() {
245
    paletteTools = new JFrame("Palette tools");
246
    paletteTools.setLayout(new GridLayout(20, 1, 1, 5));
247
    paletteTools.setPreferredSize(new Dimension(200, 600));
248
    paletteTools.pack();
249
    paletteTools.setLocation(0, 0);
250
    paletteTools.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
251

    
252
    JButton insertPointButton = new JButton(insertPoint);
253
    JButton circleCrButton = new JButton(circleCr);
254
    JButton polylineButton = new JButton(polyline);
255
    JButton symmetryButton = new JButton(symmetry);
256

    
257
    paletteTools.add(new JLabel("Insert tools"));
258
    paletteTools.add(insertPointButton);
259
    paletteTools.add(circleCrButton);
260
    paletteTools.add(polylineButton);
261
    
262
    paletteTools.add(new JLabel("Modify tools"));
263
    paletteTools.add(symmetryButton);
264
  }
265

    
266
  private void createToolBar() {
267
    JToolBar toolBar = new JToolBar();
268

    
269
    toolBar.add(new JButton(openAddLayerDialog));
270
    toolBar.add(new JButton(editingExtensionAction));
271
    toolBar.add(new JButton(endEditingExtensionAction));
272
    toolBar.add(new JButton(pan));
273
    toolBar.add(new JButton(zoom));
274
    toolBar.add(new JButton(zoomall));
275
    toolBar.add(new JButton(cleanMap));
276
    toolBar.add(new JButton(openPaletteTools));
277

    
278
    mainFrame.add(toolBar, BorderLayout.PAGE_START);
279
  }
280

    
281
  private void createMenu() {
282
    // Create the menu bar.
283
    JMenuBar menuBar = new JMenuBar();
284

    
285
    // Build the menu.
286
    JMenu menuFile = new JMenu("File");
287
    menuFile.add(new JMenuItem(exit));
288

    
289
    JMenu menuLayer = new JMenu("Layer");
290
    menuLayer.add(new JMenuItem(openAddLayerDialog));
291
    menuLayer.add(new JMenuItem(pan));
292
    menuLayer.add(new JMenuItem(zoom));
293
    menuLayer.add(new JMenuItem(zoomall));
294
    menuLayer.add(new JMenuItem(cleanMap));
295

    
296
    JMenu menuTool = new JMenu("Tools");
297
    menuTool.add(new JMenuItem(editingExtensionAction));
298
    menuTool.add(new JMenuItem(endEditingExtensionAction));
299
    menuTool.addSeparator();
300
    menuTool.add(new JMenuItem(insertPoint));
301
    menuTool.add(new JMenuItem(circleCr));
302
    menuTool.add(new JMenuItem(polyline));
303
    menuTool.add(new JMenuItem(symmetry));
304

    
305
    menuBar.add(menuFile);
306
    menuBar.add(menuTool);
307

    
308
    mainFrame.setJMenuBar(menuBar);
309
  }
310

    
311
  @SuppressWarnings("serial")
312
  private void createActions() throws MapControlCreationException {
313

    
314
    pan = new AbstractAction("Pan") {
315

    
316
      public void actionPerformed(ActionEvent e) {
317
        mapControl.setTool("pan");
318
      }
319
    };
320

    
321
    zoom = new AbstractAction("Zoom") {
322

    
323
      public void actionPerformed(ActionEvent e) {
324
        mapControl.setTool("zoom");
325
      }
326
    };
327

    
328
    zoomall = new AbstractAction("Zoom all") {
329

    
330
      public void actionPerformed(ActionEvent e) {
331
        zoomAll();
332
      }
333
    };
334

    
335
    cleanMap = new AbstractAction("Clean Map") {
336

    
337
      public void actionPerformed(ActionEvent e) {
338
        MapContext mapContext = mapControl.getMapContext();
339
        mapContext.beginAtomicEvent();
340
        while (mapContext.getLayers().getLayersCount() > 0) {
341
          mapContext.getLayers().removeLayer(0);
342
        }
343
        mapContext.endAtomicEvent();
344
        
345
      }
346
    };
347

    
348
    openAddLayerDialog = new AbstractAction("Add layer") {
349

    
350
      public void actionPerformed(ActionEvent e) {
351
        addLayerFrame.setVisible(true);
352
      }
353
    };
354

    
355
    openPaletteTools = new AbstractAction("Show palette tools") {
356

    
357
      public void actionPerformed(ActionEvent e) {
358
        paletteTools.setVisible(true);
359
      }
360
    };
361

    
362
    addLayer = new AbstractAction("OK") {
363

    
364
      public void actionPerformed(ActionEvent e) {
365
        String shpPath = shpField.getText();
366

    
367
        try {
368
          addLayer(shpPath);
369
        }
370
        catch (Exception e1) {
371
          logger.error("Problems adding layer");
372
          e1.printStackTrace();
373
        }
374
        addLayerFrame.setVisible(false);
375
      }
376
    };
377

    
378
    exit = new AbstractAction("Exit") {
379

    
380
      public void actionPerformed(ActionEvent e) {
381
        System.exit(0);
382
      }
383
    };
384

    
385
    editingExtensionAction = new AbstractAction("EditingExtension") {
386

    
387
      public void actionPerformed(ActionEvent e) {
388
        swingManager.beginEdition(currentLayer, mapControl);
389
      }
390
    };
391
    
392
    endEditingExtensionAction = new AbstractAction("EndEditingExtension") {
393

    
394
      public void actionPerformed(ActionEvent e) {
395
        swingManager.endEdition(currentLayer, mapControl);
396
      }
397
    };
398

    
399
    insertPoint = new AbstractAction("InsertPointAction") {
400

    
401
      public void actionPerformed(ActionEvent e) {
402

    
403
        swingManager.activateService(
404
            InsertPointEditingProviderFactory.PROVIDER_NAME, mapControl);
405
      }
406

    
407
    };
408

    
409
    circleCr = new AbstractAction("CircleCrAction") {
410

    
411
      public void actionPerformed(ActionEvent e) {
412
        swingManager.activateService(CircleCREditingProviderFactory.PROVIDER_NAME,
413
            mapControl);
414
      }
415
    };
416

    
417
    
418
    polyline = new AbstractAction("PolylineAction") {
419

    
420
      public void actionPerformed(ActionEvent e) {
421
        swingManager.activateService(PolylineEditingProviderFactory.PROVIDER_NAME,
422
            mapControl);
423
      }
424
    };
425
    
426

    
427
    symmetry = new AbstractAction("SymmetryAction") {
428

    
429
        public void actionPerformed(ActionEvent e) {
430
          swingManager.activateService(SymmetryEditingProviderFactory.PROVIDER_NAME,
431
              mapControl);
432
        }
433
      };
434

    
435
  }
436

    
437
  public void addLayer(String shpPath) throws InitializeException,
438
      ProviderNotRegisteredException, ValidateDataParametersException,
439
      LoadLayerException {
440
    DataStoreParameters params;
441
    params = dataManager.createStoreParameters("Shape");
442
    if (shpPath.isEmpty()){
443
            shpPath = "/home/paco/data/cartography/Andalucia/muni_andalucia.shp";
444
    }
445

    
446
    String dbfPath = shpPath.substring(0, shpPath.length() - 3).concat("dbf");
447
    String shxPath = shpPath.substring(0, shpPath.length() - 3).concat("shx");
448

    
449
    File shpFile = new File(shpPath);
450
    File dbFile = new File(dbfPath);
451
    File shxFile = new File(shxPath);
452

    
453
    params.setDynValue("shpFile", shpFile.getPath());
454
    params.setDynValue("dbfFile", dbFile.getPath());
455
    params.setDynValue("shxFile", shxFile.getPath());
456
    params.setDynValue("CRS", defaultProjection);
457

    
458
    store = (FeatureStore) dataManager.openStore("Shape", params);
459

    
460
    FLayer layer = mapContextManager.createLayer("prueba", store);
461
    mapControl.getMapContext().setOrderManager(layerOrderManager);
462
    mapControl.getMapContext().getLayers().addLayer(layer);
463
    mapControl.getMapContext().getLayers().setActive(true);
464
    try {
465
      currentLayer = (FLyrVect) layer;
466
    }
467
    catch (Exception e) {
468
      logger.error("Can't load layer " + e.getMessage());
469
    }
470

    
471
  }
472

    
473
  private void zoomAll() {
474
    MapContext mapContext = mapControl.getMapContext();
475
    Envelope all = mapContext.getLayers().getFullEnvelope();
476
    logger.info("Full extdents " + all.toString());
477
    mapContext.getViewPort().setEnvelope(all);
478
    mapContext.invalidate();
479
  }
480

    
481
  public JFrame getJFrame() {
482
    return this.addLayerFrame;
483
  }
484
}