Revision 47485

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/ResultSetForSetProviderOperation.java
325 325

  
326 326
        for (FeatureAttributeDescriptor attr : attributeDescriptorsIterable(setType, query) ) {
327 327
            if (attr.isComputed()) {
328
                FeatureAttributeEmulator attrEmulator = attr.getFeatureAttributeEmulator();
329
                if( !(attrEmulator instanceof FeatureAttributeEmulatorExpression) ) {
330
                    continue;
331
                }
332
                FeatureAttributeEmulatorExpression x = (FeatureAttributeEmulatorExpression) attrEmulator;
333
                Expression exp = x.getExpression();
334
                if (exp == null || exp.isEmpty() ) {
335
                    continue;
336
                }
337
                if (!helper.supportExpression(null, exp.getPhrase())) {
338
                    continue;
339
                }
340

  
328 341
                ExpressionBuilder.Value value = createValueFromAttribute(sqlbuilder, attr, select.from().table());
329 342
                if( value != VALUE_NULL ) {
330 343
                    select.column()
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/JDBCStoreProviderBase.java
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 {

Also available in: Unified diff