Revision 2608

View differences:

org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.spi/src/main/java/org/gvsig/vectorediting/lib/spi/AbstractEditingProvider.java
66 66
        LOGGER.warn("'"+this.getClass().getName() + "' dooes not implement the method 'getValue'.");
67 67
        return null;
68 68
    }
69

  
70
    @Override
71
    protected EditingProviderServices getProviderServices() {
72
        return (EditingProviderServices)super.getProviderServices();
73
    }
69 74
    
75
    
76
    
70 77
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.spi/src/main/java/org/gvsig/vectorediting/lib/spi/EditingProviderServices.java
510 510
     */
511 511
    public void addAngleToDrawingStatus(DefaultDrawingStatus drawingStatus, ISymbol textSymbol, Point vertex, Point ray1, Point ray2, int subtype) 
512 512
            throws CreateGeometryException, GeometryOperationNotSupportedException, GeometryOperationException;
513
}
513

  
514
    public EditableFeature createNewFeature(FeatureStore store);
515
    
516
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.spi/src/main/java/org/gvsig/vectorediting/lib/spi/EditingProviderManager.java
24 24

  
25 25
package org.gvsig.vectorediting.lib.spi;
26 26

  
27
import java.util.List;
27 28
import java.util.Map;
28

  
29
import org.gvsig.fmap.dal.feature.EditableFeature;
30
import org.gvsig.fmap.dal.feature.FeatureStore;
31
import org.gvsig.fmap.geom.Geometry;
29 32
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
30 33
import org.gvsig.tools.service.spi.ProviderManager;
31 34
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
......
107 110
  /**
108 111
  *
109 112
  * @param name
113
     * @return 
110 114
  */
111 115
  public Map<String, String> getDefaultValues(String name);
116
  
117
  public List<Geometry> getGeometriesFromClipboard();
118
  
119
  public List<EditableFeature> getFeaturesFromClipboard(EditingProviderServices providerServices, FeatureStore store);
120

  
112 121
}
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
24 24

  
25 25
package org.gvsig.vectorediting.lib.impl;
26 26

  
27
import java.util.ArrayList;
28
import java.util.List;
29
import java.util.Map;
30
import javax.json.JsonArray;
31
import javax.json.JsonObject;
32
import javax.json.JsonValue;
33
import org.apache.commons.lang3.StringUtils;
34
import org.gvsig.andami.PluginServices;
35
import org.slf4j.Logger;
36
import org.slf4j.LoggerFactory;
37

  
38 27
import org.gvsig.fmap.dal.feature.FeatureStore;
39
import org.gvsig.fmap.geom.DataTypes;
40
import org.gvsig.fmap.geom.Geometry;
41 28
import org.gvsig.fmap.mapcontext.MapContext;
42
import org.gvsig.json.Json;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.dataTypes.Coercion;
45 29
import org.gvsig.tools.dynobject.DynObject;
46 30
import org.gvsig.tools.service.AbstractManager;
47 31
import org.gvsig.tools.service.Service;
48 32
import org.gvsig.tools.service.ServiceException;
49
import org.gvsig.tools.swing.api.ToolsSwingLocator;
50
import org.gvsig.tools.swing.api.ToolsSwingManager;
51 33
import org.gvsig.vectorediting.lib.api.EditingManager;
52 34
import org.gvsig.vectorediting.lib.api.EditingService;
53 35
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
......
55 37
import org.gvsig.vectorediting.lib.spi.EditingProvider;
56 38
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
57 39
import org.gvsig.vectorediting.lib.spi.EditingProviderLocator;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
58 42

  
59 43
public class DefaultEditingManager extends AbstractManager implements
60 44
EditingManager {
......
62 46
    private static final Logger logger = LoggerFactory
63 47
        .getLogger(DefaultEditingManager.class);
64 48
    
65
    private String clipboardValue;
66
    private List<Geometry> geometriesFromClipboard;
67

  
68 49
    public DefaultEditingManager() {
69 50
        super(new DefaultEditingProviderManager());
70 51
    }
......
103 84
        return null;
104 85
    }
105 86
    
