44 |
44 |
import org.gvsig.fmap.dal.exception.InitializeException;
|
45 |
45 |
import org.gvsig.fmap.dal.exception.OpenException;
|
46 |
46 |
import org.gvsig.fmap.dal.exception.ReadException;
|
|
47 |
import org.gvsig.fmap.dal.expressionevaluator.FeatureAttributeEmulatorExpression;
|
47 |
48 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
|
48 |
49 |
import org.gvsig.fmap.dal.feature.EditableFeatureType;
|
|
50 |
import org.gvsig.fmap.dal.feature.Feature;
|
|
51 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
|
|
52 |
import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
|
49 |
53 |
import org.gvsig.fmap.dal.feature.FeatureQuery;
|
50 |
54 |
import org.gvsig.fmap.dal.feature.FeatureRule;
|
51 |
55 |
import org.gvsig.fmap.dal.feature.FeatureRules;
|
|
56 |
import org.gvsig.fmap.dal.feature.FeatureSet;
|
52 |
57 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
53 |
58 |
import org.gvsig.fmap.dal.feature.FeatureType;
|
54 |
59 |
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
|
... | ... | |
81 |
86 |
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.PerformChangesOperation;
|
82 |
87 |
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.UpdatePassThroughOperation;
|
83 |
88 |
import org.gvsig.fmap.geom.Geometry;
|
|
89 |
import org.gvsig.fmap.geom.GeometryUtils;
|
84 |
90 |
import org.gvsig.fmap.geom.primitive.Envelope;
|
85 |
91 |
import org.gvsig.tools.dynobject.DynField;
|
86 |
92 |
import org.gvsig.tools.dynobject.DynObject;
|
... | ... | |
160 |
166 |
if( columnName==null ) {
|
161 |
167 |
return;
|
162 |
168 |
}
|
163 |
|
IProjection crs = getFeatureStore()
|
164 |
|
.getDefaultFeatureType()
|
165 |
|
.getDefaultSRS();
|
166 |
|
JDBCStoreParameters params = getParameters();
|
167 |
|
CalculateEnvelopeOfColumnOperation calculateEnvelopeOfColumn =
|
168 |
|
getOperations().createCalculateEnvelopeOfColumn(
|
169 |
|
getFeatureStore().getDefaultFeatureType(),
|
170 |
|
getOperations().createTableReference(params),
|
171 |
|
columnName,
|
172 |
|
params.getBaseFilter(),
|
173 |
|
params.getWorkingArea(),
|
174 |
|
crs
|
175 |
|
);
|
176 |
|
value = (Envelope) calculateEnvelopeOfColumn.perform();
|
|
169 |
FeatureAttributeDescriptor attr = featureType.getAttributeDescriptor(columnName);
|
|
170 |
boolean toDataBase = true;
|
|
171 |
if(attr.isComputed()){
|
|
172 |
FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator();
|
|
173 |
if( !(attrEmulator instanceof FeatureAttributeEmulatorExpression) ) {
|
|
174 |
toDataBase = false;
|
|
175 |
} else {
|
|
176 |
FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator;
|
|
177 |
Expression exp = x.getExpression();
|
|
178 |
if (exp == null || exp.isEmpty() ) {
|
|
179 |
toDataBase = false;
|
|
180 |
} else {
|
|
181 |
if (!helper.supportExpression(null, exp.getPhrase())) {
|
|
182 |
toDataBase = false;
|
|
183 |
}
|
|
184 |
}
|
|
185 |
}
|
|
186 |
}
|
177 |
187 |
|
|
188 |
if(toDataBase){
|
|
189 |
IProjection crs = getFeatureStore()
|
|
190 |
.getDefaultFeatureType()
|
|
191 |
.getDefaultSRS();
|
|
192 |
JDBCStoreParameters params = getParameters();
|
|
193 |
CalculateEnvelopeOfColumnOperation calculateEnvelopeOfColumn =
|
|
194 |
getOperations().createCalculateEnvelopeOfColumn(
|
|
195 |
getFeatureStore().getDefaultFeatureType(),
|
|
196 |
getOperations().createTableReference(params),
|
|
197 |
columnName,
|
|
198 |
params.getBaseFilter(),
|
|
199 |
params.getWorkingArea(),
|
|
200 |
crs
|
|
201 |
);
|
|
202 |
value = (Envelope) calculateEnvelopeOfColumn.perform();
|
|
203 |
} else {
|
|
204 |
FeatureSet fset = getFeatureStore().getFeatureSet();
|
|
205 |
Envelope finalEnvelope = GeometryUtils.createEnvelope(Geometry.SUBTYPES.GEOM2D);
|
|
206 |
for (Feature feature : fset) {
|
|
207 |
Geometry geometry = feature.getGeometry(columnName);
|
|
208 |
finalEnvelope.add(geometry);
|
|
209 |
}
|
|
210 |
value = finalEnvelope;
|
|
211 |
}
|
|
212 |
|
178 |
213 |
} catch(Throwable ex) {
|
179 |
214 |
throw new RuntimeException("Can't calculate envelope.", ex);
|
180 |
215 |
} finally {
|