Statistics
| Revision:

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

History | View | Annotate | Download (5.47 KB)

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.app.mainplugin.extensions;
8

    
9
import java.util.ArrayList;
10
import java.util.List;
11

    
12
import org.gvsig.andami.IconThemeHelper;
13
import org.gvsig.andami.PluginServices;
14
import org.gvsig.andami.plugins.Extension;
15
import org.gvsig.app.ApplicationLocator;
16
import org.gvsig.app.project.documents.view.ViewDocument;
17
import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
18
import org.gvsig.app.project.documents.view.toolListeners.StatusBarListener;
19
import org.gvsig.fmap.mapcontext.layers.FLayer;
20
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
21
import org.gvsig.fmap.mapcontrol.MapControl;
22
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
23
import org.gvsig.fmap.mapcontrol.tools.Behavior.MouseMovementBehavior;
24
import org.gvsig.vectorediting.lib.api.EditingLocator;
25
import org.gvsig.vectorediting.lib.api.EditingManager;
26
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
27
import org.gvsig.vectorediting.lib.api.exceptions.ServiceInformationException;
28
import org.gvsig.vectorediting.swing.api.EditingContext;
29
import org.gvsig.vectorediting.swing.api.EditingSwingLocator;
30
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
31
import org.gvsig.vectorediting.swing.impl.DefaultEditingBehavior;
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

    
35
public class EditingExtension extends Extension {
36

    
37
  private static final Logger logger = LoggerFactory
38
      .getLogger(DefaultEditingBehavior.class);
39

    
40
  public void execute(String actionCommand) {
41

    
42
    DefaultViewPanel view = getActiveView();
43
    EditingSwingManager swingManager = EditingSwingLocator.getSwingManager();
44
    if (view != null) {
45
      FLyrVect layer = getActiveLayer(view);
46
      EditingContext editingContext = swingManager.getEditingContext(view
47
          .getMapControl());
48
      if ("start-editing".equals(actionCommand)) {
49
        if (canBeEdited(layer)) {
50
          MapControl mapControl = view.getMapControl();
51
          StatusBarListener sbl = new StatusBarListener(mapControl);
52
          editingContext.beginEdition(layer,
53
              new Behavior[] { new MouseMovementBehavior(sbl) });
54
          ApplicationLocator.getManager().refreshMenusAndToolBars();
55
        }
56
      }
57
      else if ("end-editing".equals(actionCommand)) {
58
        if (layer != null && layer.isEditing()) {
59
          editingContext.endEdition(layer);
60
          ApplicationLocator.getManager().refreshMenusAndToolBars();
61
        }
62
      } else {
63
        editingContext.activateService(actionCommand);
64
      }
65
    }
66
  }
67

    
68
  public void initialize() {
69
    registerIcons();
70
  }
71

    
72
  private void registerIcons() {
73
    IconThemeHelper.registerIcon("action", "vector-editing", this);
74
    IconThemeHelper.registerIcon("action", "insert-point", this);
75
    IconThemeHelper.registerIcon("action", "insert-circle-cr", this);
76
    IconThemeHelper.registerIcon("action", "insert-circumference-cr", this);
77
    IconThemeHelper.registerIcon("action", "insert-polyline", this);
78
    IconThemeHelper.registerIcon("action", "insert-polygon", this);
79
    IconThemeHelper.registerIcon("action", "modify-symmetry", this);
80
    IconThemeHelper.registerIcon("action", "modify-internal-polygon", this);
81
  }
82

    
83
  public boolean isEnabled() {
84
    return true;
85
  }
86

    
87
  public boolean isVisible() {
88
    return true;
89
  }
90

    
91
  @Override
92
  public boolean isVisible(String action) {
93
    DefaultViewPanel view = getActiveView();
94
    FLyrVect activeLayer = getActiveLayer(view);
95
    if ("start-editing".equals(action)) {
96
      return (view != null && activeLayer != null && !activeLayer.isEditing());
97
    } else {
98
      return (view != null && activeLayer != null && activeLayer.isEditing());
99
    }
100
  }
101

    
102
  @Override
103
  public boolean isEnabled(String action) {
104
    EditingManager manager = EditingLocator.getManager();
105
    DefaultViewPanel vista = getActiveView();
106
    FLyrVect activeLayer = getActiveLayer(vista);
107

    
108
    if ("start-editing".equals(action)) {
109
      return (canBeEdited(activeLayer));
110
    }
111
    else if ("end-editing".equals(action)) {
112
      return activeLayer.isEditing();
113
    } else {
114
      EditingServiceInfo serviceInfo = null;
115
      try {
116
        serviceInfo = manager.getServiceInfo(action);
117
        return serviceInfo.isCompatibleWith(activeLayer.getFeatureStore());
118
      }
119
      catch (ServiceInformationException e) {
120
        logger.error("Can't get service information of " + action, e);
121
      }
122
    }
123
    return false;
124
  }
125

    
126
  public boolean canQueryByAction() {
127
    return true;
128
  }
129

    
130
  private DefaultViewPanel getActiveView() {
131
    org.gvsig.andami.ui.mdiManager.IWindow activeWindow = PluginServices
132
        .getMDIManager().getActiveWindow();
133

    
134
    if (activeWindow instanceof DefaultViewPanel) {
135
      return (DefaultViewPanel) activeWindow;
136
    }
137

    
138
    return null;
139
  }
140

    
141
  private boolean canBeEdited(FLyrVect layer) {
142
    if (layer != null) {
143
      boolean isWritable = layer.isWritable();
144
      boolean isNotTransformed = layer.getFeatureStore().getTransforms()
145
          .isEmpty();
146

    
147
      return isWritable && isNotTransformed && !layer.isEditing();
148
    }
149
    return false;
150
  }
151

    
152
  private FLyrVect getActiveLayer(DefaultViewPanel vista) {
153
    if (vista != null) {
154
      ViewDocument viewDocument = vista.getViewDocument();
155
      FLayer[] actives = viewDocument.getMapContext().getLayers().getActives();
156

    
157
      if (actives.length == 1 && actives[0] instanceof FLyrVect) {
158
        return (FLyrVect) actives[0];
159
      }
160
    }
161
    return null;
162
  }
163
}