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
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