106
    public List<Geometry> getGeometriesFromClipboard(){
107
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
108
        String clipboardValue = manager.getFromClipboard();
109
        
110
        if(StringUtils.isNotBlank(clipboardValue) 
111
                && StringUtils.isNotBlank(this.clipboardValue)
112
                && StringUtils.equals(clipboardValue, this.clipboardValue)){
113
            return this.geometriesFromClipboard;
114
        }
115
        
116
        this.geometriesFromClipboard = new ArrayList<>();
117
        
118
        String geometryName = null;
119
        try {
120
            JsonArray jsonArray = Json.createArray(clipboardValue);
121

  
122
            Coercion toGeometry = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.GEOMETRY);
123

  
124
            for (JsonValue item : jsonArray) {
125
                JsonObject jsonItem = (JsonObject) item;
126
                if (StringUtils.isBlank(geometryName)) {
127
                    for (Map.Entry<String, JsonValue> field : jsonItem.entrySet()) {
128
                        Geometry geometry;
129
                        try {
130
                            geometry = (Geometry) toGeometry.coerce(field.getValue().toString().replace("\"", ""));
131
                            if (geometry != null) {
132
                                geometryName = field.getKey();
133
                                this.geometriesFromClipboard.add(geometry);
134
                                break;
135
                            }
136
                        } catch (Exception e) {
137
                            //DO NOTHING
138
                        }
139
                    }
140
                } else {
141
                    Geometry geometry;
142
                    try {
143
                        String strGeom = jsonItem.getString(geometryName);
144
                        geometry = (Geometry) toGeometry.coerce(strGeom);
145
                        if (geometry != null) {
146
                            this.geometriesFromClipboard.add(geometry);
147
                        }
148
                    } catch (Exception e) {
149
                        //DO NOTHING
150
    //                        logger.warn("Can't coerce geometry", e);
151
                    }
152
                }
153
            }
154
        } catch (Exception ex) {
155
            //DO NOTHING
156
        }
157
        return this.geometriesFromClipboard;
158
    }
159

  
160 87
}
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
26 26
import java.util.Iterator;
27 27
import java.util.List;
28 28
import java.util.Map;
29
import java.util.logging.Level;
29 30
import org.geotools.measure.AngleFormat;
30 31
import org.gvsig.euclidean.EuclideanLine2D;
31 32
import org.gvsig.expressionevaluator.Expression;
......
745 746
        drawingStatus.addStatus(measurePoint, textSymbol, new AngleFormat("DD.ddd?").format(Math.toDegrees(angle)));
746 747

  
747 748
    }
749
    
750
    
751
    @Override
752
    public EditableFeature createNewFeature(FeatureStore store){
753
        try {
754
            return store.createNewFeature();
755
        } catch (DataException ex) {
756
            throw new RuntimeException("Can't create feature", ex);
757
        }
758
    }
