Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / featureset / EditedIterator.java @ 33205

History | View | Annotate | Download (2.83 KB)

1 24507 jmvivo
package org.gvsig.fmap.dal.feature.impl.featureset;
2 23820 jjdelcerro
3
import java.util.Iterator;
4
5 24505 jmvivo
import org.gvsig.fmap.dal.exception.DataException;
6 33205 cordinyana
import org.gvsig.tools.dispose.DisposableIterator;
7 24496 jmvivo
import org.gvsig.fmap.dal.feature.FeatureReference;
8
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
9
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
10 29289 jmvivo
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
11 31284 cordinyana
import org.gvsig.tools.exception.BaseException;
12 23820 jjdelcerro
13
public class EditedIterator extends FilteredIterator {
14
15
        Iterator newsFeatures;
16 25632 jjdelcerro
        boolean featureIsNew;
17 23820 jjdelcerro
18 25994 jmvivo
19 23820 jjdelcerro
        public EditedIterator(DefaultFeatureSet featureSet) {
20
                super(featureSet);
21
        }
22
23 23894 jjdelcerro
        public EditedIterator(DefaultFeatureSet featureSet, long index)
24
                        throws DataException {
25 23820 jjdelcerro
                super(featureSet);
26 26006 jmvivo
                this.newsFeatures = null;
27 23820 jjdelcerro
                if (index > 0) {
28
                        if (featureSet.provider.canIterateFromIndex()) {
29
                                try {
30
                                        this.iterator = featureSet.provider.iterator(index);
31
                                } catch (IllegalArgumentException e) {
32
                                        this.iterator = featureSet.provider.iterator();
33
                                        skypto(index);
34
                                } catch (UnsupportedOperationException e) {
35
                                        this.iterator = featureSet.provider.iterator();
36
                                        skypto(index);
37
                                }
38
                        } else {
39
                                this.iterator = featureSet.provider.iterator();
40
                                skypto(index);
41
                        }
42
                } else {
43
                        this.iterator = featureSet.provider.iterator();
44
                }
45
46
        }
47
48
        protected Iterator getIterator() {
49 26006 jmvivo
                if (this.featureIsNew){
50
                        return this.newsFeatures;
51
                } else if (this.iterator.hasNext()) {
52 25632 jjdelcerro
                        featureIsNew=false;
53 23820 jjdelcerro
                        return this.iterator;
54 26006 jmvivo
                } else{
55
                        featureIsNew = true;
56
                        this.newsFeatures = this.fset.store.getFeatureManager()
57
                                        .getInserted();
58
                        return this.newsFeatures;
59 23820 jjdelcerro
                }
60
        }
61
62 29289 jmvivo
        protected DefaultFeature createFeature(FeatureProvider data) {
63 23820 jjdelcerro
64
                DefaultFeature f = null;
65 25632 jjdelcerro
                data.setNew(featureIsNew);
66 23820 jjdelcerro
                try {
67 25690 jmvivo
                        FeatureReference ref = new DefaultFeatureReference(fset.store, data);
68 24248 jjdelcerro
                        f = (DefaultFeature) fset.store.getFeatureManager().get(ref,
69
                                        fset.store, data.getType());
70 23820 jjdelcerro
                } catch (DataException e) {
71
                        RuntimeException ex = new RuntimeException();
72
                        e.initCause(e);
73
                        throw ex;
74
                }
75
                if (f == null) {
76
                        // La feature no se ha editado.
77
                        f = new DefaultFeature(fset.store, data);
78
                }
79
                return f;
80
        }
81
82 29289 jmvivo
        protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
83 25917 jmvivo
84
                // XXX
85
                // si recorriendo los originales nos
86
                // encontramos uno nuevo, no lo devolvemos
87
                // porque se recorrera mas tarde.
88
                // Esto es una interaccion con los indices
89
                // ya que estos contienen todas las features ya
90
                // sea nuevas o no
91
92
                if (data.isNew() && !featureIsNew) {
93
                        return true;
94
                }
95 25690 jmvivo
                FeatureReference ref = new DefaultFeatureReference(fset.store, data);
96 24248 jjdelcerro
                return fset.store.getFeatureManager().isDeleted(ref);
97 23820 jjdelcerro
        }
98
99 31284 cordinyana
        protected void doDispose() throws BaseException {
100
                super.doDispose();
101 27525 jmvivo
                if (newsFeatures instanceof DisposableIterator) {
102
                        ((DisposableIterator) newsFeatures).dispose();
103
                }
104
                newsFeatures = null;
105
        }
106
107
108 23820 jjdelcerro
}