Revision 44779 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
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 |
|
Also available in: Unified diff