748 759
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.impl/src/main/java/org/gvsig/vectorediting/lib/impl/DefaultEditingProviderManager.java
25 25
package org.gvsig.vectorediting.lib.impl;
26 26

  
27 27
import java.net.URL;
28
import java.util.ArrayList;
28 29
import java.util.HashMap;
29 30
import java.util.Iterator;
31
import java.util.List;
30 32
import java.util.Map;
31 33
import java.util.Properties;
32

  
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

  
34
import java.util.function.Predicate;
35
import javax.json.JsonArray;
36
import javax.json.JsonObject;
37
import javax.json.JsonValue;
38
import org.apache.commons.lang3.StringUtils;
39
import org.gvsig.fmap.dal.feature.EditableFeature;
40
import org.gvsig.fmap.dal.feature.Feature;
41
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
42
import org.gvsig.fmap.dal.feature.FeatureStore;
43
import org.gvsig.fmap.geom.DataTypes;
44
import org.gvsig.fmap.geom.Geometry;
45
import org.gvsig.fmap.geom.GeometryCoercionContext;
46
import org.gvsig.fmap.geom.GeometryLocator;
47
import org.gvsig.fmap.geom.GeometryUtils;
48
import org.gvsig.fmap.geom.type.GeometryType;
36 49
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
50
import org.gvsig.json.Json;
51
import org.gvsig.tools.ToolsLocator;
52
import org.gvsig.tools.dataTypes.Coercion;
53
import org.gvsig.tools.dataTypes.DataTypeUtils;
37 54
import org.gvsig.tools.dynobject.DynObject;
38 55
import org.gvsig.tools.service.Service;
39 56
import org.gvsig.tools.service.ServiceException;
......
42 59
import org.gvsig.tools.service.spi.ProviderFactory;
43 60
import org.gvsig.tools.service.spi.ProviderServices;
44 61
import org.gvsig.tools.swing.api.ToolsSwingLocator;
62
import org.gvsig.tools.swing.api.ToolsSwingManager;
45 63
import org.gvsig.tools.swing.icontheme.IconTheme;
46 64
import org.gvsig.vectorediting.lib.api.EditingServiceInfo;
47 65
import org.gvsig.vectorediting.lib.api.exceptions.ServiceInformationException;
48 66
import org.gvsig.vectorediting.lib.spi.EditingProviderFactory;
49 67
import org.gvsig.vectorediting.lib.spi.EditingProviderManager;
68
import org.gvsig.vectorediting.lib.spi.EditingProviderServices;
69
import org.slf4j.Logger;
70
import org.slf4j.LoggerFactory;
50 71

  
51 72
public class DefaultEditingProviderManager extends AbstractProviderManager
52 73
implements EditingProviderManager {
......
54 75
    private static final Logger logger = LoggerFactory
55 76
        .getLogger(DefaultEditingProviderManager.class);
56 77

  
57
    Map<String, ISymbol> symbols =
58
        new HashMap<String, ISymbol>();
78
    Map<String, ISymbol> symbols = new HashMap<>();
59 79

  
60
    Map<String, Map<String, String>> defaultValues =
61
        new HashMap<String, Map<String, String>>();
80
    Map<String, Map<String, String>> defaultValues = new HashMap<>();
81
    
82
    private String clipboardValue;
83
    private List<Geometry> geometriesFromClipboard;
84
    private List<EditableFeature> featuresFromClipboard;
62 85

  
86

  
63 87
    public ProviderServices createProviderServices(Service service) {
64 88
        // TODO Auto-generated method stub
65 89
        return null;
......
162 186
        }
163 187
    }
164 188

  
189
    @Override
165 190
    public Map<String, String> getDefaultValues(String name) {
166 191
        return this.defaultValues.get(name);
167 192
    }
193
    
194
    @Override
195
    public List<Geometry> getGeometriesFromClipboard(){
196
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
197
        String clipboardValue = manager.getFromClipboard();
198
        
199
        if(StringUtils.isNotBlank(clipboardValue) 
200
                && StringUtils.isNotBlank(this.clipboardValue)
201
                && StringUtils.equals(clipboardValue, this.clipboardValue)){
202
            return this.geometriesFromClipboard;
203
        }
204
        
205
        this.geometriesFromClipboard = new ArrayList<>();
206
        
207
        String geometryName = null;
208
        try {
209
            JsonArray jsonArray = Json.createArray(clipboardValue);
168 210

  
211
            Coercion toGeometry = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.GEOMETRY);
212

  
213
            for (JsonValue item : jsonArray) {
214
                JsonObject jsonItem = (JsonObject) item;
215
                if (StringUtils.isBlank(geometryName)) {
216
                    for (Map.Entry<String, JsonValue> field : jsonItem.entrySet()) {
217
                        Geometry geometry;
218
                        try {
219
                            geometry = (Geometry) toGeometry.coerce(field.getValue().toString().replace("\"", ""));
220
                            if (geometry != null) {
221
                                geometryName = field.getKey();
222
                                this.geometriesFromClipboard.add(geometry);
223
                                break;
224
                            }
225
                        } catch (Exception e) {
226
                            //DO NOTHING
227
                        }
228
                    }
229
                } else {
230
                    Geometry geometry;
231
                    try {
232
                        String strGeom = jsonItem.getString(geometryName);
233
                        geometry = (Geometry) toGeometry.coerce(strGeom);
234
                        if (geometry != null) {
235
                            this.geometriesFromClipboard.add(geometry);
236
                        }
237
                    } catch (Exception e) {
238
                        //DO NOTHING
239
    //                        logger.warn("Can't coerce geometry", e);
240
                    }
241
                }
242
            }
243
        } catch (Exception ex) {
244
            //DO NOTHING
245
        }
246
        return this.geometriesFromClipboard;
247
    }
248

  
249

  
250
    @Override
