Revision 2444 org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.swing/org.gvsig.vectorediting.swing.impl/src/main/java/org/gvsig/vectorediting/swing/impl/DefaultEditingContext.java

View differences:

DefaultEditingContext.java
28 28
import java.awt.Component;
29 29
import java.lang.ref.WeakReference;
30 30
import java.lang.reflect.InvocationTargetException;
31
import java.util.AbstractList;
32 31
import java.util.ArrayList;
32
import java.util.HashSet;
33
import java.util.Iterator;
33 34
import java.util.List;
34 35
import java.util.Set;
35 36
import java.util.Stack;
37
import java.util.logging.Level;
36 38
import java.util.prefs.PreferenceChangeEvent;
37 39
import java.util.prefs.PreferenceChangeListener;
38 40
import java.util.prefs.Preferences;
39

  
40 41
import javax.swing.JComponent;
41 42
import javax.swing.JOptionPane;
42 43
import javax.swing.SwingUtilities;
43

  
44
import org.apache.commons.lang3.StringUtils;
45
import org.gvsig.expressionevaluator.ExpressionUtils;
46
import org.gvsig.fmap.dal.DataTypes;
47
import org.gvsig.fmap.dal.EditingNotification;
48
import org.gvsig.fmap.dal.EditingNotificationManager;
44 49
import org.gvsig.fmap.dal.exception.DataException;
45 50
import org.gvsig.fmap.dal.feature.FeatureSelection;
46 51
import org.gvsig.fmap.dal.feature.FeatureStore;
52
import org.gvsig.fmap.dal.swing.DALSwingLocator;
47 53
import org.gvsig.fmap.geom.Geometry;
48 54
import org.gvsig.fmap.geom.GeometryLocator;
55
import org.gvsig.fmap.geom.GeometryUtils;
56
import org.gvsig.fmap.geom.primitive.Point;
49 57
import org.gvsig.fmap.geom.type.GeometryType;
50 58
import org.gvsig.fmap.mapcontext.MapContext;
51 59
import org.gvsig.fmap.mapcontext.layers.CancelationException;
......
56 64
import org.gvsig.fmap.mapcontext.layers.LayerEvent;
57 65
import org.gvsig.fmap.mapcontext.layers.LayerListener;
58 66
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
67
import org.gvsig.fmap.mapcontext.layers.SpatialCache;
59 68
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
60 69
import org.gvsig.fmap.mapcontrol.MapControl;
70
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
61 71
import org.gvsig.fmap.mapcontrol.tools.CompoundBehavior;
62
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
63 72
import org.gvsig.tools.ToolsLocator;
73
import org.gvsig.tools.dataTypes.Coercion;
64 74
import org.gvsig.tools.i18n.I18nManager;
65 75
import org.gvsig.tools.observer.BaseNotification;
66 76
import org.gvsig.tools.observer.Notification;
67 77
import org.gvsig.tools.observer.ObservableHelper;
68 78
import org.gvsig.tools.observer.Observer;
79
import org.gvsig.tools.swing.api.ToolsSwingLocator;
80
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
69 81
import org.gvsig.utils.console.JDockPanel;
70 82
import org.gvsig.utils.console.ResponseListener;
71 83
import org.gvsig.vectorediting.lib.api.EditingLocator;
......
89 101
import org.gvsig.vectorediting.swing.api.EditingSwingManager;
90 102
import org.gvsig.vectorediting.swing.api.console.EditingConsole;
91 103
import org.gvsig.vectorediting.swing.impl.console.DefaultEditingConsole;
92
import org.gvsig.fmap.geom.primitive.Point;
93

  
94
import org.apache.commons.lang3.StringUtils;
95
import org.gvsig.expressionevaluator.ExpressionUtils;
96
import org.gvsig.expressionevaluator.MutableSymbolTable;
97
import org.gvsig.expressionevaluator.SymbolTable;
98
import org.gvsig.fmap.dal.DataTypes;
99

  
100
import org.gvsig.fmap.dal.EditingNotification;
101
import org.gvsig.fmap.dal.EditingNotificationManager;
102
import org.gvsig.fmap.dal.swing.DALSwingLocator;
103
import org.gvsig.temporarystorage.TemporaryStorageGroup;
104
import org.gvsig.temporarystorage.TemporaryStorageLocator;
105
import org.gvsig.temporarystorage.TemporaryStorageManager;
106
import org.gvsig.tools.dataTypes.Coercion;
107
import org.gvsig.tools.swing.api.ToolsSwingLocator;
108
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
109

  
110 104
import org.slf4j.Logger;
111 105
import org.slf4j.LoggerFactory;
112 106

  
......
138 132
    private EditingServiceParameter currentParam;
139 133

  
140 134
    private Behavior[] defaultBehaviors;
135
    
136
    private Set<FLyrVect> layersSpatialCacheEnabled = new HashSet<>();
141 137

  
142 138
    private final LayerListener layerListener = new LayerListener() {
143 139

  
......
163 159
            }
