Revision 45522

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/featureset/FastEditedFilteredIterator.java
36 36
	}
37 37

  
38 38

  
39
        @Override
39 40
	public boolean match(DefaultFeature feature) throws DataException {
40 41
		try {
41
			return ((Boolean) this.filter.evaluate(feature)).booleanValue();
42
			return ((boolean) this.filter.evaluate(feature));
42 43
		} catch (EvaluatorException e) {
43 44
			throw new DataEvaluatorException(e);
44 45
		}
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
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 27
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
30
import org.gvsig.fmap.dal.feature.FeatureAttributeGetter;
31 28
import org.gvsig.fmap.dal.feature.FeatureReference;
32 29
import org.gvsig.fmap.dal.feature.FeatureType;
33 30
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature;
......
48 45

  
49 46
    public FastEditedIterator(DefaultFeatureSet featureSet, long index)
50 47
        throws DataException {
51
        super(featureSet);
52
        this.initializeFeature();
53
        if (index > 0) {
54
        	
55
            this.iterator = featureSet.provider.fastIterator();
56
            setNewsFeatures(null);
57
            skypto(index);
58

  
59
            /*
60
            * This did not work because the provider
61
            * skips to the index without considering the
62
            * changes in editing mode. We need the
63
            * "skypto" method which knows about those
64
            * changes.
65
        	*
66
            if (featureSet.provider.canIterateFromIndex()) {
67
                try {
68
                    this.iterator = featureSet.provider.fastIterator(index);
69
                } catch (IllegalArgumentException e) {
70
                    this.iterator = featureSet.provider.fastIterator();
71
                    setNewsFeatures(null);
72
                    skypto(index);
73
                } catch (UnsupportedOperationException e) {
74
                    this.iterator = featureSet.provider.fastIterator();
75
                    setNewsFeatures(null);
76
                    skypto(index);
77
                }
78
            } else {
79
                this.iterator = featureSet.provider.fastIterator();
80
                setNewsFeatures(null);
81
                skypto(index);
82
            }
83
            */
84
            
85
        } else {
86
            this.iterator = featureSet.provider.fastIterator();
87
            setNewsFeatures(featureManager.getInserted());
88
        }
89

  
90
    }
91

  
92
    protected void initializeFeature() {
48
        super(featureSet, index);
93 49
        myFeature = new DefaultFeature(fset.store);
94 50
    }
95 51

  
52
    @Override
96 53
    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
97 54

  
98 55
        DefaultFeature f = null;
99 56
        try {
100
            data.setNew(isFeatureIsNew());
101 57
            FeatureReference ref = new DefaultFeatureReference(fset.store, data);
102 58
            f = (DefaultFeature) featureManager.get(ref, fset.store); 
103 59
        } catch (DataException e) {
......
156 112
        return (DefaultFeature) resp.getNotEditableCopy();
157 113
    }
158 114

  
115
    @Override
159 116
    public void remove() {
160 117
        super.remove();
161
        this.initializeFeature();
118
        myFeature = new DefaultFeature(fset.store);
162 119
    }
163 120

  
121
    @Override
164 122
    protected void doDispose() throws BaseException {
165 123
        super.doDispose();
166 124
        myFeature = null;
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/EditedFilteredIterator.java
36 36
		super(fset, index);
37 37
	}
38 38

  
39
        @Override
39 40
	public boolean match(DefaultFeature feature) throws DataException {
40 41
		try {
41
			return ((Boolean) this.filter.evaluate(feature)).booleanValue();
42
			return ((boolean) this.filter.evaluate(feature));
42 43
		} catch (EvaluatorException e) {
43 44
			throw new DataEvaluatorException(e);
44 45
		}
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/EditedIterator.java
24 24
package org.gvsig.fmap.dal.feature.impl.featureset;
25 25

  
26 26
import java.util.Iterator;
27

  
28 27
import org.gvsig.fmap.dal.exception.DataException;
29 28
import org.gvsig.fmap.dal.feature.FeatureReference;
30 29
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
......
33 32
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
34 33
import org.gvsig.fmap.dal.feature.impl.editing.memory.FeatureManager;
35 34
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
36
import org.gvsig.tools.dispose.DisposableIterator;
37 35
import org.gvsig.tools.exception.BaseException;
36
import org.gvsig.tools.util.ChainedIterator;
38 37

  
39 38
/**
40 39
 * Iterator for stores in edition mode.
......
45 44
 */
46 45
public class EditedIterator extends FilteredIterator {
47 46

  
48
    private Iterator newsFeatures;
49
    private boolean featureIsNew;
50 47
    private DefaultFeatureStore store;
51 48
    protected FeatureManager featureManager;
52 49

  
......
59 56
    public EditedIterator(DefaultFeatureSet featureSet, long index)
60 57
        throws DataException {
61 58
        this(featureSet);
62
        this.newsFeatures = null;
63
        if (index > 0) {
64 59

  
65
            this.iterator = featureSet.provider.iterator();
66
            skypto(index);
60
        Iterator<FeatureProvider> insertedFeatures = this.featureManager.getInserted();
61
        Iterator<FeatureProvider> updatedFeatures = this.featureManager.getUpdated();
62
        final Iterator<FeatureProvider> providerIterator = featureSet.provider.iterator();
63
        Iterator<FeatureProvider> wrappedProviderIterator = new Iterator<FeatureProvider>() {
64
            @Override
65
            public boolean hasNext() {
66
                return providerIterator.hasNext();
67
            }
67 68

  
68
            /*
69
             * This did not work because the provider
70
             * skips to the index without considering the
71
             * changes in editing mode. We need the
72
             * "skypto" method which knows about those
73
             * changes.
74
             * 
75
        	if (featureSet.provider.canIterateFromIndex()) {
76
                try {
77
                    this.iterator = featureSet.provider.iterator(index);
78
                } catch (IllegalArgumentException e) {
79
                    this.iterator = featureSet.provider.iterator();
80
                    skypto(index);
81
                } catch (UnsupportedOperationException e) {
82
                    this.iterator = featureSet.provider.iterator();
83
                    skypto(index);
84
                }
85
            } else {
86
                this.iterator = featureSet.provider.iterator();
87
                skypto(index);
69
            @Override
70
            public FeatureProvider next() {
71
                return providerIterator.next();
88 72
            }
89
             */
90
            
91
        } else {
92
            this.iterator = featureSet.provider.iterator();
93
        }
94 73

  
74
            @Override
75
            public void remove() {
76
                EditedIterator.super.remove();
77
            }
78
        };
79
        this.iterator = new ChainedIterator(wrappedProviderIterator, insertedFeatures, updatedFeatures);
80
        if (index > 0) {
81
            skypto(index);
82
        }
95 83
    }
96 84
    
85
    @Override
97 86
    public void remove() {
98
    	if(this.getIterator() == newsFeatures) {
99
    		newsFeatures.remove();
100
    	} else {
101
    		super.remove();
102
    	}
87
        this.iterator.remove();
103 88
    }
104 89

  
90
    @Override
105 91
    public boolean hasNext() {
106 92
        if (store.isEditing()) {
107 93
            return super.hasNext();
......
110 96
        }
111 97
    }
112 98

  
99
    @Override
113 100
    public Object next() {
114 101
        if (store.isEditing()) {
115 102
            return super.next();
......
118 105
        }
119 106
    }
120 107

  
121
    protected void setNewsFeatures(Iterator newsFeatures) {
122
        this.newsFeatures = newsFeatures;
108
    @Override
109
    protected ChainedIterator getIterator() {
110
        return (ChainedIterator) this.iterator;
123 111
    }
124

  
125
    protected boolean isFeatureIsNew() {
126
        return featureIsNew;
127
    }
128

  
129
    protected Iterator getIterator() {
130
        if (this.featureIsNew) {
131
            return this.newsFeatures;
132
        } else
133
            if (this.iterator.hasNext()) {
134
                featureIsNew = false;
135
                return this.iterator;
136
            } else {
137
                featureIsNew = true;
138
                this.newsFeatures = this.featureManager.getInserted();
139
                return this.newsFeatures;
140
            }
141
    }
142

  
112
    
113
    @Override
143 114
    protected DefaultFeature createFeature(FeatureProvider data) throws DataException {
144 115

  
145 116
        DefaultFeature f = null;
146
        data.setNew(featureIsNew);
147 117
        try {
148 118
            FeatureReference ref = new DefaultFeatureReference(store, data);
149
            f =
150
                (DefaultFeature) this.featureManager.get(ref, store,
151
                    data.getType());
119
            f= (DefaultFeature) this.featureManager.get(ref, store, data.getType());
152 120
        } catch (DataException e) {
153 121
            RuntimeException ex = new RuntimeException();
154 122
            e.initCause(e);
......
165 133
                    f, fset.getDefaultFeatureType());
166 134
        }     
167 135
    }
136
    
137
    @Override
138
    protected boolean skipFeature(FeatureProvider data) {
168 139

  
169
    protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
170

  
171
        // XXX
172
        // si recorriendo los originales nos
173
        // encontramos uno nuevo, no lo devolvemos
174
        // porque se recorrera mas tarde.
175
        // Esto es una interaccion con los indices
176
        // ya que estos contienen todas las features ya
177
        // sea nuevas o no
178

  
179
        if (data.isNew() && !featureIsNew) {
180
            return true;
140
        try {
141
            if (getIterator().getCurrent() == 0) {
142
                FeatureReference ref = new DefaultFeatureReference(store, data);
143
                if (this.featureManager.isDeleted(ref)) {
144
                    return true;
145
                };
146
                if (this.featureManager.get(ref, store) != null) {
147
                    return true;
148
                };
149
            }
150
        } catch (DataException ex) {
151
            LOGGER.warn("Can't check if must skip feature.", ex);
181 152
        }
182
        FeatureReference ref = new DefaultFeatureReference(store, data);
183
        return this.featureManager.isDeleted(ref);
153
        return false;
184 154
    }
185 155

  
156
    @Override
186 157
    protected void doDispose() throws BaseException {
187 158
        super.doDispose();
188
        if (newsFeatures instanceof DisposableIterator) {
189
            ((DisposableIterator) newsFeatures).dispose();
190
        }
191
        newsFeatures = null;
192 159
        this.featureManager = null;
193 160
        this.store = null;
194 161
    }
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/FilteredIterator.java
25 25

  
26 26
import java.util.Iterator;
27 27
import java.util.NoSuchElementException;
28

  
29 28
import org.gvsig.fmap.dal.exception.DataEvaluatorException;
30 29
import org.gvsig.fmap.dal.exception.DataException;
31 30
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
......
77 76
		Object obj;
78 77
		while (this.getIterator().hasNext()) {
79 78
			obj =this.getIterator().next();
79
                        if(obj == null){
80
                            continue;
81
                        }
80 82
			if (obj instanceof FeatureProvider){
81 83
				data = (FeatureProvider)obj;
82
				if (isDeletedOrHasToSkip(data)) {
84
				if (skipFeature(data)) {
83 85
					continue;
84 86
				}
85 87
				feature = this.createFeature(data);
86 88
			} else {
87 89
				feature = (DefaultFeature)obj;
88
				if (isDeletedOrHasToSkip(feature.getData())) {
90
				if (skipFeature(feature.getData())) {
89 91
					continue;
90 92
				}
91 93
			}
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/DefaultIterator.java
25 25

  
26 26
import java.util.Iterator;
27 27
import java.util.NoSuchElementException;
28

  
29 28
import org.gvsig.fmap.dal.exception.DataException;
30
import org.gvsig.tools.dispose.DisposableIterator;
31 29
import org.gvsig.fmap.dal.feature.Feature;
32 30
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
33 31
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
32
import org.gvsig.tools.dispose.DisposableIterator;
34 33
import org.gvsig.tools.dispose.DisposeUtils;
35 34
import org.gvsig.tools.dispose.impl.AbstractDisposable;
36 35
import org.gvsig.tools.exception.BaseException;
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
37 38

  
38 39

  
39 40
class DefaultIterator extends AbstractDisposable implements DisposableIterator {
40 41

  
41
	protected Iterator iterator;
42
    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultIterator.class);
43
	protected Iterator<FeatureProvider> iterator;
42 44
	protected DefaultFeatureSet fset;
43 45
	protected Feature lastFeature = null;
44 46

  
......
145 147
		return this.iterator;
146 148
	}
147 149

  
148
	protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
150
	protected boolean skipFeature(FeatureProvider data) {
149 151
		return false;
150 152
	}
151 153

  
trunk/org.gvsig.desktop/pom.xml
2745 2745

  
2746 2746
        <jython.artifactId>jython-standalone</jython.artifactId>
2747 2747
        <!-- External project versions -->
2748
        <gvsig.tools.version>3.0.269</gvsig.tools.version>
2748
        <gvsig.tools.version>3.0.270-SNAPSHOT</gvsig.tools.version>
2749 2749
        <gvsig.proj.version>1.0.30</gvsig.proj.version>
2750 2750
        <gvsig.projection.api.version>2.0.54</gvsig.projection.api.version>
2751 2751
    </properties>

Also available in: Unified diff