251
    public List<EditableFeature> getFeaturesFromClipboard(EditingProviderServices providerServices, FeatureStore store) {
252
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
253
        String clipboardValue = manager.getFromClipboard();
254
        
255
        if(StringUtils.isNotBlank(clipboardValue) 
256
                && StringUtils.isNotBlank(this.clipboardValue)
257
                && StringUtils.equals(clipboardValue, this.clipboardValue)){
258
            return this.featuresFromClipboard;
259
        }
260
        
261
        this.featuresFromClipboard = new ArrayList<>();
262

  
263
        GeometryType storeGeomType = store.getDefaultFeatureTypeQuietly().getDefaultGeometryAttribute().getGeomType();
264
        GeometryCoercionContext context = GeometryLocator.getGeometryManager().createGeometryCoercionContext();
265
        context.setGeometryType(storeGeomType);
266
        context.setMode(GeometryCoercionContext.MODE_ONERROR_NULL);
267
        Coercion toGeometry = DataTypeUtils.getCoercion(DataTypes.GEOMETRY);
268

  
269
        
270
        String geometryName = null;
271
        try {
272
            JsonArray jsonArray = Json.createArray(clipboardValue);
273

  
274
            for (JsonValue item : jsonArray) {
275
                JsonObject jsonItem = (JsonObject) item;
276
                EditableFeature feat = providerServices.createNewFeature(store);
277
                feat.copyFrom(jsonItem, (FeatureAttributeDescriptor t) -> !t.isPrimaryKey());
278
                Geometry geometry = feat.getDefaultGeometry();
279
                if(geometry == null){
280
                    if (StringUtils.isBlank(geometryName)) {
281
                        for (Map.Entry<String, JsonValue> field : jsonItem.entrySet()) {
282
                            try {
283
                                geometry = (Geometry) toGeometry.coerce(field.getValue().toString().replace("\"", ""), context);
284
                                if (geometry != null) {
285
                                    geometryName = field.getKey();
286
                                    break;
287
                                }
288
                            } catch (Exception e) {
289
                                //DO NOTHING
290
                            }
291
                        }
292
                    } else {
293
                        try {
294
                            String strGeom = jsonItem.getString(geometryName);
295
                            geometry = (Geometry) toGeometry.coerce(strGeom, context);
296
                        } catch (Exception e) {
297
                            //DO NOTHING
298
                        }
299
                    }
300
                    
301
                } else {
302
                    geometry = (Geometry) toGeometry.coerce(geometry,context);
303
                }
304
                
305
                if (geometry != null) {
306
                    feat.setDefaultGeometry(geometry);
307
                    this.featuresFromClipboard.add(feat);
308
                }
309
            }
310
        } catch (Exception ex) {
311
            //DO NOTHING
312
        }
313
        return this.featuresFromClipboard;
314
    }
315
    
169 316
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.lib/org.gvsig.vectorediting.lib.prov/org.gvsig.vectorediting.lib.prov.duplicate/src/main/java/org/gvsig/vectorediting/lib/prov/duplicate/PasteFromClipboardEditingProvider.java
27 27
import java.util.ArrayList;
28 28
import java.util.HashMap;
29 29
import java.util.Iterator;
30
import java.util.LinkedHashMap;
30 31
import java.util.List;
31 32
import java.util.Map;
32 33
import java.util.logging.Level;
33 34
import java.util.logging.Logger;
35
import org.apache.commons.collections4.CollectionUtils;
36
import org.apache.commons.lang.BooleanUtils;
34 37
import org.gvsig.fmap.dal.exception.DataException;
35 38
import org.gvsig.fmap.dal.feature.EditableFeature;
39
import org.gvsig.fmap.dal.feature.Feature;
36 40
import org.gvsig.fmap.dal.feature.FeatureSelection;
37 41
import org.gvsig.fmap.dal.feature.FeatureStore;
38 42
import org.gvsig.fmap.geom.Geometry;
39 43
import org.gvsig.fmap.geom.GeometryLocator;
40 44
import org.gvsig.fmap.geom.GeometryManager;
41
import org.gvsig.fmap.geom.GeometryUtils;
42 45
import org.gvsig.fmap.geom.aggregate.Aggregate;
43 46
import org.gvsig.fmap.geom.aggregate.MultiCurve;
44 47
import org.gvsig.fmap.geom.aggregate.MultiPoint;
......
50 53
import org.gvsig.fmap.geom.primitive.Envelope;
51 54
import org.gvsig.fmap.geom.primitive.Point;
52 55
import org.gvsig.fmap.geom.primitive.Surface;
53
import org.gvsig.fmap.geom.type.GeometryType;
54 56
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
57
import org.gvsig.tools.ToolsLocator;
55 58
import org.gvsig.tools.dynobject.DynObject;
59
import org.gvsig.tools.i18n.I18nManager;
56 60
import org.gvsig.tools.service.spi.ProviderServices;
57 61
import org.gvsig.vectorediting.lib.api.DrawingStatus;
58
import org.gvsig.vectorediting.lib.api.EditingLocator;
59
import org.gvsig.vectorediting.lib.api.EditingManager;
60 62
import org.gvsig.vectorediting.lib.api.EditingServiceParameter;
61 63
import org.gvsig.vectorediting.lib.api.EditingServiceParameter.TYPE;
62 64
import org.gvsig.vectorediting.lib.api.exceptions.DrawServiceException;
......
84 86

  
85 87
    private final EditingServiceParameter location;
