svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.dbf / src / main / java / org / gvsig / fmap / dal / store / dbf / DBFSetProvider.java @ 40435
History | View | Annotate | Download (3.37 KB)
1 | 40435 | jjdelcerro | /**
|
---|---|---|---|
2 | *
|
||
3 | */
|
||
4 | package org.gvsig.fmap.dal.store.dbf; |
||
5 | |||
6 | import java.util.NoSuchElementException; |
||
7 | |||
8 | import org.gvsig.fmap.dal.exception.DataException; |
||
9 | import org.gvsig.fmap.dal.exception.ReadRuntimeException; |
||
10 | import org.gvsig.fmap.dal.feature.FeatureQuery; |
||
11 | import org.gvsig.fmap.dal.feature.FeatureType; |
||
12 | import org.gvsig.fmap.dal.feature.spi.AbstractFeatureProviderIterator; |
||
13 | import org.gvsig.fmap.dal.feature.spi.AbstractFeatureSetProvider; |
||
14 | import org.gvsig.fmap.dal.feature.spi.FeatureProvider; |
||
15 | import org.gvsig.tools.exception.BaseException; |
||
16 | |||
17 | /**
|
||
18 | * @author jjdelcerro
|
||
19 | *
|
||
20 | */
|
||
21 | public class DBFSetProvider extends AbstractFeatureSetProvider { |
||
22 | |||
23 | public DBFSetProvider(DBFStoreProvider store, FeatureQuery query,
|
||
24 | FeatureType featureType) |
||
25 | throws DataException {
|
||
26 | super(store, query, featureType);
|
||
27 | } |
||
28 | |||
29 | public boolean canFilter() { |
||
30 | return false; |
||
31 | } |
||
32 | |||
33 | public boolean canIterateFromIndex() { |
||
34 | return true; |
||
35 | } |
||
36 | |||
37 | public boolean canOrder() { |
||
38 | return false; |
||
39 | } |
||
40 | |||
41 | public long getSize() throws DataException { |
||
42 | return getStore().getFeatureCount();
|
||
43 | } |
||
44 | |||
45 | public boolean isEmpty() throws DataException { |
||
46 | return getSize() == 0; |
||
47 | } |
||
48 | |||
49 | @Override
|
||
50 | protected void doDispose() throws BaseException { |
||
51 | } |
||
52 | |||
53 | protected AbstractFeatureProviderIterator createIterator(long index) |
||
54 | throws DataException {
|
||
55 | return new DBFIterator((DBFStoreProvider) getStore(), getFeatureType(), |
||
56 | index); |
||
57 | } |
||
58 | |||
59 | protected AbstractFeatureProviderIterator createFastIterator(long index) |
||
60 | throws DataException {
|
||
61 | return new FastDBFIterator((DBFStoreProvider) getStore(), |
||
62 | getFeatureType(), index); |
||
63 | } |
||
64 | |||
65 | protected class DBFIterator extends AbstractFeatureProviderIterator { |
||
66 | protected long index; |
||
67 | protected FeatureType type;
|
||
68 | protected long count; |
||
69 | |||
70 | public DBFIterator(DBFStoreProvider store, FeatureType type,
|
||
71 | long startOn) throws DataException { |
||
72 | super(store);
|
||
73 | this.index = startOn;
|
||
74 | this.type = type;
|
||
75 | this.count = store.getFeatureCount();
|
||
76 | } |
||
77 | |||
78 | protected boolean internalHasNext() { |
||
79 | return this.count > index; |
||
80 | } |
||
81 | |||
82 | protected Object internalNext() { |
||
83 | if (index >= this.count) { |
||
84 | throw new NoSuchElementException(); |
||
85 | } |
||
86 | try {
|
||
87 | |||
88 | FeatureProvider ret = |
||
89 | getDBFStoreProvider().getFeatureProviderByIndex(index, |
||
90 | this.type);
|
||
91 | index++; |
||
92 | return ret;
|
||
93 | } catch (DataException e) {
|
||
94 | throw new ReadRuntimeException(getDBFStoreProvider().getProviderName(), |
||
95 | e); |
||
96 | } |
||
97 | } |
||
98 | |||
99 | public void remove() { |
||
100 | throw new UnsupportedOperationException(); |
||
101 | } |
||
102 | |||
103 | protected void internalDispose() { |
||
104 | type = null;
|
||
105 | } |
||
106 | |||
107 | protected DBFStoreProvider getDBFStoreProvider() {
|
||
108 | return (DBFStoreProvider) getFeatureStoreProvider();
|
||
109 | } |
||
110 | |||
111 | @Override
|
||
112 | protected void doDispose() throws BaseException { |
||
113 | // Nothing to do
|
||
114 | } |
||
115 | } |
||
116 | |||
117 | protected class FastDBFIterator extends DBFIterator { |
||
118 | protected FeatureProvider data;
|
||
119 | |||
120 | public FastDBFIterator(DBFStoreProvider store, FeatureType type,
|
||
121 | long startOn) throws DataException { |
||
122 | super(store, type, startOn);
|
||
123 | this.data = getFeatureStoreProvider().createFeatureProvider(type);
|
||
124 | } |
||
125 | |||
126 | protected Object internalNext() { |
||
127 | if (index >= this.count) { |
||
128 | throw new NoSuchElementException(); |
||
129 | } |
||
130 | |||
131 | try {
|
||
132 | getDBFStoreProvider().initFeatureProviderByIndex(this.data,
|
||
133 | index, type); |
||
134 | } catch (DataException e) {
|
||
135 | throw new ReadRuntimeException("next", e); |
||
136 | } |
||
137 | index++; |
||
138 | return this.data; |
||
139 | } |
||
140 | |||
141 | protected void internalDispose() { |
||
142 | super.internalDispose();
|
||
143 | data = null;
|
||
144 | } |
||
145 | } |
||
146 | } |