Statistics
| Revision:

gvsig-vectorediting / 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 @ 30

History | View | Annotate | Download (4.74 KB)

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 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.locator.LocatorException;
20
import org.gvsig.tools.service.AbstractManager;
21
import org.gvsig.tools.service.Service;
22
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
import org.gvsig.vectorediting.lib.api.EditingManager;
28
import org.gvsig.vectorediting.lib.api.EditingService;
29
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
30
import org.gvsig.vectorediting.lib.spi.EditingProvider;
31
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
32
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

    
36
public class DefaultEditingManager extends AbstractManager implements
37
    EditingManager {
38

    
39
  private static final Logger logger = LoggerFactory
40
      .getLogger(EditingManager.class);
41

    
42
  public DefaultEditingManager() {
43
    super(new DefaultEditingProviderManager());
44
    // TODO Auto-generated constructor stub
45
  }
46

    
47
  public Service getService(DynObject arg0) throws ServiceException {
48
    // TODO Auto-generated method stub
49
    EditingProvider provider = (EditingProvider) EditingProviderLocator
50
        .getProviderManager().createProvider(arg0,
51
            new DefaultEditingProviderServices());
52
    return new DefaultEditingService(provider);
53
  }
54

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

    
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
  public EditingService getEditingService(String name, FLyrVect layer) {
69
    try {
70
      DynObject params = this.createServiceParameters(name);
71
      params.setDynValue(EditingProviderFactory.LAYER_FIELD, layer);
72
      return (EditingService) this.getService(params);
73
    }
74
    catch (ServiceException e) {
75
      // TODO Auto-generated catch block
76
      e.printStackTrace();
77
    }
78

    
79
    return null;
80
  }
81

    
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
}