164 160

  
165 161
            if (layer instanceof FLyrVect) {
166
                if (layer.isActive() && layer.isEditing()) {
167
                    getMapControl().setTool("VectorEditing");
168
                    setCurrentLayer((FLyrVect) layer);
169
                    showConsole();
170
                    return;
162
                if (layer.isActive()) {
163
                    if(layer.isEditing()) {
164
                        getMapControl().setTool("VectorEditing");
165
                        setCurrentLayer((FLyrVect) layer);
166
                        showConsole();
167
                        return;
168
                    } else {
169
                        final SpatialCache spatialCache = ((FLyrVect) layer).getSpatialCache();
170
                        if(!spatialCache.isEnabled()){
171
                            spatialCache.setEnabled(true);
172
                            //We keep the list of layers whose spatial cache is enabled here.
173
                            layersSpatialCacheEnabled.add((FLyrVect) layer);
174

  
175
                        }
176
                    }
177
                } else {
178
                    if(!layer.isEditing()) {
179
                        //We disabled the spatial cache of the layers that we had enabled here.
180
                        final SpatialCache spatialCache = ((FLyrVect) layer).getSpatialCache();
181
                        if(spatialCache.isEnabled() && layersSpatialCacheEnabled.contains((FLyrVect) layer)){
182
                            spatialCache.setEnabled(false);
183
                            layersSpatialCacheEnabled.remove((FLyrVect) layer);
184
                        }
185
                    }
171 186
                }
172 187
            }
173 188

  
......
306 321
                    this.enableSelection(false);
307 322

  
308 323
                    try {
324
                        service.activate();
309 325
                        service.start();
310 326
                    } catch (StartServiceException e) {
311 327

  
......
689 705
    }
690 706

  
691 707
    private void enableSelection(boolean enableSelection) {
692
        this.editingCompoundBehavior.setDrawnBehavior(
693
            EditingCompoundBehavior.SELECTION_INDEX, enableSelection);
708
        this.getEditingCompoundBehavior().setDrawnBehavior(
709
                EditingCompoundBehavior.SELECTION_INDEX, enableSelection);
694 710
    }
695 711

  
696 712
    @Override
......
857 873
            && !getMapControl().getCurrentTool().equals("VectorEditing")) {
858 874
            getMapControl().setTool("VectorEditing");
859 875
        }
876
        EditingService activeService = getActiveService();
877
        currentParam = activeService.next();
860 878

  
861
        currentParam = getActiveService().next();
862

  
863 879
        if (currentParam == null) {
864 880
            finishService();
865 881
        } else {
......
909 925

  
910 926
                for (EditingService editingService : getServiceStack()) {
911 927
                    EditingServiceParameter parameter = editingService.next();
912
                    if (parameter != null
913
                        && parameter.getTypes().contains(TYPE.GEOMETRY)) {
928
                    if (parameter != null) {
929
                        if (parameter.getTypes().contains(TYPE.GEOMETRY)) {
914 930

  
915
                        int geometryType = parameter.getGeometryType();
916
                        int subType = -1;
931
                            int geometryType = parameter.getGeometryType();
932
                            int subType = -1;
917 933

  
918
                        try {
919
                            subType =
920
                                getCurrentLayer().getFeatureStore()
921
                                    .getDefaultFeatureType()
922
                                    .getDefaultGeometryAttribute()
923
                                    .getGeomType().getSubType();
934
                            try {
935
                                subType
936
                                        = getCurrentLayer().getFeatureStore()
937
                                                .getDefaultFeatureType()
938
                                                .getDefaultGeometryAttribute()
939
                                                .getGeomType().getSubType();
924 940

  
925
                            geoType =
926
                                GeometryLocator.getGeometryManager()
927
                                    .getGeometryType(geometryType, subType);
928
                        } catch (Exception e) {
941
                                geoType
942
                                        = GeometryLocator.getGeometryManager()
943
                                                .getGeometryType(geometryType, subType);
944
                            } catch (Exception e) {
929 945

  
930
                            String msg =
931
                                String.format(
932
                                    "Problems getting default feature"
933
                                        + " type of %1$s or getting geometry"
934
                                        + " type of %2$s %3$s",
935
                                    getCurrentLayer().getName(), geometryType,
936
                                    subType);
946
                                String msg
947
                                        = String.format(
948
                                                "Problems getting default feature"
949
                                                + " type of %1$s or getting geometry"
950
                                                + " type of %2$s %3$s",
951
                                                getCurrentLayer().getName(), geometryType,
952
                                                subType);
937 953

  
938
                            throw new ServiceInformationException(msg, e);
954
                                throw new ServiceInformationException(msg, e);
955
                            }
956

  
957
                            return serviceInfo.isCompatibleWith(geoType)
958
                                    && serviceInfo.createsNewGeometries();
939 959
                        }
940

  
941
                        return serviceInfo.isCompatibleWith(geoType)
942
                            && serviceInfo.createsNewGeometries();
943 960
                    }
944 961
                }
945 962

  
946 963
                if (getCurrentLayer() != null) {
947 964
                    try {
948
                        geoType =
949
                            getCurrentLayer().getFeatureStore()
950
                                .getDefaultFeatureType()
951
                                .getDefaultGeometryAttribute().getGeomType();
965
                        geoType
966
                                = getCurrentLayer().getFeatureStore()
967
                                        .getDefaultFeatureType()
968
                                        .getDefaultGeometryAttribute().getGeomType();
969

  
970
                        if (serviceInfo.isCompatibleWith(geoType)) {
971
                            return true;
972
                        }
952 973
                    } catch (DataException e) {
953
                        String msg =
954
                            String.format("Problems getting default "
955
                                + "feature type of %1$s", getCurrentLayer()
956
                                .getName());
974
                        String msg
975
                                = String.format("Problems getting default "
976
                                        + "feature type of %1$s", getCurrentLayer()
977
                                                .getName());
957 978
                        throw new ServiceInformationException(msg, e);
958 979
                    }
959

  
960
                    return serviceInfo.isCompatibleWith(geoType);
961 980
                }
962 981

  
963 982
                return false;
......
1215 1234
                input = input.replace("\n", "");
1216 1235
                return input;
1217 1236
            }
1237

  
1218 1238
            if (!insertedValue && types.contains(TYPE.SELECTION)) {
1219 1239
                if (input.equalsIgnoreCase("\n")) {
1220 1240
                    enableSelection(false);

Also available in: Unified diff