Revision 45993
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/DefaultFeature.java | ||
---|---|---|
899 | 899 |
value = getter.getter(value); |
900 | 900 |
} |
901 | 901 |
} |
902 |
DataType dataType = featureAttributeDescriptor.getDataType(); |
|
902 |
value = coerce(featureAttributeDescriptor, value); |
|
903 |
return value; |
|
904 |
} |
|
905 |
|
|
906 |
private Object coerce(FeatureAttributeDescriptor attr, Object value) { |
|
907 |
DataType dataType = attr.getDataType(); |
|
903 | 908 |
Class<? extends DataType> theClass = dataType.getDefaultClass(); |
904 | 909 |
if (theClass != null && !theClass.isInstance(value)) { |
905 | 910 |
try { |
... | ... | |
911 | 916 |
+ "' with value '" + value.toString() + "'."); |
912 | 917 |
} |
913 | 918 |
} |
914 |
if (featureAttributeDescriptor.getType() == DataTypes.GEOMETRY) {
|
|
919 |
if (attr.getType() == DataTypes.GEOMETRY) {
|
|
915 | 920 |
if (value != null) { |
916 | 921 |
Geometry geom = (Geometry) value; |
917 | 922 |
if (geom.getProjection() == null) { |
918 |
IProjection proj = ((DefaultFeatureAttributeDescriptor) featureAttributeDescriptor).getSRS(this.storeRef);
|
|
923 |
IProjection proj = ((DefaultFeatureAttributeDescriptor) attr).getSRS(this.storeRef);
|
|
919 | 924 |
geom.setProjection(proj); |
920 | 925 |
} |
921 | 926 |
} |
... | ... | |
1337 | 1342 |
|
1338 | 1343 |
public Object getExtraColumnValue(String name) { |
1339 | 1344 |
Object value; |
1345 |
FeatureExtraColumns columns = this.getType().getExtraColumns(); |
|
1346 |
int index = columns.getIndexOf(name); |
|
1340 | 1347 |
if (this.extraValues != null) { |
1341 | 1348 |
if (this.extraValues.containsKey(name)) { |
1342 |
return this.extraValues.get(name); |
|
1349 |
value = this.extraValues.get(name); |
|
1350 |
if (index >= 0){ |
|
1351 |
EditableFeatureAttributeDescriptor attrdesc = columns.get(index); |
|
1352 |
value = coerce(attrdesc, value); |
|
1353 |
} |
|
1354 |
return value; |
|
1343 | 1355 |
} |
1344 | 1356 |
} |
1345 |
FeatureExtraColumns columns = this.getType().getExtraColumns(); |
|
1346 |
int index = columns.getIndexOf(name); |
|
1347 | 1357 |
if (index < 0) { |
1348 | 1358 |
throw new RuntimeException("Not extra column value found"); |
1349 | 1359 |
} |
... | ... | |
1356 | 1366 |
return value; |
1357 | 1367 |
} |
1358 | 1368 |
value = this.getExtraValue(name); |
1359 |
extraValuesData[index] = value; |
|
1360 |
if (value == null && !this.hasExtraValue(name)) { |
|
1361 |
if (attrdesc.getFeatureAttributeEmulator() != null) { |
|
1362 |
value = attrdesc.getFeatureAttributeEmulator().get(this); |
|
1363 |
extraValuesData[index] = value; |
|
1364 |
} |
|
1369 |
if (value == null && !this.hasExtraValue(name) && attrdesc.getFeatureAttributeEmulator() != null) { |
|
1370 |
value = attrdesc.getFeatureAttributeEmulator().get(this); |
|
1371 |
value = coerce(attrdesc, value); |
|
1372 |
extraValuesData[index] = value; |
|
1373 |
} else { |
|
1374 |
value = coerce(attrdesc, value); |
|
1375 |
extraValuesData[index] = value; |
|
1365 | 1376 |
} |
1377 |
|
|
1366 | 1378 |
return value; |
1367 | 1379 |
} |
1368 | 1380 |
|
Also available in: Unified diff