Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / featureset / EditedIterator.java @ 25994

History | View | Annotate | Download (2.51 KB)

1
package org.gvsig.fmap.dal.feature.impl.featureset;
2

    
3
import java.util.Iterator;
4

    
5
import org.gvsig.fmap.dal.exception.DataException;
6
import org.gvsig.fmap.dal.feature.FeatureReference;
7
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
8
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureReference;
9
import org.gvsig.fmap.dal.feature.spi.FeatureData;
10

    
11
public class EditedIterator extends FilteredIterator {
12

    
13
        Iterator newsFeatures;
14
        boolean featureIsNew;
15

    
16

    
17
        public EditedIterator(DefaultFeatureSet featureSet) {
18
                super(featureSet);
19
        }
20

    
21
        public EditedIterator(DefaultFeatureSet featureSet, long index)
22
                        throws DataException {
23
                super(featureSet);
24
                if (index > 0) {
25
                        if (featureSet.provider.canIterateFromIndex()) {
26
                                try {
27
                                        this.iterator = featureSet.provider.iterator(index);
28
                                } catch (IllegalArgumentException e) {
29
                                        this.iterator = featureSet.provider.iterator();
30
                                        this.newsFeatures = null;
31
                                        skypto(index);
32
                                } catch (UnsupportedOperationException e) {
33
                                        this.iterator = featureSet.provider.iterator();
34
                                        this.newsFeatures = null;
35
                                        skypto(index);
36
                                }
37
                        } else {
38
                                this.iterator = featureSet.provider.iterator();
39
                                this.newsFeatures = null;
40
                                skypto(index);
41
                        }
42
                } else {
43
                        this.iterator = featureSet.provider.iterator();
44
                        this.newsFeatures = featureSet.store.getFeatureManager()
45
                                        .getInserted();
46
                }
47

    
48
        }
49

    
50
        protected Iterator getIterator() {
51
                if (this.iterator.hasNext()) {
52
                        featureIsNew=false;
53
                        return this.iterator;
54
                }
55
                featureIsNew = true;
56
                return this.newsFeatures;
57
        }
58

    
59
        protected DefaultFeature createFeature(FeatureData data) {
60

    
61
                DefaultFeature f = null;
62
                data.setNew(featureIsNew);
63
                try {
64
                        FeatureReference ref = new DefaultFeatureReference(fset.store, data);
65
                        f = (DefaultFeature) fset.store.getFeatureManager().get(ref,
66
                                        fset.store, data.getType());
67
                } catch (DataException e) {
68
                        RuntimeException ex = new RuntimeException();
69
                        e.initCause(e);
70
                        throw ex;
71
                }
72
                if (f == null) {
73
                        // La feature no se ha editado.
74
                        f = new DefaultFeature(fset.store, data);
75
                }
76
                return f;
77
        }
78

    
79
        protected boolean isDeletedOrHasToSkip(FeatureData data) {
80

    
81
                // XXX
82
                // si recorriendo los originales nos
83
                // encontramos uno nuevo, no lo devolvemos
84
                // porque se recorrera mas tarde.
85
                // Esto es una interaccion con los indices
86
                // ya que estos contienen todas las features ya
87
                // sea nuevas o no
88

    
89
                if (data.isNew() && !featureIsNew) {
90
                        return true;
91
                }
92
                FeatureReference ref = new DefaultFeatureReference(fset.store, data);
93
                return fset.store.getFeatureManager().isDeleted(ref);
94
        }
95

    
96
}