86 88

  
89
    private final EditingServiceParameter copyAlphanumericAttributes;
90

  
87 91
    private final FeatureStore featureStore;
88 92

  
89 93
    private Map<EditingServiceParameter, Object> values;
......
98 102
    public PasteFromClipboardEditingProvider(DynObject parameters,
99 103
            ProviderServices services) {
100 104
        super(services);
105
        
106
        I18nManager i18nManager = ToolsLocator.getI18nManager();
107
        Map<String, String> options = new LinkedHashMap<>();
108
        options.put(i18nManager.getTranslation("_yes"), "true");
109
        options.put(i18nManager.getTranslation("_no"), "false");
101 110

  
111

  
102 112
        this.featureStore
103 113
                = (FeatureStore) parameters
104 114
                        .getDynValue(EditingProviderFactory.FEATURE_STORE_FIELD);
......
110 120
        this.location
111 121
                = new DefaultEditingServiceParameter("location", "_Location",
112 122
                        TYPE.POSITION);
123

  
124
        this.copyAlphanumericAttributes =
125
                new DefaultEditingServiceParameter(
126
                    "copyAlphanumericAttributes", 
127
                    "_Copy_alphanumeric_attributes", 
128
                    options,
129
                    i18nManager.getTranslation("_yes"),
130
                    true,
131
                    TYPE.OPTION
132
                );
113 133
    }
114 134

  
115 135
    @Override
136
    public boolean isEnabled(EditingServiceParameter parameter) {
137
        return true;
138
    }
139
    
140
    
141

  
142
    @Override
116 143
    public EditingServiceParameter next() {
117 144
        if (values.get(clipboard) == null) {
118 145
            return clipboard;
119 146
        } else if (values.get(location) == null) {
120 147
            return location;
148
//        } else if (values.get(copyAlphanumericAttributes) == null) {
149
//            return copyAlphanumericAttributes;
121 150
        }
122 151
        return null;
123 152
    }
......
130 159
        GeometryManager geometryManager = GeometryLocator.getGeometryManager();
131 160
        EditingProviderManager editingProviderManager
132 161
                = EditingProviderLocator.getProviderManager();
133
        EditingProviderServices editingProviderServices
134
                = (EditingProviderServices) getProviderServices();
162
        EditingProviderServices editingProviderServices = getProviderServices();
135 163
        int subtype;
