Revision 41183 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/featureset/FastEditedIterator.java

View differences:

FastEditedIterator.java
24 24
package org.gvsig.fmap.dal.feature.impl.featureset;
25 25

  
26 26
import org.gvsig.fmap.dal.exception.DataException;
27
import org.gvsig.fmap.dal.feature.EditableFeature;
28
import org.gvsig.fmap.dal.feature.Feature;
29
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
30
import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
27 31
import org.gvsig.fmap.dal.feature.FeatureReference;
32
import org.gvsig.fmap.dal.feature.FeatureType;
33
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature;
28 34
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
29 35
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
30 36
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
......
111 117
        if (this.fset.transform.isEmpty()) {
112 118
            return myFeature;
113 119
        } else {
114
            return (DefaultFeature) this.fset.transform.applyTransform(
115
                    myFeature, fset.getDefaultFeatureType());
120
            
121
            if (f == null) {
122
                myFeature = (DefaultFeature)
123
                    this.fset.transform.applyTransform(myFeature,
124
                        fset.getDefaultFeatureType());
125
            } else {
126
                /*
127
                 * In this case "f != null" the data comes from the featureManager,
128
                 * so it is data inserted/updated by the user, so we must
129
                 * overwrite the data after applying the transformations
130
                 * because the transformations can be "Adding field"
131
                 * and are necessary in some cases:
132
                 */
133
                DefaultFeature saved_feat = (DefaultFeature) myFeature.getCopy();
134
                myFeature = (DefaultFeature)
135
                    this.fset.transform.applyTransform(myFeature,
136
                        fset.getDefaultFeatureType());
137
                myFeature = overwrite(myFeature, saved_feat);
138
            }
139
            return myFeature;
116 140
        }       
117 141

  
118 142
    }
119 143

  
144
    private DefaultFeature overwrite(
145
        DefaultFeature old_feat,
146
        DefaultFeature new_feat) {
147
        
148
        DefaultEditableFeature resp = (DefaultEditableFeature) old_feat.getEditable();
149
        
150
        FeatureType fty = new_feat.getData().getType();
151
        FeatureAttributeDescriptor[] atts = fty.getAttributeDescriptors();
152
        for (int i=0; i<atts.length; i++) {
153
            try {
154
                resp.set(atts[i].getName(), new_feat.get(atts[i].getName()));
155
            } catch (Exception exc) {
156
                // Field not found
157
            }
158
        }
159
        return (DefaultFeature) resp.getNotEditableCopy();
160
    }
161

  
120 162
    public void remove() {
121 163
        super.remove();
122 164
        this.initializeFeature();

Also available in: Unified diff