Revision 42

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/BaseEditingServiceExtension.java
10 10
import org.gvsig.andami.plugins.Extension;
11 11
import org.gvsig.app.project.documents.view.ViewDocument;
12 12
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
13
import org.gvsig.fmap.dal.exception.ReadException;
14 13
import org.gvsig.fmap.geom.Geometry;
15 14
import org.gvsig.fmap.geom.GeometryLocator;
16 15
import org.gvsig.fmap.geom.type.GeometryType;
......
18 17
import org.gvsig.fmap.geom.type.GeometryTypeNotValidException;
19 18
import org.gvsig.fmap.mapcontext.layers.FLayer;
20 19
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
21
import org.gvsig.tools.service.ServiceException;
22 20
import org.gvsig.vectorediting.lib.api.EditingLocator;
23 21
import org.gvsig.vectorediting.lib.api.EditingManager;
24
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
22
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
23
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
25 24

  
26 25
public abstract class BaseEditingServiceExtension extends Extension {
27 26

  
......
31 30
  private static final long serialVersionUID = -6005105101114750889L;
32 31

  
33 32
  protected final EditingManager manager = EditingLocator.getManager();
33
  protected final EditingSwingManager swingManager = EditingSwingLocator.getSwingManager();
34 34

  
35 35
  protected DefaultViewPanel getActiveView() {
36 36
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/extensions/InsertPointExtension.java
1 1
/*
2 2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin 
5 5
 * SVN Id   : $Id$
6 6
 */
7 7
package org.gvsig.vectorediting.app.mainplugin.extensions;
......
14 14
import org.gvsig.tools.service.ServiceException;
15 15
import org.gvsig.vectorediting.app.mainplugin.BaseEditingServiceExtension;
16 16
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
17
import org.gvsig.vectorediting.lib.prov.insertpoint.InsertPointEditingProvider;
18
import org.gvsig.vectorediting.lib.prov.insertpoint.InsertPointEditingProviderFactory;
19 17

  
20 18
public class InsertPointExtension extends BaseEditingServiceExtension {
21 19

  
22 20
  /**
23
   *
21
   * 
24 22
   */
25 23
  private static final long serialVersionUID = 5284754862994440445L;
26 24

  
27 25
  public void execute(String arg0) {
28 26

  
29 27
    DefaultViewPanel view = getActiveView();
30
    manager.activateTool(InsertPointEditingProviderFactory.PROVIDER_NAME, view.getMapControl());
28
    swingManager.activateTool(InsertPointEditingProviderFactory.PROVIDER_NAME, view.getMapControl());
31 29

  
32 30
    registerIcons();
33 31
  }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/extensions/Circle2PExtension.java
1 1
/*
2 2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin 
5 5
 * SVN Id   : $Id$
6 6
 */
7 7
package org.gvsig.vectorediting.app.mainplugin.extensions;
......
14 14
import org.gvsig.tools.service.ServiceException;
15 15
import org.gvsig.vectorediting.app.mainplugin.BaseEditingServiceExtension;
16 16
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
17
import org.gvsig.vectorediting.lib.prov.circle2P.Circle2PEditingProviderFactory;
18 17

  
19 18
public class Circle2PExtension extends BaseEditingServiceExtension {
20 19

  
......
26 25
  public void execute(String arg0) {
27 26

  
28 27
    DefaultViewPanel view = getActiveView();
29
    manager.activateTool(Circle2PEditingProviderFactory.PROVIDER_NAME, view.getMapControl());
28
    swingManager.activateTool(Circle2PEditingProviderFactory.PROVIDER_NAME, view.getMapControl());
30 29

  
31 30
    registerIcons();
32 31
  }
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/java/org/gvsig/vectorediting/app/mainplugin/extensions/EditingExtension.java
28 28

  
29 29
      if (canBeEdited(layer)) {
30 30
        try {
31
          manager.beginEdition(layer, vista);
31
          swingManager.beginEdition(layer, vista);
32 32
        }
33 33
        catch (DataException e) {
34 34
          // TODO Auto-generated catch block
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/pom.xml
54 54
				org.gvsig.vectorediting.lib.prov.circle2P
55 55
			</artifactId>
56 56
		</dependency>
57
		<dependency>
58
			<groupId>org.gvsig</groupId>
59
			<artifactId>org.gvsig.vectorediting.swing.api</artifactId>
60
		</dependency>
61
		<dependency>
62
			<groupId>org.gvsig</groupId>
63
			<artifactId>org.gvsig.vectorediting.swing.impl</artifactId>
64
		</dependency>
57 65
	</dependencies>
58 66
</project>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingBehavior.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.impl 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.lib.impl;
8

  
9
import java.awt.Color;
10
import java.awt.Graphics;
11
import java.awt.Image;
12
import java.awt.event.MouseEvent;
13
import java.awt.geom.Point2D;
14
import java.awt.image.BufferedImage;
15
import java.util.HashMap;
16
import java.util.Map;
17

  
18
import org.cresques.cts.IProjection;
19
import org.gvsig.andami.PluginServices;
20
import org.gvsig.andami.ui.mdiFrame.MainFrame;
21
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
22
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
23
import org.gvsig.fmap.geom.Geometry;
24
import org.gvsig.fmap.geom.primitive.Point;
25
import org.gvsig.fmap.mapcontext.MapContext;
26
import org.gvsig.fmap.mapcontext.ViewPort;
27
import org.gvsig.fmap.mapcontext.layers.CancelationException;
28
import org.gvsig.fmap.mapcontext.layers.FLayer;
29
import org.gvsig.fmap.mapcontext.layers.FLayers;
30
import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
31
import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
32
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
33
import org.gvsig.fmap.mapcontext.layers.LayerListener;
34
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
35
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
36
import org.gvsig.fmap.mapcontrol.MapControl;
37
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
38
import org.gvsig.fmap.mapcontrol.MapControlLocator;
39
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
40
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
41
import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
42
import org.gvsig.utils.console.JConsole;
43
import org.gvsig.utils.console.ResponseListener;
44
import org.gvsig.utils.console.jedit.JEditTextArea;
45
import org.gvsig.vectorediting.lib.api.EditingBehavior;
46
import org.gvsig.vectorediting.lib.api.EditingLocator;
47
import org.gvsig.vectorediting.lib.api.EditingManager;
48
import org.gvsig.vectorediting.lib.api.EditingService;
49
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
50

  
51
public class DefaultEditingBehavior extends Behavior implements EditingBehavior {
52

  
53
  private Map<FLyrVect, EditingService> serviceRegistration;
54

  
55
  private MapControl mapControl;
56

  
57
  private FLyrVect currentLayer;
58

  
59
  private EditingService activeService;
60

  
61
  private EditingServiceParameter currentParam;
62

  
63
  private Point adjustedPoint;
64

  
65
  private StatusBarListener sbl = null;
66

  
67
  private static final Image imageCursor = new BufferedImage(32, 32,
68
      BufferedImage.TYPE_INT_ARGB);
69
  static {
70
    Graphics g = imageCursor.getGraphics();
71
    int size1 = 15;
72
    int x = 16;
73
    int y = 16;
74
    g.setColor(Color.MAGENTA);
75
    g.drawLine((x - size1), (y), (x + size1), (y));
76
    g.drawLine((x), (y - size1), (x), (y + size1));
77
    g.drawRect((x - 6), (y - 6), 12, 12);
78
    g.drawRect((x - 3), (y - 3), 6, 6);
79
  }
80

  
81
  private LayerListener layerListener = new LayerListener() {
82

  
83
    public void activationChanged(LayerEvent e) {
84
      DefaultViewPanel view = getActiveView();
85
      FLayer layer = e.getSource();
86
      if (layer instanceof FLyrVect) {
87

  
88
        if (layer.isActive() && layer.isEditing()) {
89
          view.showConsole();
90
          getMapControl().setTool("VectorEditing");
91
          // cleanBehavior();
92
        }
93
        else if (!layer.isEditing() && layer.isActive()) {
94
          changeCurrentLayer((FLyrVect) layer);
95
          view.hideConsole();
96
          getMapControl().setTool("zoomIn");
97
          PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
98
        }
99
        changeCurrentLayer((FLyrVect) layer);
100

  
101
      }
102

  
103
    }
104

  
105
    public void drawValueChanged(LayerEvent e) {}
106

  
107
    public void editionChanged(LayerEvent e) {}
108

  
109
    public void nameChanged(LayerEvent e) {}
110

  
111
    public void visibilityChanged(LayerEvent e) {}
112
  };
113

  
114
  public void cleanBehavior() {
115
    // activeService = null;
116
    // currentParam = null;
117

  
118
    DefaultViewPanel view = getActiveView();
119
    view.getConsolePanel().addText("\nSeleccione un herramienta\n",
120
        JConsole.MESSAGE);
121
//    MainFrame main = PluginServices.getMainFrame();
122
//    main.setSelectedTool("");  We can define a default tool. I.E Zoom in.
123
  }
124

  
125
  public DefaultEditingBehavior(MapControl mapControl) {
126
    // TODO Auto-generated constructor stub
127
    if (mapControl != null) {
128
      this.mapControl = mapControl;
129
      serviceRegistration = new HashMap<FLyrVect, EditingService>();
130
      sbl = new StatusBarListener(mapControl);
131
      initMapControlListeners(mapControl);
132
      FLayers layers = mapControl.getMapContext().getLayers();
133
      for (int i = 0; i < layers.getLayersCount(); i++) {
134
        if (layers.getLayer(i) instanceof FLyrVect
135
            && layers.getLayer(i).isActive())
136
          changeCurrentLayer((FLyrVect) layers.getLayer(i));
137
      }
138

  
139
    }
140
  }
141

  
142
  public void activateTool(String name) {
143

  
144
    EditingManager manager = EditingLocator.getManager();
145

  
146
    if (currentLayer != null) {
147
      EditingService service = serviceRegistration.get(currentLayer);
148
      if (service == null) {
149
        service = (EditingService) manager
150
            .getEditingService(name, currentLayer);
151
        serviceRegistration.put(currentLayer, service);
152
      }
153
      if (service != null) {
154
        this.activeService = service;
155
        service.start();
156
        getNextParameter();
157
      }
158
    }
159
  }
160

  
161
  private void askQuestion(EditingServiceParameter param) {
162
    DefaultViewPanel viewActive = getActiveView();
163
    if (viewActive != null) {
164
      viewActive.getConsolePanel().addText(
165
          "\n" + "#" + param.getDescription() + " > ", JConsole.MESSAGE);
166
    }
167
  }
168

  
169
  private DefaultViewPanel getActiveView() {
170
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
171
        .getMDIManager().getActiveWindow();
172

  
173
    if (activeWindow instanceof DefaultViewPanel) {
174
      return (DefaultViewPanel) activeWindow;
175
    }
176
    return null;
177
  }
178

  
179
  @Override
180
  public ToolListener getListener() {
181
    return new ToolListener() {
182

  
183
      /**
184
       * 
185
       */
186
      public boolean cancelDrawing() {
187
        return false;
188
      }
189

  
190
      /**
191
       * 
192
       */
193
      public Image getImageCursor() {
194
        return imageCursor;
195
      }
196
    };
197
  }
198

  
199
  private void getNextParameter() {
200
    currentParam = activeService.next();
201
    if (currentParam == null) {
202
      activeService.finish();
203
      mapControl.rePaintDirtyLayers();
204
      activeService.start();
205
      getNextParameter();
206
    }
207
    else {
208
      askQuestion(currentParam);
209
      setCaretPosition(getActiveView());
210
    }
211

  
212
  }
213

  
214
  private void initMapControlListeners(MapControl mapControl) {
215
    DefaultViewPanel view = getActiveView();
216

  
217
    view.addConsoleListener("VectorEditingConsole", new ResponseListener() {
218

  
219
      public void acceptResponse(String response) {
220
        try {
221
          textEntered(response);
222
        }
223
        catch (RuntimeException e) {
224
          showErrorConsole(e);
225
          getNextParameter();
226
        }
227
      }
228

  
229
      private void showErrorConsole(RuntimeException e) {
230
        DefaultViewPanel view = getActiveView();
231
        view.getConsolePanel().addText(e.getMessage(), JConsole.ERROR);
232

  
233
      }
234
    });
235

  
236
    MapContext context = mapControl.getMapContext();
237
    FLayers layers = context.getLayers();
238
    layers.addLayerListener(layerListener);
239

  
240
    layers.addLayerCollectionListener(new LayerCollectionListener() {
241

  
242
      public void layerAdded(LayerCollectionEvent e) {
243
        FLayers layers2 = e.getLayers();
244
        for (int i = 0; i < layers2.getLayersCount(); i++) {
245
          FLayer layer = layers2.getLayer(i);
246
          if (layer instanceof FLyrVect) {
247
            ((FLyrVect) layer).addLayerListener(layerListener);
248
          }
249
        }
250
      }
251

  
252
      public void layerAdding(LayerCollectionEvent e)
253
          throws CancelationException {}
254

  
255
      public void layerMoved(LayerPositionEvent e) {}
256

  
257
      public void layerMoving(LayerPositionEvent e) throws CancelationException {}
258

  
259
      public void layerRemoved(LayerCollectionEvent e) {
260
        FLayers layers2 = e.getLayers();
261
        for (int i = 0; i < layers2.getLayersCount(); i++) {
262
          FLayer layer = layers2.getLayer(i);
263
          if (layer instanceof FLyrVect) {
264
            ((FLyrVect) layer).removeLayerListener(layerListener);
265
          }
266
        }
267
      }
268

  
269
      public void layerRemoving(LayerCollectionEvent e)
270
          throws CancelationException {}
271

  
272
      public void visibilityChanged(LayerCollectionEvent e)
273
          throws CancelationException {}
274
    });
275
  }
276

  
277
  public void mouseClicked(MouseEvent e) throws BehaviorException {
278
    // TODO Auto-generated method stub
279
    if (activeService != null) {
280
      if (currentParam != null) {
281
        switch (currentParam.getType()) {
282
          case EditingServiceParameter.TYPE_POINT:
283
            ViewPort vp = mapControl.getViewPort();
284
            Point point;
285
            point = vp.convertToMapPoint(e.getX(), e.getY());
286
            this.activeService.value(point);
287

  
288
          case EditingServiceParameter.TYPE_LIST_POINTS:
289
          case EditingServiceParameter.TYPE_OPTION:
290
          case EditingServiceParameter.TYPE_SELECTION:
291
          case EditingServiceParameter.TYPE_GEOMETRY:
292
          case EditingServiceParameter.TYPE_VALUE:
293
        }
294
        getNextParameter();
295
      }
296

  
297
    }
298
  }
299

  
300
  public void mouseEntered(MouseEvent e) throws BehaviorException {
301
    // TODO Auto-generated method stub
302
  }
303

  
304
  public void mouseMoved(MouseEvent e) throws BehaviorException {
305
    ViewPort vp = mapControl.getViewPort();
306
    adjustedPoint = vp.convertToMapPoint(e.getX(),e.getY());
307
    showCoords(e.getPoint());
308

  
309
    getMapControl().repaint();
310
  }
311

  
312
  public void mousePressed(MouseEvent e) throws BehaviorException {
313
    // TODO Auto-generated method stub
314
  }
315

  
316
  public void mouseReleased(MouseEvent e) throws BehaviorException {
317
    // TODO Auto-generated method stub
318
  }
319

  
320
  public void paintComponent(MapControlDrawer mapControlDrawer) {
321
    super.paintComponent(mapControlDrawer);
322
    if (activeService == null || adjustedPoint == null) {
323
      return;
324
    }
325

  
326
    Geometry helperGeo = activeService.draw(adjustedPoint);
327
    if (helperGeo != null) {
328
      mapControl.getMapControlDrawer().draw(helperGeo,
329
          MapControlLocator.getMapControlManager().getAxisReferenceSymbol());
330
    }
331
  }
332

  
333
  private void setCaretPosition(DefaultViewPanel view) {
334

  
335
    JEditTextArea jeta = view.getConsolePanel().getTxt();
336
    jeta.requestFocusInWindow();
337
    jeta.setCaretPosition(jeta.getText().length());
338

  
339
  }
340

  
341
  private void changeCurrentLayer(FLyrVect layer) {
342
    this.currentLayer = layer;
343
    this.activeService = serviceRegistration.get(layer);
344
    if (activeService != null) {
345
      getNextParameter();
346
      MainFrame main = PluginServices.getMainFrame();
347
      main.setSelectedTool(activeService.getName());
348
    }
349
  }
350

  
351
  private void showCoords(Point2D point) {
352
    String[] axisText = new String[2];
353
    axisText[0] = "X = ";
354
    axisText[1] = "Y = ";
355

  
356
    ViewPort vp = mapControl.getMapContext().getViewPort();
357
    IProjection iProj = vp.getProjection();
358
    Point p = vp.convertToMapPoint(point);
359
    Point2D p2D = new Point2D.Double(p.getX(), p.getY());
360

  
361
    sbl.setFractionDigits(p2D);
362
    axisText = sbl.setCoorDisplayText(axisText);
363
    MainFrame mF = PluginServices.getMainFrame();
364

  
365
    if (mF != null) {
366
      mF.getStatusBar().setMessage(
367
          "units",
368
          PluginServices.getText(this,
369
              MapContext.getDistanceNames()[vp.getDistanceUnits()]));
370
      mF.getStatusBar().setControlValue("scale",
371
          String.valueOf(mapControl.getMapContext().getScaleView()));
372
      mF.getStatusBar().setMessage("projection", iProj.getAbrev());
373

  
374
      String[] coords = sbl.getCoords(p2D);
375
      mF.getStatusBar().setMessage("x", axisText[0] + coords[0]);
376
      mF.getStatusBar().setMessage("y", axisText[1] + coords[1]);
377
    }
378

  
379
  }
380

  
381
  private void textEntered(String response) {
382
    if (response == null) {
383
      cleanBehavior();
384
    }
385
    else {
386
      int type = currentParam.getType();
387
      try {
388
        switch (type) {
389
          case EditingServiceParameter.TYPE_POINT:
390
            String[] numbers = new String[1];
391
            numbers[0] = response;
392
            numbers = response.split(",");
393
            if (numbers.length == 2) {
394
              if (numbers[0].startsWith("(") && numbers[1].endsWith(")\n")) { // CCS
395
                numbers[0] = numbers[0].replace("(", "");
396
                numbers[1] = numbers[1].replace(")\n", "");
397
              }
398
              double[] values = new double[] { Double.parseDouble(numbers[0]),
399
                  Double.parseDouble(numbers[1]) };
400
              Point2D point = new Point2D.Double(values[0], values[1]);
401
              this.activeService.value(point);
402

  
403
            }
404
            else {
405
              throw new RuntimeException("Datos inv?lidos: " + response);
406
            }
407
          case EditingServiceParameter.TYPE_LIST_POINTS:
408
          case EditingServiceParameter.TYPE_OPTION:
409
          case EditingServiceParameter.TYPE_SELECTION:
410
          case EditingServiceParameter.TYPE_GEOMETRY:
411
          case EditingServiceParameter.TYPE_VALUE:
412
        }
413
        getNextParameter();
414
      }
415
      catch (Exception e) {
416
        throw new RuntimeException("Datos inv?lidos: " + response);
417
      }
418
    }
419
  }
420
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingManager.java
6 6
 */
7 7
package org.gvsig.vectorediting.lib.impl;
8 8

  
9
import org.gvsig.app.ApplicationLocator;
10
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
11
import org.gvsig.editing.EditingNotification;
12
import org.gvsig.editing.EditingNotificationManager;
13
import org.gvsig.fmap.dal.exception.DataException;
14 9
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
15
import org.gvsig.fmap.mapcontrol.MapControl;
16
import org.gvsig.fmap.mapcontrol.MapControlLocator;
17
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
18 10
import org.gvsig.tools.dynobject.DynObject;
19
import org.gvsig.tools.locator.LocatorException;
20 11
import org.gvsig.tools.service.AbstractManager;
21 12
import org.gvsig.tools.service.Service;
22 13
import org.gvsig.tools.service.ServiceException;
23
import org.gvsig.tools.service.spi.NotRegisteredException;
24
import org.gvsig.tools.service.spi.ParametersException;
25
import org.gvsig.utils.console.jedit.JEditTextArea;
26
import org.gvsig.vectorediting.lib.api.EditingBehavior;
27 14
import org.gvsig.vectorediting.lib.api.EditingManager;
28 15
import org.gvsig.vectorediting.lib.api.EditingService;
29 16
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
......
52 39
    return new DefaultEditingService(provider);
53 40
  }
54 41

  
55
  public EditingServiceInfo getServiceInfo(String toolName) throws ServiceException{
42
  public EditingServiceInfo getServiceInfo(String toolName)
43
      throws ServiceException {
56 44
    return EditingProviderLocator.getProviderManager().getServiceInfo(toolName);
57 45
  }
58 46

  
59
  public void activateTool(String name, MapControl mapControl) {
60
    // TODO Auto-generated method stub
61
    if (mapControl != null && mapControl.hasTool("VectorEditing")) {
62
      EditingBehavior behavior = (EditingBehavior) mapControl
63
          .getMapTool("VectorEditing");
64
      behavior.activateTool(name);
65
    }
66
  }
67

  
68 47
  public EditingService getEditingService(String name, FLyrVect layer) {
69 48
    try {
70 49
      DynObject params = this.createServiceParameters(name);
......
79 58
    return null;
80 59
  }
81 60

  
82
  public void beginEdition(FLyrVect layer, DefaultViewPanel view)
83
      throws DataException {
84

  
85
    EditingNotificationManager editingNotificationManager = MapControlLocator
86
        .getEditingNotificationManager();
87

  
88
    EditingNotification notification = editingNotificationManager
89
        .notifyObservers(this, EditingNotification.BEFORE_ENTER_EDITING_STORE,
90
            view.getDocument(), layer);
91

  
92
    if (notification.isCanceled()) {
93
      logger.info("Edit layer '" + layer.getName()
94
          + "' canceled by somme observer.");
95
      throw new RuntimeException("Edit layer '" + layer.getName()
96
          + "' canceled.");
97
    }
98

  
99
    initFocus(view);
100
    view.showConsole();
101
    setCaretPosition(view);
102

  
103
    layer.getFeatureStore().edit();
104
    layer.getFeatureStore().addObserver(view);
105
    layer.getFeatureStore().addObserver(view.getMapControl());
106

  
107
    ApplicationLocator.getManager().refreshMenusAndToolBars();
108

  
109
    editingNotificationManager.notifyObservers(this,
110
        EditingNotification.AFTER_ENTER_EDITING_STORE, view.getDocument(),
111
        layer);
112
  }
113

  
114
  private void setCaretPosition(DefaultViewPanel view) {
115

  
116
    JEditTextArea jeta = view.getConsolePanel().getTxt();
117
    jeta.requestFocusInWindow();
118
    jeta.setCaretPosition(jeta.getText().length());
119

  
120
  }
121

  
122
  private void initFocus(DefaultViewPanel view) {
123

  
124
    MapControl mapControl = view.getMapControl();
125

  
126
    if (!mapControl.hasTool("VectorEditing")) {
127
      Behavior vectorEditing = new DefaultEditingBehavior(mapControl);
128
      mapControl.addBehavior("VectorEditing", vectorEditing);
129
    }
130
    else {
131
      EditingBehavior editingBehavior = (EditingBehavior) mapControl
132
          .getMapTool("VectorEditing");
133
      editingBehavior.cleanBehavior();
134
    }
135

  
136
    mapControl.setTool("VectorEditing");
137

  
138
  }
139 61
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.api/src/main/java/org/gvsig/vectorediting/lib/api/EditingBehavior.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.lib.api;
8

  
9
import org.gvsig.fmap.mapcontrol.tools.Behavior.IBehavior;
10

  
11

  
12
public interface EditingBehavior extends IBehavior{
13

  
14
  /**
15
   * 
16
   * @param name
17
   */
18
  void activateTool(String name);
19

  
20
  /**
21
   * 
22
   */
23
  void cleanBehavior();
24

  
25
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.api/src/main/java/org/gvsig/vectorediting/lib/api/EditingManager.java
6 6
 */
7 7
package org.gvsig.vectorediting.lib.api;
8 8

  
9
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
10
import org.gvsig.fmap.dal.exception.DataException;
11 9
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
12
import org.gvsig.fmap.mapcontrol.MapControl;
13 10
import org.gvsig.tools.service.Manager;
14 11
import org.gvsig.tools.service.ServiceException;
15 12

  
......
23 20

  
24 21
  /**
25 22
   * @param name
26
   * @param mapControl
27
   */
28
  public void activateTool(String name, MapControl mapControl);
29

  
30
  /**
31
   * @param name
32 23
   * @param editableFeatureStore
33 24
   * @return
34 25
   */
35 26
  public EditingService getEditingService(String name, FLyrVect layer);
36

  
37
  /**
38
   * @param mapControl
39
   */
40
  void beginEdition(FLyrVect layer, DefaultViewPanel view) throws DataException;
41 27
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingSwingLibrary.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.swing.impl 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.impl;
8

  
9
import org.gvsig.fmap.dal.DALLibrary;
10
import org.gvsig.fmap.geom.GeometryLibrary;
11
import org.gvsig.tools.library.AbstractLibrary;
12
import org.gvsig.tools.library.LibraryException;
13
import org.gvsig.vectorediting.swing.api.EditingSwingLibrary;
14
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
15

  
16
public class DefaultEditingSwingLibrary extends AbstractLibrary {
17

  
18
  @Override
19
  public void doRegistration() {
20
    registerAsImplementationOf(EditingSwingLibrary.class);
21
    require(DALLibrary.class);
22
    require(GeometryLibrary.class);
23
  }
24

  
25
  @Override
26
  protected void doInitialize() throws LibraryException {
27
    EditingSwingLocator.registerManager(DefaultEditingSwingManager.class);
28
  }
29

  
30
  @Override
31
  protected void doPostInitialize() throws LibraryException {
32
    // TODO Auto-generated method stub
33

  
34
  }
35

  
36
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingBehavior.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.impl 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.impl;
8

  
9
import java.awt.Color;
10
import java.awt.Graphics;
11
import java.awt.Image;
12
import java.awt.event.MouseEvent;
13
import java.awt.geom.Point2D;
14
import java.awt.image.BufferedImage;
15
import java.util.HashMap;
16
import java.util.Map;
17

  
18
import org.cresques.cts.IProjection;
19
import org.gvsig.andami.PluginServices;
20
import org.gvsig.andami.ui.mdiFrame.MainFrame;
21
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
22
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
23
import org.gvsig.fmap.geom.Geometry;
24
import org.gvsig.fmap.geom.primitive.Point;
25
import org.gvsig.fmap.mapcontext.MapContext;
26
import org.gvsig.fmap.mapcontext.ViewPort;
27
import org.gvsig.fmap.mapcontext.layers.CancelationException;
28
import org.gvsig.fmap.mapcontext.layers.FLayer;
29
import org.gvsig.fmap.mapcontext.layers.FLayers;
30
import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
31
import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
32
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
33
import org.gvsig.fmap.mapcontext.layers.LayerListener;
34
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
35
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
36
import org.gvsig.fmap.mapcontrol.MapControl;
37
import org.gvsig.fmap.mapcontrol.MapControlDrawer;
38
import org.gvsig.fmap.mapcontrol.MapControlLocator;
39
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
40
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
41
import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
42
import org.gvsig.utils.console.JConsole;
43
import org.gvsig.utils.console.ResponseListener;
44
import org.gvsig.utils.console.jedit.JEditTextArea;
45
import org.gvsig.vectorediting.lib.api.EditingLocator;
46
import org.gvsig.vectorediting.lib.api.EditingManager;
47
import org.gvsig.vectorediting.lib.api.EditingService;
48
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
49
import org.gvsig.vectorediting.swing.api.EditingBehavior;
50

  
51
public class DefaultEditingBehavior extends Behavior implements EditingBehavior {
52

  
53
  private Map<FLyrVect, EditingService> serviceRegistration;
54

  
55
  private MapControl mapControl;
56

  
57
  private FLyrVect currentLayer;
58

  
59
  private EditingService activeService;
60

  
61
  private EditingServiceParameter currentParam;
62

  
63
  private Point adjustedPoint;
64

  
65
  private StatusBarListener sbl = null;
66

  
67
  private static final Image imageCursor = new BufferedImage(32, 32,
68
      BufferedImage.TYPE_INT_ARGB);
69
  static {
70
    Graphics g = imageCursor.getGraphics();
71
    int size1 = 15;
72
    int x = 16;
73
    int y = 16;
74
    g.setColor(Color.MAGENTA);
75
    g.drawLine((x - size1), (y), (x + size1), (y));
76
    g.drawLine((x), (y - size1), (x), (y + size1));
77
    g.drawRect((x - 6), (y - 6), 12, 12);
78
    g.drawRect((x - 3), (y - 3), 6, 6);
79
  }
80

  
81
  private LayerListener layerListener = new LayerListener() {
82

  
83
    public void activationChanged(LayerEvent e) {
84
      DefaultViewPanel view = getActiveView();
85
      FLayer layer = e.getSource();
86
      if (layer instanceof FLyrVect) {
87

  
88
        if (layer.isActive() && layer.isEditing()) {
89
          view.showConsole();
90
          getMapControl().setTool("VectorEditing");
91
          // cleanBehavior();
92
        }
93
        else if (!layer.isEditing() && layer.isActive()) {
94
          changeCurrentLayer((FLyrVect) layer);
95
          view.hideConsole();
96
          getMapControl().setTool("zoomIn");
97
          PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
98
        }
99
        changeCurrentLayer((FLyrVect) layer);
100

  
101
      }
102

  
103
    }
104

  
105
    public void drawValueChanged(LayerEvent e) {}
106

  
107
    public void editionChanged(LayerEvent e) {}
108

  
109
    public void nameChanged(LayerEvent e) {}
110

  
111
    public void visibilityChanged(LayerEvent e) {}
112
  };
113

  
114
  public void cleanBehavior() {
115
    // activeService = null;
116
    // currentParam = null;
117

  
118
    DefaultViewPanel view = getActiveView();
119
    view.getConsolePanel().addText("\nSeleccione un herramienta\n",
120
        JConsole.MESSAGE);
121
//    MainFrame main = PluginServices.getMainFrame();
122
//    main.setSelectedTool("");  We can define a default tool. I.E Zoom in.
123
  }
124

  
125
  public DefaultEditingBehavior(MapControl mapControl) {
126
    // TODO Auto-generated constructor stub
127
    if (mapControl != null) {
128
      this.mapControl = mapControl;
129
      serviceRegistration = new HashMap<FLyrVect, EditingService>();
130
      sbl = new StatusBarListener(mapControl);
131
      initMapControlListeners(mapControl);
132
      FLayers layers = mapControl.getMapContext().getLayers();
133
      for (int i = 0; i < layers.getLayersCount(); i++) {
134
        if (layers.getLayer(i) instanceof FLyrVect
135
            && layers.getLayer(i).isActive())
136
          changeCurrentLayer((FLyrVect) layers.getLayer(i));
137
      }
138

  
139
    }
140
  }
141

  
142
  public void activateTool(String name) {
143

  
144
    EditingManager manager = EditingLocator.getManager();
145

  
146
    if (currentLayer != null) {
147
      EditingService service = serviceRegistration.get(currentLayer);
148
      if (service == null) {
149
        service = (EditingService) manager
150
            .getEditingService(name, currentLayer);
151
        serviceRegistration.put(currentLayer, service);
152
      }
153
      if (service != null) {
154
        this.activeService = service;
155
        service.start();
156
        getNextParameter();
157
      }
158
    }
159
  }
160

  
161
  private void askQuestion(EditingServiceParameter param) {
162
    DefaultViewPanel viewActive = getActiveView();
163
    if (viewActive != null) {
164
      viewActive.getConsolePanel().addText(
165
          "\n" + "#" + param.getDescription() + " > ", JConsole.MESSAGE);
166
    }
167
  }
168

  
169
  private DefaultViewPanel getActiveView() {
170
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
171
        .getMDIManager().getActiveWindow();
172

  
173
    if (activeWindow instanceof DefaultViewPanel) {
174
      return (DefaultViewPanel) activeWindow;
175
    }
176
    return null;
177
  }
178

  
179
  @Override
180
  public ToolListener getListener() {
181
    return new ToolListener() {
182

  
183
      /**
184
       * 
185
       */
186
      public boolean cancelDrawing() {
187
        return false;
188
      }
189

  
190
      /**
191
       * 
192
       */
193
      public Image getImageCursor() {
194
        return imageCursor;
195
      }
196
    };
197
  }
198

  
199
  private void getNextParameter() {
200
    currentParam = activeService.next();
201
    if (currentParam == null) {
202
      activeService.finish();
203
      mapControl.rePaintDirtyLayers();
204
      activeService.start();
205
      getNextParameter();
206
    }
207
    else {
208
      askQuestion(currentParam);
209
      setCaretPosition(getActiveView());
210
    }
211

  
212
  }
213

  
214
  private void initMapControlListeners(MapControl mapControl) {
215
    DefaultViewPanel view = getActiveView();
216

  
217
    view.addConsoleListener("VectorEditingConsole", new ResponseListener() {
218

  
219
      public void acceptResponse(String response) {
220
        try {
221
          textEntered(response);
222
        }
223
        catch (RuntimeException e) {
224
          showErrorConsole(e);
225
          getNextParameter();
226
        }
227
      }
228

  
229
      private void showErrorConsole(RuntimeException e) {
230
        DefaultViewPanel view = getActiveView();
231
        view.getConsolePanel().addText(e.getMessage(), JConsole.ERROR);
232

  
233
      }
234
    });
235

  
236
    MapContext context = mapControl.getMapContext();
237
    FLayers layers = context.getLayers();
238
    layers.addLayerListener(layerListener);
239

  
240
    layers.addLayerCollectionListener(new LayerCollectionListener() {
241

  
242
      public void layerAdded(LayerCollectionEvent e) {
243
        FLayers layers2 = e.getLayers();
244
        for (int i = 0; i < layers2.getLayersCount(); i++) {
245
          FLayer layer = layers2.getLayer(i);
246
          if (layer instanceof FLyrVect) {
247
            ((FLyrVect) layer).addLayerListener(layerListener);
248
          }
249
        }
250
      }
251

  
252
      public void layerAdding(LayerCollectionEvent e)
253
          throws CancelationException {}
254

  
255
      public void layerMoved(LayerPositionEvent e) {}
256

  
257
      public void layerMoving(LayerPositionEvent e) throws CancelationException {}
258

  
259
      public void layerRemoved(LayerCollectionEvent e) {
260
        FLayers layers2 = e.getLayers();
261
        for (int i = 0; i < layers2.getLayersCount(); i++) {
262
          FLayer layer = layers2.getLayer(i);
263
          if (layer instanceof FLyrVect) {
264
            ((FLyrVect) layer).removeLayerListener(layerListener);
265
          }
266
        }
267
      }
268

  
269
      public void layerRemoving(LayerCollectionEvent e)
270
          throws CancelationException {}
271

  
272
      public void visibilityChanged(LayerCollectionEvent e)
273
          throws CancelationException {}
274
    });
275
  }
276

  
277
  public void mouseClicked(MouseEvent e) throws BehaviorException {
278
    // TODO Auto-generated method stub
279
    if (activeService != null) {
280
      if (currentParam != null) {
281
        switch (currentParam.getType()) {
282
          case EditingServiceParameter.TYPE_POINT:
283
            ViewPort vp = mapControl.getViewPort();
284
            Point point;
285
            point = vp.convertToMapPoint(e.getX(), e.getY());
286
            this.activeService.value(point);
287

  
288
          case EditingServiceParameter.TYPE_LIST_POINTS:
289
          case EditingServiceParameter.TYPE_OPTION:
290
          case EditingServiceParameter.TYPE_SELECTION:
291
          case EditingServiceParameter.TYPE_GEOMETRY:
292
          case EditingServiceParameter.TYPE_VALUE:
293
        }
294
        getNextParameter();
295
      }
296

  
297
    }
298
  }
299

  
300
  public void mouseEntered(MouseEvent e) throws BehaviorException {
301
    // TODO Auto-generated method stub
302
  }
303

  
304
  public void mouseMoved(MouseEvent e) throws BehaviorException {
305
    ViewPort vp = mapControl.getViewPort();
306
    adjustedPoint = vp.convertToMapPoint(e.getX(),e.getY());
307
    showCoords(e.getPoint());
308

  
309
    getMapControl().repaint();
310
  }
311

  
312
  public void mousePressed(MouseEvent e) throws BehaviorException {
313
    // TODO Auto-generated method stub
314
  }
315

  
316
  public void mouseReleased(MouseEvent e) throws BehaviorException {
317
    // TODO Auto-generated method stub
318
  }
319

  
320
  public void paintComponent(MapControlDrawer mapControlDrawer) {
321
    super.paintComponent(mapControlDrawer);
322
    if (activeService == null || adjustedPoint == null) {
323
      return;
324
    }
325

  
326
    Geometry helperGeo = activeService.draw(adjustedPoint);
327
    if (helperGeo != null) {
328
      mapControl.getMapControlDrawer().draw(helperGeo,
329
          MapControlLocator.getMapControlManager().getAxisReferenceSymbol());
330
    }
331
  }
332

  
333
  private void setCaretPosition(DefaultViewPanel view) {
334

  
335
    JEditTextArea jeta = view.getConsolePanel().getTxt();
336
    jeta.requestFocusInWindow();
337
    jeta.setCaretPosition(jeta.getText().length());
338

  
339
  }
340

  
341
  private void changeCurrentLayer(FLyrVect layer) {
342
    this.currentLayer = layer;
343
    this.activeService = serviceRegistration.get(layer);
344
    if (activeService != null) {
345
      getNextParameter();
346
      MainFrame main = PluginServices.getMainFrame();
347
      main.setSelectedTool(activeService.getName());
348
    }
349
  }
350

  
351
  private void showCoords(Point2D point) {
352
    String[] axisText = new String[2];
353
    axisText[0] = "X = ";
354
    axisText[1] = "Y = ";
355

  
356
    ViewPort vp = mapControl.getMapContext().getViewPort();
357
    IProjection iProj = vp.getProjection();
358
    Point p = vp.convertToMapPoint(point);
359
    Point2D p2D = new Point2D.Double(p.getX(), p.getY());
360

  
361
    sbl.setFractionDigits(p2D);
362
    axisText = sbl.setCoorDisplayText(axisText);
363
    MainFrame mF = PluginServices.getMainFrame();
364

  
365
    if (mF != null) {
366
      mF.getStatusBar().setMessage(
367
          "units",
368
          PluginServices.getText(this,
369
              MapContext.getDistanceNames()[vp.getDistanceUnits()]));
370
      mF.getStatusBar().setControlValue("scale",
371
          String.valueOf(mapControl.getMapContext().getScaleView()));
372
      mF.getStatusBar().setMessage("projection", iProj.getAbrev());
373

  
374
      String[] coords = sbl.getCoords(p2D);
375
      mF.getStatusBar().setMessage("x", axisText[0] + coords[0]);
376
      mF.getStatusBar().setMessage("y", axisText[1] + coords[1]);
377
    }
378

  
379
  }
380

  
381
  private void textEntered(String response) {
382
    if (response == null) {
383
      cleanBehavior();
384
    }
385
    else {
386
      int type = currentParam.getType();
387
      try {
388
        switch (type) {
389
          case EditingServiceParameter.TYPE_POINT:
390
            String[] numbers = new String[1];
391
            numbers[0] = response;
392
            numbers = response.split(",");
393
            if (numbers.length == 2) {
394
              if (numbers[0].startsWith("(") && numbers[1].endsWith(")\n")) { // CCS
395
                numbers[0] = numbers[0].replace("(", "");
396
                numbers[1] = numbers[1].replace(")\n", "");
397
              }
398
              double[] values = new double[] { Double.parseDouble(numbers[0]),
399
                  Double.parseDouble(numbers[1]) };
400
              Point2D point = new Point2D.Double(values[0], values[1]);
401
              this.activeService.value(point);
402

  
403
            }
404
            else {
405
              throw new RuntimeException("Datos inv?lidos: " + response);
406
            }
407
          case EditingServiceParameter.TYPE_LIST_POINTS:
408
          case EditingServiceParameter.TYPE_OPTION:
409
          case EditingServiceParameter.TYPE_SELECTION:
410
          case EditingServiceParameter.TYPE_GEOMETRY:
411
          case EditingServiceParameter.TYPE_VALUE:
412
        }
413
        getNextParameter();
414
      }
415
      catch (Exception e) {
416
        throw new RuntimeException("Datos inv?lidos: " + response);
417
      }
418
    }
419
  }
420
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingSwingManager.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.swing.impl 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.impl;
8

  
9
import org.gvsig.app.ApplicationLocator;
10
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
11
import org.gvsig.editing.EditingNotification;
12
import org.gvsig.editing.EditingNotificationManager;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
15
import org.gvsig.fmap.mapcontrol.MapControl;
16
import org.gvsig.fmap.mapcontrol.MapControlLocator;
17
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
18
import org.gvsig.tools.dynobject.DynObject;
19
import org.gvsig.tools.service.AbstractManager;
20
import org.gvsig.tools.service.Service;
21
import org.gvsig.tools.service.ServiceException;
22
import org.gvsig.tools.service.spi.ProviderManager;
23
import org.gvsig.utils.console.jedit.JEditTextArea;
24
import org.gvsig.vectorediting.lib.api.EditingManager;
25
import org.gvsig.vectorediting.lib.impl.DefaultEditingProviderManager;
26
import org.gvsig.vectorediting.swing.api.EditingBehavior;
27
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
28
import org.slf4j.Logger;
29
import org.slf4j.LoggerFactory;
30

  
31
public class DefaultEditingSwingManager extends AbstractManager implements
32
    EditingSwingManager {
33

  
34
  private static final Logger logger = LoggerFactory
35
      .getLogger(EditingManager.class);
36

  
37
  public DefaultEditingSwingManager() {
38
    super(new DefaultEditingProviderManager());
39
    // TODO Auto-generated constructor stub
40
  }
41

  
42
  public Service getService(DynObject parameters) throws ServiceException {
43
    // TODO Auto-generated method stub
44
    return null;
45
  }
46

  
47
  public void activateTool(String name, MapControl mapControl) {
48
    // TODO Auto-generated method stub
49
    if (mapControl != null && mapControl.hasTool("VectorEditing")) {
50
      EditingBehavior behavior = (EditingBehavior) mapControl
51
          .getMapTool("VectorEditing");
52
      behavior.activateTool(name);
53
    }
54
  }
55

  
56
  public void beginEdition(FLyrVect layer, DefaultViewPanel view)
57
      throws DataException {
58

  
59
    EditingNotificationManager editingNotificationManager = MapControlLocator
60
        .getEditingNotificationManager();
61

  
62
    EditingNotification notification = editingNotificationManager
63
        .notifyObservers(this, EditingNotification.BEFORE_ENTER_EDITING_STORE,
64
            view.getDocument(), layer);
65

  
66
    if (notification.isCanceled()) {
67
      logger.info("Edit layer '" + layer.getName()
68
          + "' canceled by somme observer.");
69
      throw new RuntimeException("Edit layer '" + layer.getName()
70
          + "' canceled.");
71
    }
72

  
73
    initFocus(view);
74
    view.showConsole();
75
    setCaretPosition(view);
76

  
77
    layer.getFeatureStore().edit();
78
    layer.getFeatureStore().addObserver(view);
79
    layer.getFeatureStore().addObserver(view.getMapControl());
80

  
81
    ApplicationLocator.getManager().refreshMenusAndToolBars();
82

  
83
    editingNotificationManager.notifyObservers(this,
84
        EditingNotification.AFTER_ENTER_EDITING_STORE, view.getDocument(),
85
        layer);
86
  }
87

  
88
  private void initFocus(DefaultViewPanel view) {
89

  
90
    MapControl mapControl = view.getMapControl();
91

  
92
    if (!mapControl.hasTool("VectorEditing")) {
93
      Behavior vectorEditing = new DefaultEditingBehavior(mapControl);
94
      mapControl.addBehavior("VectorEditing", vectorEditing);
95
    }
96
    else {
97
      EditingBehavior editingBehavior = (EditingBehavior) mapControl
98
          .getMapTool("VectorEditing");
99
      editingBehavior.cleanBehavior();
100
    }
101

  
102
    mapControl.setTool("VectorEditing");
103

  
104
  }
105

  
106
  private void setCaretPosition(DefaultViewPanel view) {
107

  
108
    JEditTextArea jeta = view.getConsolePanel().getTxt();
109
    jeta.requestFocusInWindow();
110
    jeta.setCaretPosition(jeta.getText().length());
111

  
112
  }
113

  
114
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.vectorediting.swing.impl.DefaultEditingSwingLibrary
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/pom.xml
10 10
		<artifactId>org.gvsig.vectorediting.swing</artifactId>
11 11
		<version>1.0.0-SNAPSHOT</version>
12 12
	</parent>
13
	<dependencies>
14
		<dependency>
15
			<groupId>org.gvsig</groupId>
16
			<artifactId>org.gvsig.vectorediting.swing.api</artifactId>
17
		</dependency>
18
		<dependency>
19
			<groupId>org.gvsig</groupId>
20
			<artifactId>org.gvsig.vectorediting.lib.impl</artifactId>
21
		</dependency>
22
	</dependencies>
13 23
</project>
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.vectorediting.swing.api.EditingSwingLibrary
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/java/org/gvsig/vectorediting/swing/api/EditingSwingLocator.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.swing.api 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.api;
8

  
9
import org.gvsig.tools.locator.BaseLocator;
10
import org.gvsig.tools.locator.Locator;
11
import org.gvsig.tools.locator.LocatorException;
12

  
13

  
14
public class EditingSwingLocator extends BaseLocator {
15

  
16
  private static final String LOCATOR_NAME = "EditingSwingLocator";
17

  
18
  public static final String MANAGER_NAME = "VectorEditingSwing.manager";
19

  
20
  private static final String MANAGER_DESCRIPTION = "Editing Swing Manager of gvSIG";
21

  
22
  private static final EditingSwingLocator instance = new EditingSwingLocator();
23

  
24
  private EditingSwingLocator() {
25

  
26
  }
27

  
28
  /**
29
   * Return the singleton instance.
30
   * 
31
   * @return the singleton instance
32
   */
33
  public static EditingSwingLocator getInstance() {
34
    return instance;
35
  }
36

  
37
  public String getLocatorName() {
38
    return LOCATOR_NAME;
39
  }
40

  
41
  /**
42
   * Return a reference to EditingSwingManager.
43
   * 
44
   * @return a reference to EditingSwingManager
45
   * @throws LocatorException if there is no access to the class or the class
46
   *           cannot be instantiated
47
   * @see Locator#get(String)
48
   */
49
  public static EditingSwingManager getSwingManager() throws LocatorException {
50
    return (EditingSwingManager) getInstance().get(MANAGER_NAME);
51
  }
52

  
53
  /**
54
   * Registers the Class implementing the EditingSwingLocator interface.
55
   * 
56
   * @param clazz implementing the EeditingSwingManager interface
57
   */
58
  public static void registerManager(Class clazz) {
59
    getInstance().register(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
60
  }
61

  
62
  public static void registerDefaultManager(Class clazz) {
63
    getInstance().registerDefault(MANAGER_NAME, MANAGER_DESCRIPTION, clazz);
64
  }
65

  
66
}
67

  
68

  
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/java/org/gvsig/vectorediting/swing/api/EditingSwingLibrary.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.swing.api 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.api;
8

  
9
import org.gvsig.fmap.dal.DALLibrary;
10
import org.gvsig.fmap.geom.GeometryLibrary;
11
import org.gvsig.tools.library.AbstractLibrary;
12
import org.gvsig.tools.library.LibraryException;
13
import org.gvsig.tools.locator.ReferenceNotRegisteredException;
14

  
15

  
16
public class EditingSwingLibrary extends AbstractLibrary {
17

  
18
  @Override
19
  public void doRegistration() {
20
      registerAsAPI(EditingSwingLibrary.class);
21
      require(DALLibrary.class);
22
      require(GeometryLibrary.class);
23
  }
24
  
25
  @Override
26
  protected void doInitialize() throws LibraryException {
27
    // TODO Auto-generated method stub
28
    
29
  }
30

  
31
  @Override
32
  protected void doPostInitialize() throws LibraryException {
33
    EditingSwingManager manager = EditingSwingLocator.getSwingManager();
34
    if (manager == null) {
35
        throw new ReferenceNotRegisteredException(
36
            EditingSwingLocator.MANAGER_NAME, EditingSwingLocator
37
                .getInstance());
38
    }
39
    
40
  }
41

  
42
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/java/org/gvsig/vectorediting/swing/api/EditingBehavior.java
1
/*
2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.app.mainplugin 
5
 * SVN Id   : $Id$
6
 */
7
package org.gvsig.vectorediting.swing.api;
8

  
9
import org.gvsig.fmap.mapcontrol.tools.Behavior.IBehavior;
10

  
11

  
12
public interface EditingBehavior extends IBehavior{
13

  
14
  /**
15
   * 
16
   * @param name
17
   */
18
  void activateTool(String name);
19

  
20
  /**
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff