Revision 44655 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeature.java

View differences:

DefaultEditableFeature.java
23 23
 */
24 24
package org.gvsig.fmap.dal.feature.impl;
25 25

  
26
import java.time.LocalDate;
27
import java.time.LocalDateTime;
28
import java.time.ZoneId;
29
import java.time.ZoneOffset;
30
import java.time.format.DateTimeFormatter;
31
import java.time.temporal.TemporalAccessor;
26 32
import java.util.Date;
27
import java.util.Iterator;
33
import javax.json.JsonNumber;
34
import javax.json.JsonObject;
35
import org.gvsig.fmap.dal.DataTypes;
28 36

  
29 37
import org.gvsig.fmap.dal.feature.EditableFeature;
30 38
import org.gvsig.fmap.dal.feature.Feature;
31 39
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureType;
33 40
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
34 41
import org.gvsig.fmap.geom.Geometry;
42
import org.gvsig.fmap.geom.GeometryUtils;
35 43
import org.gvsig.timesupport.Instant;
36 44
import org.gvsig.timesupport.Interval;
45
import org.json.JSONObject;
37 46

  
38 47
public class DefaultEditableFeature extends DefaultFeature implements
39 48
        EditableFeature {
......
240 249
        this.set(attribute, value);
241 250
    }
242 251

  
252
    public void copyFrom(JsonObject values) {
253
        // iterate over the attributes and copy one by one
254
        for (FeatureAttributeDescriptor attr : this.getType()) {
255
            if (attr==null || attr.isAutomatic() || attr.isReadOnly() || attr.isComputed() ) {
256
                continue;
257
            }
258
            String attrname = attr.getName();
259
            if( !values.containsKey(attrname) ) {
260
                continue;
261
            }           
262
            Object value;
263
            try {
264
                switch( values.getValueType() ) {
265
                    case STRING:
266
                        switch(attr.getType()) {
267
                            case DataTypes.GEOMETRY:
268
                                value = GeometryUtils.createFrom(values.getString(attrname));
269
                                break;
270
                            case DataTypes.DATE:
271
                                try {
272
                                    TemporalAccessor x = DateTimeFormatter.ISO_DATE_TIME.parse(values.getString(attrname));
273
                                    LocalDateTime date = LocalDateTime.from(x);
274
//                                    value = Date.from(date.atZone(ZoneId.systemDefault()).toInstant());
275
                                    value = Date.from(date.toInstant(ZoneOffset.UTC));
276
                                } catch(Exception ex) {
277
                                    value = values.getString(attrname);
278
                                }
279
                                break;
280
                            case DataTypes.STRING:
281
                            default:
282
                                value = values.getString(attrname);
283
                                break;
284
                        }
285
                        break;
286
                    case NUMBER:
287
                        JsonNumber n = values.getJsonNumber(attrname);
288
                        switch(attr.getType()) {
289
                            case DataTypes.BIGDECIMAL:
290
                                value = n.bigDecimalValue();
291
                                break;
292
                            case DataTypes.BYTE:
293
                                value = n.bigDecimalValue();
294
                                break;
295
                            case DataTypes.FLOAT:
296
                            case DataTypes.DOUBLE:
297
                                value = n.doubleValue();
298
                                break;
299
                            case DataTypes.INT:
300
                                value = n.intValue();
301
                                break;
302
                            case DataTypes.LONG:
303
                                value = n.longValue();
304
                                break;
305
                            default:
306
                                value = n.toString();
307
                                break;
308
                        }
309
                        break;
310
                    case TRUE:
311
                        value = true;
312
                        break;
313
                    case FALSE:
314
                        value = false;
315
                        break;
316
                    case NULL:
317
                        value = null;
318
                        break;
319
                    default:
320
                        value = values.getString(attrname);
321
                        break;
322
                }
323
            } catch(Exception ex) {
324
                continue;
325
            }
326
            if (value == null && !attr.allowNull()) {
327
                continue;
328
            }
329
            try {
330
                set(attr.getIndex(), value);
331
            } catch(Throwable th) {
332
                // Ignore
333
            }
334
        }
335
    }
336
    
243 337
    public void copyFrom(Feature source) {
244 338
        // iterate over the attributes and copy one by one
245
        FeatureType sourceType = source.getType();
246 339
        for (FeatureAttributeDescriptor attr : this.getType()) {
247 340
            if (attr==null || attr.isAutomatic() || attr.isReadOnly() || attr.isComputed() ) {
248 341
                continue;

Also available in: Unified diff