Statistics
| Revision:

svn-gvsig-desktop / 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 @ 40435

History | View | Annotate | Download (3.09 KB)

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

    
3
import java.util.Iterator;
4
import java.util.NoSuchElementException;
5

    
6
import org.gvsig.fmap.dal.exception.DataException;
7
import org.gvsig.tools.dispose.DisposableIterator;
8
import org.gvsig.fmap.dal.feature.Feature;
9
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
10
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
11
import org.gvsig.tools.dispose.impl.AbstractDisposable;
12
import org.gvsig.tools.exception.BaseException;
13

    
14

    
15
class DefaultIterator extends AbstractDisposable implements DisposableIterator {
16

    
17
        protected Iterator iterator;
18
        protected DefaultFeatureSet fset;
19
        protected Feature lastFeature = null;
20

    
21
        public DefaultIterator(DefaultFeatureSet featureSet) {
22
                this.fset = featureSet;
23
        }
24

    
25
        public DefaultIterator(DefaultFeatureSet featureSet, long index)
26
                        throws DataException {
27
                this.fset = featureSet;
28
                if (index > 0) {
29
                        if (featureSet.provider.canIterateFromIndex()) {
30
                                try {
31
                                        this.iterator = featureSet.provider.iterator(index);
32
                                } catch (UnsupportedOperationException e) {
33
                                        this.iterator = featureSet.provider.iterator();
34
                                        skypto(index);
35
                                }
36
                        } else {
37
                                this.iterator = featureSet.provider.iterator();
38
                                skypto(index);
39
                        }
40
                } else {
41
                        this.iterator = featureSet.provider.iterator();
42
                }
43
        }
44

    
45
        protected void skypto(long index) {
46
                // TODO: Comprobar si esta bien la condicion de n<=
47
                for (long n = 0; n <= index && this.getIterator().hasNext(); n++, this
48
                                .getIterator()
49
                                .next()) {
50
                        ;
51
                }
52
        }
53

    
54
        public boolean hasNext() {
55
                fset.checkSourceStoreModified();
56
                return this.getIterator().hasNext();
57
        }
58

    
59
        public Object next() {
60
                fset.checkSourceStoreModified();
61
                lastFeature = null;
62
                if (!this.hasNext()) {
63
                        throw new NoSuchElementException();
64
                }
65
                try {
66
                        lastFeature = this.createFeature((FeatureProvider) this.getIterator()
67
                                        .next());
68
                        return lastFeature;
69
                } catch (DataException e) {
70
                        RuntimeException ex = new RuntimeException();
71
                        e.initCause(e);
72
                        throw ex;
73
                }
74
        }
75

    
76
        public void remove() {
77
                if (!fset.store.isEditing()) {
78
                        throw new UnsupportedOperationException();
79
                }
80
                if (lastFeature == null) {
81
                        throw new IllegalStateException();
82
                }
83
                try {
84
                        this.fset.delete(this.lastFeature);
85
                } catch (DataException e) {
86
                        // FIXME Cambiar excepcion a una Runtime de DAL
87
                        throw new RuntimeException(e);
88
                }
89
                lastFeature = null;
90
        }
91

    
92
        protected DefaultFeature createFeature(FeatureProvider fData)
93
                        throws DataException {
94
                fData.setNew(false);
95
                if (this.fset.transform.isEmpty()) {
96
                        return new DefaultFeature(fset.store, fData);
97
                } else {
98
                        return (DefaultFeature) this.fset.transform.applyTransform(
99
                                        new DefaultFeature(fset.store, fData), fset
100
                                                        .getDefaultFeatureType());
101
                }
102
        }
103

    
104
        protected Iterator getIterator() {
105
                return this.iterator;
106
        }
107

    
108
        protected boolean isDeletedOrHasToSkip(FeatureProvider data) {
109
                return false;
110
        }
111

    
112
        protected void doNext() throws DataException {
113

    
114
        }
115

    
116
        protected void doDispose() throws BaseException {
117
                if (iterator instanceof DisposableIterator){
118
                        ((DisposableIterator)this.iterator).dispose();
119
                }
120
                this.iterator = null;
121
                this.fset = null;
122
                this.lastFeature = null;
123
        }
124

    
125
}