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

History | View | Annotate | Download (2.05 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 OrderedIterator extends DefaultIterator {
16

    
17
        protected Feature lastFeature = null;
18

    
19
        OrderedIterator(DefaultFeatureSet featureSet, Iterator iterator, long index) {
20
                super(featureSet);
21
                // FIXME QUE PASA CON SIZE > Integer.MAX_VALUE ?????
22
                if (featureSet.orderedData == null) {
23
                        List data = new ArrayList();
24
                        Object item;
25
                        while (iterator.hasNext()) {
26
                                item = iterator.next();
27
                                if (item instanceof DefaultFeature) {
28
                                        data.add(((DefaultFeature) item).getData());
29
                                } else {
30
                                        data.add(item);
31
                                }
32
                        }
33
                        Collections.sort(data, new FeatureProviderComparator(featureSet.store,
34
                                        featureSet.query.getOrder()));
35
                        featureSet.orderedData = data;
36
                }
37
                if (iterator instanceof DisposableIterator) {
38
                        ((DisposableIterator) iterator).dispose();
39
                }
40
                iterator = null;
41

    
42
                if (index < Integer.MAX_VALUE) {
43
                        this.iterator = featureSet.orderedData.listIterator((int) index);
44
                } else {
45
                        this.iterator = featureSet.orderedData.iterator();
46
                        this.skypto(index);
47
                }
48
        }
49

    
50
        public OrderedIterator(DefaultFeatureSet featureSet, long index) {
51
                super(featureSet);
52
                if (index < Integer.MAX_VALUE) {
53
                        this.iterator = featureSet.orderedData.listIterator((int) index);
54
                } else {
55
                        this.iterator = featureSet.orderedData.iterator();
56
                        this.skypto(index);
57
                }
58
        }
59

    
60
        public void remove() {
61
                super.remove();
62
                this.iterator.remove();
63
        }
64

    
65
        protected DefaultFeature createFeature(FeatureProvider fData)
66
                        throws DataException {
67
                fData.setNew(false);
68
                return new DefaultFeature(fset.store, fData);
69

    
70
        }
71

    
72
        protected void doDispose() throws BaseException {
73
                super.doDispose();
74
                lastFeature = null;
75
        }
76
}
77