136 164
        try {
137 165
            subtype = editingProviderServices.getSubType(featureStore);
......
144 172

  
145 173
        if (values != null) {
146 174

  
147
            List<Geometry> geometries = null;
148
            geometries = (List<Geometry>) values.get(clipboard);
149
            if (geometries != null && firstPoint != null) {
175
            List<Feature> features = null;
176
            features = (List<Feature>) values.get(clipboard);
177
            if (features != null && firstPoint != null) {
150 178
                try {
151 179
                    AffineTransform at
152 180
                            = getMoveAffineTransform(firstPoint,
153 181
                                    mousePosition);
154
                    Iterator<Geometry> it = geometries.iterator();
182
                    Iterator<Feature> it = features.iterator();
155 183

  
156 184
                    while (it.hasNext()) {
157
                        Geometry geometry = ((Geometry) it.next()).cloneGeometry();
185
                        Geometry geometry = ((Feature) it.next()).getDefaultGeometry().cloneGeometry();
158 186

  
159 187
                        geometry.transform(at);
160 188
                        ISymbol symbol = null;
......
207 235
                = new ArrayList<>();
208 236
        parameters.add(clipboard);
209 237
        parameters.add(location);
238
        parameters.add(copyAlphanumericAttributes);
210 239
        return parameters;
211 240
    }
212 241

  
......
226 255

  
227 256
        if (parameter == clipboard) {
228 257
            if (value instanceof List) {
229
                List<Geometry> targetGeometries = new ArrayList();
230
                List<Geometry> srcGeometries = (List<Geometry>) value;
231
                Iterator<Geometry> it = srcGeometries.iterator();
232
                while (it.hasNext()) {
233
                    Geometry geometry = it.next();
234
                    GeometryType storeGeomType = featureStore.getDefaultFeatureTypeQuietly().getDefaultGeometryAttribute().getGeomType();
235
                    if (GeometryUtils.isSubtype(storeGeomType.getType(), geometry.getGeometryType().getType())
236
                            || GeometryUtils.canAggregate(storeGeomType.getType(), geometry.getGeometryType().getType())) {
237
                        targetGeometries.add(geometry);
238
                    }
239
                }
240
                if (targetGeometries.size() > 0) {
241
                    values.put(clipboard, targetGeometries);
258
                List<Feature> features = (List<Feature>) value;
259
                if (CollectionUtils.isNotEmpty(features)) {
260
                    Iterator<Feature> it = features.iterator();
261
                    values.put(clipboard, features);
242 262
                    try {
243

  
244
                        Envelope envelope = getEnvelope(targetGeometries);
263
                        Envelope envelope = getEnvelope(features);
245 264
                        firstPoint = null;
246 265
                        if (envelope != null) {
247 266
                            firstPoint = envelope.getLowerCorner();
......
264 283
            if (value instanceof Point) {
265 284
                values.put(parameter, value);
266 285
            }
286
        } else if (parameter == copyAlphanumericAttributes) {
287
            if (value instanceof String) {
288
                Boolean copy = BooleanUtils.toBooleanObject((String)value);
289
                if(copy == null){
290
                    I18nManager i18nManager = ToolsLocator.getI18nManager();
291
                    try {
292
                        copy = BooleanUtils.toBooleanObject(
293
                                (String)value, 
294
                                i18nManager.getTranslation("_yes"), 
295
                                i18nManager.getTranslation("_no"), 
296
                                "" 
297
                        );
298
                    } catch (Exception e) {
299
                        copy = Boolean.FALSE;
300
                    }
301
                }
302
                values.put(parameter, copy == null ? false : copy);
303
            }
267 304
        }
268 305
    }
269 306

  
......
278 315

  
279 316
            final Point p2 = (Point) values.get(location);
280 317

  
281
            List<Geometry> geometries = (List<Geometry>) values.get(clipboard);
318
            List<EditableFeature> features = (List<EditableFeature>) values.get(clipboard);
319
            Boolean copyAttributes = (Boolean) values.get(copyAlphanumericAttributes);
282 320

  
283 321
            try {
284 322

  
285
                Iterator<Geometry> it = geometries.iterator();
286
                EditingProviderServices editingProviderServices
287
                        = (EditingProviderServices) getProviderServices();
323
                Iterator<EditableFeature> it = features.iterator();
324
                EditingProviderServices editingProviderServices = getProviderServices();
288 325

  
289 326
                AffineTransform at
290 327
                        = getMoveAffineTransform(firstPoint, p2);
291 328
                while (it.hasNext()) {
292
                    Geometry geometry = ((Geometry) it.next()).cloneGeometry();
329
                    EditableFeature editableFeature = it.next();
330
                    Geometry geometry = editableFeature.getDefaultGeometry().cloneGeometry();
293 331

  
294 332
                    geometry.transform(at);
295

  
296
                    EditableFeature editableFeature = featureStore.createNewFeature();
297
                    editableFeature.setDefaultGeometry(geometry);
298
                    editingProviderServices.insertFeatureIntoFeatureStore(editableFeature, featureStore);
333
                    EditableFeature targetEditableFeature = null;
334
                    if(copyAttributes == null || copyAttributes){
335
                        targetEditableFeature = editableFeature;
336
                    } else {
337
                        targetEditableFeature = this.getProviderServices().createNewFeature(featureStore);
338
                    }
339
                    
340
                    targetEditableFeature.setDefaultGeometry(geometry);
341
                    editingProviderServices.insertFeatureIntoFeatureStore(targetEditableFeature, featureStore);
299 342
                }
300 343

  
301 344
                featureStore.getFeatureSelection().deselectAll();
......
308 351
    }
309 352

  
310 353
    public void start() throws StartServiceException, InvalidEntryException {
311
        values = new HashMap<EditingServiceParameter, Object>();
354
        values = new HashMap<>();
312 355

  
313
        EditingManager manager = EditingLocator.getManager();
314
        List<Geometry> geometriesFromClipBoard = manager.getGeometriesFromClipboard();
315
        if (geometriesFromClipBoard != null && geometriesFromClipBoard.size() > 0) {
356
        EditingProviderManager manager = EditingProviderLocator.getProviderManager();
357
        List<EditableFeature> featuresFromClipBoard = manager.getFeaturesFromClipboard(this.getProviderServices(), featureStore);
358
        if (CollectionUtils.isNotEmpty(featuresFromClipBoard)) {
316 359
            try {
317
                setValue(geometriesFromClipBoard);
360
                setValue(featuresFromClipBoard);
318 361
            } catch (InvalidEntryException ex) {
319 362
            }
320 363
        }
321

  
322
//        if (getValue(clipboard) == null) {
323
//            FeatureSelection selected = null;
324
//            if (featureStore != null) {
325
//                try {
326
//                    selected = featureStore.getFeatureSelection();
327
//                } catch (DataException e) {
328
//                    throw new StartServiceException(e);
329
//                }
330
//                try {
331
//                    setValue(selected);
332
//                } catch (InvalidEntryException e) {
333
//                    throw new InvalidEntryException(e);
334
//                }
335
//            }
336
//        }
364
        if(getValue(copyAlphanumericAttributes) == null){
365
            setValue(copyAlphanumericAttributes, "true");
366
        }
337 367
    }
338 368

  
339 369
    public String getName() {
......
345 375
        return values != null ? values.get(parameter) : null;
346 376
    }
347 377

  
348
    private Envelope getEnvelope(List<Geometry> geometries) throws CreateEnvelopeException {
378
    private Envelope getEnvelope(List<Feature> features) throws CreateEnvelopeException {
349 379
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
350 380
        Envelope envelope = geomManager.createEnvelope(GEOM2D);
351
        for (Geometry geometry : geometries) {
352
            envelope.add(geometry);
381
        for (Feature feature : features) {
382
            envelope.add(feature.getDefaultGeometry());
353 383
        }
354 384
        return envelope;
355 385
    }
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
24 24

  
25 25
package org.gvsig.vectorediting.lib.api;
26 26

  
27
import java.util.List;
28 27
import org.gvsig.fmap.dal.feature.FeatureStore;
29
import org.gvsig.fmap.geom.Geometry;
30 28
import org.gvsig.fmap.mapcontext.MapContext;
31 29
import org.gvsig.tools.service.Manager;
32 30
import org.gvsig.vectorediting.lib.api.exceptions.ServiceInformationException;
......
72 70
     */
73 71
    public EditingService getEditingService(String name,
74 72
        FeatureStore featureStore, MapContext mapContext);
75
    
76
    
77
    public List<Geometry> getGeometriesFromClipboard();
78

  
73
        
79 74
}
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/i18n/text.properties
196 196
_Modify_paste_from_clipboard=Pegar desde el portapapeles
197 197
_Location=Posici\u00f3n
198 198
_Clipboard=Portapapeles
199
_Copy_alphanumeric_attributes=Copiar atributos alfanum\u00e9ricos
200
copyAlphanumericAttributes=Copiar atributos alfanum\u00e9ricos
org.gvsig.vectorediting/trunk/org.gvsig.vectorediting/org.gvsig.vectorediting.app/org.gvsig.vectorediting.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
194 194
_Modify_paste_from_clipboard=Paste from clipboard
195 195
_Location=Location
196 196
_Clipboard=Clipboard
197
_Copy_alphanumeric_attributes=Copy alphanumeric attributes
198
copyAlphanumericAttributes=Copy alphanumeric attributes

Also available in: Unified diff