Statistics
| Revision:

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

History | View | Annotate | Download (1.97 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.fmap.dal.feature.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

    
14
public class OrderedIterator extends DefaultIterator {
15

    
16
        protected Feature lastFeature = null;
17

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

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

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

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

    
69
        }
70

    
71
        public void dispose() {
72
                super.dispose();
73
                lastFeature = null;
74
        }
75
}
76