Revision 48

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/extensions/EditingExtension.java
7 7
package org.gvsig.vectorediting.app.mainplugin.extensions;
8 8

  
9 9
import org.gvsig.andami.IconThemeHelper;
10
import org.gvsig.app.ApplicationLocator;
10 11
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
11 12
import org.gvsig.fmap.dal.exception.DataException;
12 13
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
......
28 29

  
29 30
      if (canBeEdited(layer)) {
30 31
        try {
31
          swingManager.beginEdition(layer, vista);
32
          swingManager.beginEdition(layer, vista.getMapControl());
33
          ApplicationLocator.getManager().refreshMenusAndToolBars();
32 34
        }
33 35
        catch (DataException e) {
34 36
          // TODO Auto-generated catch block
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingProviderServices.java
1 1
/*
2 2
 * Copyright 2014 DiSiD Technologies S.L.L. All rights reserved.
3
 *
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.impl
3
 * 
4
 * Project  : DiSiD org.gvsig.vectorediting.lib.impl 
5 5
 * SVN Id   : $Id$
6 6
 */
7 7
package org.gvsig.vectorediting.lib.impl;
8 8

  
9
import org.exolab.castor.xml.ValidationException;
10 9
import org.gvsig.andami.messages.NotificationManager;
11 10
import org.gvsig.editing.EditingNotification;
12 11
import org.gvsig.editing.EditingNotificationManager;
......
15 14
import org.gvsig.fmap.dal.feature.FeatureStore;
16 15
import org.gvsig.fmap.geom.Geometry;
17 16
import org.gvsig.fmap.mapcontext.layers.CancelationException;
18
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
19 17
import org.gvsig.fmap.mapcontrol.MapControlLocator;
20 18
import org.gvsig.tools.service.spi.AbstractProviderServices;
21 19
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
......
51 49
      }
52 50
      if (!notification.shouldValidateTheFeature()) {
53 51
        if (!editingNotificationManager.validateFeature(eFeature)) {
54
          throw new ValidationException("");
52
          throw new Exception("");
55 53
        }
56 54
      }
57 55

  
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
6 6
 */
7 7
package org.gvsig.vectorediting.swing.impl;
8 8

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

  
18 20
import org.cresques.cts.IProjection;
19 21
import org.gvsig.andami.PluginServices;
20 22
import org.gvsig.andami.ui.mdiFrame.MainFrame;
21
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
22 23
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
23 24
import org.gvsig.fmap.geom.Geometry;
24 25
import org.gvsig.fmap.geom.primitive.Point;
......
40 41
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
41 42
import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
42 43
import org.gvsig.utils.console.JConsole;
44
import org.gvsig.utils.console.JDockPanel;
43 45
import org.gvsig.utils.console.ResponseListener;
44 46
import org.gvsig.utils.console.jedit.JEditTextArea;
45 47
import org.gvsig.vectorediting.lib.api.EditingLocator;
......
65 67

  
66 68
  private StatusBarListener sbl = null;
67 69

  
70
  private JConsole console;
71

  
72
  private JDockPanel dockConsole = null;
73

  
74
  private boolean isShowConsole;
75

  
76
  protected ResponseAdapter consoleResponseAdapter;
77

  
68 78
  private static final Image imageCursor = new BufferedImage(32, 32,
69 79
      BufferedImage.TYPE_INT_ARGB);
70 80
  static {
......
82 92
  private LayerListener layerListener = new LayerListener() {
83 93

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

  
89 98
        if (layer.isActive() && layer.isEditing()) {
90
          view.showConsole();
99
          showConsole();
91 100
          getMapControl().setTool("VectorEditing");
92
          // cleanBehavior();
93 101
        }
94 102
        else if (!layer.isEditing() && layer.isActive()) {
95 103
          changeCurrentLayer((FLyrVect) layer);
96
          view.hideConsole();
104
          hideConsole();
97 105
          getMapControl().setTool("zoomIn");
98 106
          PluginServices.getMainFrame().setSelectedTool("ZOOM_IN");
99 107
        }
......
113 121
  };
114 122

  
115 123
  public void cleanBehavior() {
116
    // activeService = null;
117
    // currentParam = null;
124
    activeService = null;
125
    currentParam = null;
118 126

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

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

  
150
  private void initConsolePanelListeners(JConsole jConsole) {
151
    consoleResponseAdapter = new ResponseAdapter();
152
    jConsole.addResponseListener(consoleResponseAdapter);
153
    addConsoleListener("ViewEditing", new ResponseListener() {
154

  
155
      public void acceptResponse(String response) {
156
        try {
157
          textEntered(response);
158
        }
159
        catch (RuntimeException ex) {
160
          getConsolePanel().addText(ex.getMessage(), JConsole.ERROR);
161
          getNextParameter();
162
        }
163
      }
164
    });
165
    
166
  }
167

  
143 168
  public void activateTool(String name) {
144 169

  
145 170
    EditingManager manager = EditingLocator.getManager();
......
147 172
    if (currentLayer != null) {
148 173
      EditingService service = serviceRegistration.get(currentLayer);
149 174
      if (service == null) {
150
        service = (EditingService) manager
151
            .getEditingService(name, currentLayer.getFeatureStore());
175
        service = (EditingService) manager.getEditingService(name,
176
            currentLayer.getFeatureStore());
152 177
        serviceRegistration.put(currentLayer, service);
153 178
      }
154 179
      if (service != null) {
......
160 185
  }
161 186

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

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

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

  
180 194
  @Override
181 195
  public ToolListener getListener() {
182 196
    return new ToolListener() {
......
207 221
    }
208 222
    else {
209 223
      askQuestion(currentParam);
210
      setCaretPosition(getActiveView());
224
      setCaretPosition();
211 225
    }
212 226

  
213 227
  }
214 228

  
215 229
  private void initMapControlListeners(MapControl mapControl) {
216
    DefaultViewPanel view = getActiveView();
217 230

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

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

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

  
234
      }
235
    });
236

  
237 231
    MapContext context = mapControl.getMapContext();
238 232
    FLayers layers = context.getLayers();
239 233
    layers.addLayerListener(layerListener);
......
277 271

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

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

  
310 304
    getMapControl().repaint();
......
331 325
    }
332 326
  }
333 327

  
334
  private void setCaretPosition(DefaultViewPanel view) {
328
  private void setCaretPosition() {
335 329

  
336
    JEditTextArea jeta = view.getConsolePanel().getTxt();
330
    JEditTextArea jeta = getConsolePanel().getTxt();
337 331
    jeta.requestFocusInWindow();
338 332
    jeta.setCaretPosition(jeta.getText().length());
339 333

  
......
398 392
              }
399 393
              double[] values = new double[] { Double.parseDouble(numbers[0]),
400 394
                  Double.parseDouble(numbers[1]) };
401
              Point2D point = new Point2D.Double(values[0], values[1]);
395

  
396
              Point point = geomManager.createPoint(values[0], values[1],
397
                  Geometry.SUBTYPES.GEOM2D); // TODO Maybe do util class to get type
398
                                             // and subtype of a featureStore
399

  
402 400
              this.activeService.value(point);
403

  
404 401
            }
405 402
            else {
406 403
              throw new RuntimeException("Datos inv?lidos: " + response);
......
418 415
      }
419 416
    }
