Revision 45993

View differences:

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