Revision 44779

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/DefaultEditableFeature.java
36 36
import org.gvsig.fmap.dal.DataTypes;
37 37

  
38 38
import org.gvsig.fmap.dal.feature.EditableFeature;
39
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
39 40
import org.gvsig.fmap.dal.feature.Feature;
40 41
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
42
import org.gvsig.fmap.dal.feature.FeatureExtraColumn;
41 43
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
42 44
import org.gvsig.fmap.geom.Geometry;
43 45
import org.gvsig.fmap.geom.GeometryUtils;
......
392 394
        FeatureAttributeDescriptor attribute = this.getType().getAttributeDescriptor(index);
393 395
        this.set(attribute, value);
394 396
    }
397
    
398
    @Override
399
    public Object getExtraValue(String name) {
400
        Object value;
401
        FeatureExtraColumn columns = this.getType().getExtraColumn();
402
        int index = columns.getIndexOf(name);
403
        if (index >= 0) {
404
            EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
405
            value = attrdesc.getFeatureAttributeEmulator().get(this);
406
            return value;
407
        }
408
        value = this.data.getExtraValue(name);
409
        return value;
410
    }
395 411
}
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
35 35
import javax.json.Json;
36 36
import javax.json.JsonObject;
37 37
import javax.json.JsonObjectBuilder;
38
import org.apache.commons.lang3.ArrayUtils;
38 39
import org.apache.commons.lang3.StringUtils;
39 40
import org.cresques.cts.IProjection;
40 41
import org.gvsig.fmap.dal.DALLocator;
......
78 79
	private WeakReference storeRef;
79 80

  
80 81
	private boolean inserted = false;
82
        private Object[] extraValuesData;
81 83

  
82 84
    /*
83 85
	 * Usar con mucha precaucion o mejor no usar. Lo precisa el
......
90 92

  
91 93
	public DefaultFeature(FeatureStore store, FeatureProvider data) {
92 94
		this.data = data;
95
                this.extraValuesData = null;
93 96
		this.storeRef = new WeakReference(store);
94 97
		this.reference = null;
95 98
		this.inserted = !data.isNew();
......
97 100

  
98 101
	DefaultFeature(DefaultFeature feature) {
99 102
		this.data = feature.data.getCopy();
103
                this.extraValuesData = ArrayUtils.clone(feature.extraValuesData);
100 104
		this.storeRef = feature.storeRef;
101 105
		this.reference = feature.reference;
102 106
		this.inserted = feature.isInserted();
......
105 109
    public DefaultFeature(FeatureType targetType, Feature sourceFeature) {
106 110
        DefaultFeature defaultFeature = (DefaultFeature)sourceFeature;
107 111
        this.data = new DefaultFeatureProvider(targetType, (DefaultFeatureProvider)defaultFeature.getData());
112
        this.extraValuesData = null;
108 113
        this.storeRef = defaultFeature.storeRef;
109 114
        this.reference = defaultFeature.reference;
110 115
        this.inserted = defaultFeature.isInserted();
......
129 134

  
130 135
	public void setData(FeatureProvider data) {
131 136
		this.data = data;
137
                this.extraValuesData = null;
132 138
		this.reference = null;
133 139
		this.inserted = true;
134 140
	}
......
247 253
    public void initializeValues(Feature feature) {
248 254
        FeatureType myType=this.getType();
249 255
        FeatureType type =feature.getType();
256
        extraValuesData = null;
250 257
        for (FeatureAttributeDescriptor attribute : type) {
251 258
            FeatureAttributeDescriptor myAttribute=myType.getAttributeDescriptor(attribute.getName());
252 259
            if (myAttribute != null) {
......
747 754
            if (value != null) { // FIXME: para comprobar si esta calculado usar
748 755
                // un array
749 756
                // especifico.
750
                return get(attribute, this.data.get(index));
757
                return get(attribute, value);
751 758
            }
752 759
            try {
753 760
                value = eval.evaluate(this);
......
1192 1199
    }
1193 1200

  
1194 1201
    
1195
    @Override
1202
      @Override
1196 1203
    public Object getExtraValue(String name) {
1197
        FeatureExtraColumn column = this.getType().getExtraColumn();
1198
        int index = column.getIndexOf(name);
1199
        if( index <0 ) {
1200
          return null;
1204
        Object value;
1205
        FeatureExtraColumn columns = this.getType().getExtraColumn();
1206
        int index = columns.getIndexOf(name);
1207
        if( index >= 0 ) {
1208
          if( extraValuesData==null ) {
1209
            extraValuesData = new Object[columns.size()];
1210
            EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
1211
            value = attrdesc.getFeatureAttributeEmulator().get(this);
1212
            extraValuesData[index] = value;
1213
          } else {
1214
            value = extraValuesData[index];
1215
            if( value == null ) {
1216
              EditableFeatureAttributeDescriptor attrdesc = columns.get(index);
1217
              value = attrdesc.getFeatureAttributeEmulator().get(this);
1218
              extraValuesData[index] = value;
1219
            }
1220
          }
1221
          return value;
1201 1222
        }
1202
        Object value = this.data.getExtraValue(name);
1203
        if( value == null ) {
1204
          EditableFeatureAttributeDescriptor attrdesc = column.get(index);   
1205
          value = attrdesc.getFeatureAttributeEmulator().get(this);
1206
          this.data.setExtraValue(index, value);
1207
        }
1223
        value = this.data.getExtraValue(name);
1208 1224
        return value;
1209 1225
    }
1210 1226

  
1211 1227
    @Override
1212 1228
    public boolean hasExtraValue(String name) {
1229
        FeatureExtraColumn columns = this.getType().getExtraColumn();
1230
        int index = columns.getIndexOf(name);
1231
        if( index >= 0 ) {
1232
          return true;
1233
        }
1213 1234
        return this.data.hasExtraValue(name);
1214 1235
    }
1215 1236
    
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/DefaultFeatureExtraColumn.java
76 76
        return extraColumns.get(index);
77 77
    }
78 78

  
79
    @Override
80
    public int size() {
81
        return extraColumns.size();
82
    }
83

  
79 84
}
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.api/src/main/java/org/gvsig/fmap/dal/feature/FeatureExtraColumn.java
21 21
  public void merge(FeatureExtraColumn other);
22 22
  
23 23
  public int getIndexOf(String name);
24
  
25
  public int size();
24 26
}

Also available in: Unified diff