420 417
  }
418

  
419
  private JDockPanel getDockConsole() {
420
    if (dockConsole == null) {
421
      dockConsole = new JDockPanel(getConsolePanel());
422
    }
423
    return dockConsole;
424
  }
425

  
426
  public void showConsole() {
427
    if (isShowConsole) {
428
      return;
429
    }
430
    isShowConsole = true;
431
    getMapControl().remove(getDockConsole());
432
    getMapControl().setLayout(new BorderLayout());
433
    getMapControl().add(getDockConsole(), BorderLayout.SOUTH);
434
    getDockConsole().setVisible(true);
435
    setCaretPosition();
436
  }
437

  
438
  public void hideConsole() {
439
    isShowConsole = false;
440
    getDockConsole().setVisible(false);
441

  
442
  }
443

  
444
  private JConsole getConsolePanel() {
445
    if (console == null) {
446
      console = new JConsole(true);
447
      // Para distinguir cuando se est? escribiendo sobre la consola y
448
      // cuando no.
449
      console.setJTextName("VectorEditingConsole");
450
    }
451
    return console;
452
  }
453

  
454
  private void addConsoleListener(String prefix, ResponseListener listener) {
455
    consoleResponseAdapter.putSpaceListener(prefix, listener);
456

  
457
  }
458

  
459
  static class ResponseAdapter implements ResponseListener {
460

  
461
    private HashMap<String, ResponseListener> spaceListener = new HashMap<String, ResponseListener>();
462

  
463
    public void putSpaceListener(String namespace, ResponseListener listener) {
464
      spaceListener.put(namespace, listener);
465
    }
466

  
467
    public void acceptResponse(String response) {
468
      boolean nameSpace = false;
469
      int n = -1;
470
      if (response != null) {
471
        if ((n = response.indexOf(':')) != -1) {
472
          nameSpace = true;
473
        }
474
      }
475

  
476
      if (nameSpace) {
477
        ResponseListener listener = spaceListener.get(response.substring(0, n));
478
        if (listener != null) {
479
          listener.acceptResponse(response.substring(n + 1));
480
        }
481
      }
482
      else {
483
        Iterator<ResponseListener> i = spaceListener.values().iterator();
484
        while (i.hasNext()) {
485
          ResponseListener listener = i.next();
486
          listener.acceptResponse(response);
487
        }
488
      }
489
    }
490
  }
