svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / impl / featureset / OrderedIterator.java @ 29289
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 FeatureDataComparator(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 |
|