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 / FastOrderedIterator.java @ 40435

History | View | Annotate | Download (2.75 KB)

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

    
3
import java.util.ArrayList;
4
import java.util.Collections;
5
import java.util.Iterator;
6
import java.util.List;
7

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

    
15
public class FastOrderedIterator extends DefaultIterator {
16
        DefaultFeature myFeature;
17
        protected Feature lastFeature = null;
18

    
19
        FastOrderedIterator(DefaultFeatureSet featureSet, Iterator iterator, long index) {
20
                super(featureSet);
21
                try {
22
                        this.initializeFeature();
23
                        if (featureSet.orderedData == null) {
24
                                // FIXME QUE PASA CON SIZE > Integer.MAX_VALUE ?????
25
        
26
                                List data = new ArrayList();
27
                                Object item;
28
                                while (iterator.hasNext()) {
29
                                        item = iterator.next();
30
                                        if (item instanceof DefaultFeature){
31
                                                data.add(((DefaultFeature) item).getData().getCopy());
32
                                        } else {
33
                                                data.add(((FeatureProvider)item).getCopy());
34
                                        }
35
                                }
36
                                Collections.sort(data, new FeatureProviderComparator(featureSet.store,
37
                                                featureSet.query.getOrder()));
38
                                featureSet.orderedData = data;
39
                        }
40
        
41
                        if (index < Integer.MAX_VALUE) {
42
                                this.iterator = featureSet.orderedData.listIterator((int) index);
43
                        } else {
44
                                this.iterator = featureSet.orderedData.iterator();
45
                                this.skypto(index);
46
                        }
47
                }
48
                finally {                        
49
                        if (iterator instanceof DisposableIterator) {
50
                                ((DisposableIterator) iterator).dispose();
51
                        }
52
                }
53
        }
54

    
55
        public FastOrderedIterator(DefaultFeatureSet featureSet, long index) {
56
                super(featureSet);
57
                this.initializeFeature();
58

    
59
                if (index < Integer.MAX_VALUE) {
60
                        this.iterator = featureSet.orderedData.listIterator((int) index);
61
                } else {
62
                        this.iterator = featureSet.orderedData.iterator();
63
                        this.skypto(index);
64
                }
65
        }
66

    
67
        protected DefaultFeature createFeature(FeatureProvider fData) {
68
                fData.setNew(false);
69
                this.myFeature.setData(fData);
70
                return this.myFeature;
71
        }
72

    
73
        protected void initializeFeature() {
74
                myFeature = new DefaultFeature(fset.store);
75
        }
76

    
77
        public Object next() {
78
                lastFeature = null;
79
                lastFeature = (Feature) super.next();
80
                return lastFeature;
81
        }
82

    
83
        public void remove() {
84
                if (!fset.store.isEditing()) {
85
                        throw new UnsupportedOperationException();
86
                }
87
                if (this.lastFeature == null) {
88
                        throw new IllegalStateException();
89
                }
90
                try {
91
                        fset.store.delete(this.lastFeature);
92
                } catch (DataException e) {
93
                        // FIXME Cambiar excepcion a una Runtime de DAL
94
                        throw new RuntimeException(e);
95
                }
96
                this.iterator.remove();
97
                this.initializeFeature();
98
        }
99

    
100
        protected void doDispose() throws BaseException {
101
                super.doDispose();
102
                myFeature = null;
103
                lastFeature = null;
104
        }
105
}
106