421 491
}
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
6 6
 */
7 7
package org.gvsig.vectorediting.swing.impl;
8 8

  
9
import org.gvsig.app.ApplicationLocator;
10
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
11 9
import org.gvsig.editing.EditingNotification;
12 10
import org.gvsig.editing.EditingNotificationManager;
13 11
import org.gvsig.fmap.dal.exception.DataException;
......
19 17
import org.gvsig.tools.service.AbstractManager;
20 18
import org.gvsig.tools.service.Service;
21 19
import org.gvsig.tools.service.ServiceException;
22
import org.gvsig.tools.service.spi.ProviderManager;
23
import org.gvsig.utils.console.jedit.JEditTextArea;
24 20
import org.gvsig.vectorediting.lib.api.EditingManager;
25 21
import org.gvsig.vectorediting.lib.impl.DefaultEditingProviderManager;
26 22
import org.gvsig.vectorediting.swing.api.EditingBehavior;
......
53 49
    }
54 50
  }
55 51

  
56
  public void beginEdition(FLyrVect layer, DefaultViewPanel view)
52
  public void beginEdition(FLyrVect layer, MapControl mapControl)
57 53
      throws DataException {
58 54

  
59 55
    EditingNotificationManager editingNotificationManager = MapControlLocator
......
61 57

  
62 58
    EditingNotification notification = editingNotificationManager
63 59
        .notifyObservers(this, EditingNotification.BEFORE_ENTER_EDITING_STORE,
64
            view.getDocument(), layer);
60
            null, layer);
65 61

  
66 62
    if (notification.isCanceled()) {
67 63
      logger.info("Edit layer '" + layer.getName()
......
70 66
          + "' canceled.");
71 67
    }
72 68

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

  
69
    initFocus(mapControl);
70
    
77 71
    layer.getFeatureStore().edit();
78
    layer.getFeatureStore().addObserver(view);
79
    layer.getFeatureStore().addObserver(view.getMapControl());
72
//    layer.getFeatureStore().addObserver(view);
73
    layer.getFeatureStore().addObserver(mapControl);
80 74

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

  
83 75
    editingNotificationManager.notifyObservers(this,
84
        EditingNotification.AFTER_ENTER_EDITING_STORE, view.getDocument(),
76
        EditingNotification.AFTER_ENTER_EDITING_STORE, null,
85 77
        layer);
86 78
  }
87 79

  
88
  private void initFocus(DefaultViewPanel view) {
89

  
90
    MapControl mapControl = view.getMapControl();
91

  
80
  private void initFocus(MapControl mapControl) {
81
    
82
    EditingBehavior editingBehavior;
92 83
    if (!mapControl.hasTool("VectorEditing")) {
93
      Behavior vectorEditing = new DefaultEditingBehavior(mapControl);
94
      mapControl.addBehavior("VectorEditing", vectorEditing);
84
      editingBehavior = new DefaultEditingBehavior(mapControl);
85
      mapControl.addBehavior("VectorEditing", (Behavior) editingBehavior);
86
      
95 87
    }
96 88
    else {
97
      EditingBehavior editingBehavior = (EditingBehavior) mapControl
89
      editingBehavior = (EditingBehavior) mapControl
98 90
          .getMapTool("VectorEditing");
99 91
      editingBehavior.cleanBehavior();
100 92
    }
101

  
93
    
102 94
    mapControl.setTool("VectorEditing");
103

  
95
    editingBehavior.showConsole();
104 96
  }
105 97

  
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 98
}
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
21 21
   * 
22 22
   */
23 23
  void cleanBehavior();
24

  
24
  
25
  /**
26
   * 
27
   */
28
  void showConsole();
29
  
30
  /**
31
   * 
32
   */
33
  void hideConsole();
25 34
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.api/src/main/java/org/gvsig/vectorediting/swing/api/EditingSwingManager.java
6 6
 */
7 7
package org.gvsig.vectorediting.swing.api;
8 8

  
9
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
10 9
import org.gvsig.fmap.dal.exception.DataException;
11 10
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
12 11
import org.gvsig.fmap.mapcontrol.MapControl;
......
24 23
  /**
25 24
   * @param mapControl
26 25
   */
27
  void beginEdition(FLyrVect layer, DefaultViewPanel view) throws DataException;
26
  void beginEdition(FLyrVect layer, MapControl mapControl) throws DataException;
28 27

  
29 28
}

Also available in: Unified diff