svn-gvsig-desktop / trunk / libraries / libDataSourceDBBaseDrivers / src / org / gvsig / data / datastores / vectorial / driver / jdbc / h2 / H2FeatureCollectionWithFeatureID.java @ 19663
History | View | Annotate | Download (4.89 KB)
1 | 19541 | vcaballero | package org.gvsig.data.datastores.vectorial.driver.jdbc.h2; |
---|---|---|---|
2 | |||
3 | import java.util.ArrayList; |
||
4 | import java.util.Collection; |
||
5 | import java.util.Comparator; |
||
6 | 19663 | jmvivo | import java.util.HashMap; |
7 | 19541 | vcaballero | import java.util.Iterator; |
8 | 19663 | jmvivo | import java.util.Map; |
9 | 19541 | vcaballero | import java.util.TreeSet; |
10 | |||
11 | import org.gvsig.data.ComplexObservable; |
||
12 | 19610 | jmvivo | import org.gvsig.data.exception.ReadException; |
13 | 19541 | vcaballero | import org.gvsig.data.vectorial.AbstractFeatureCollection; |
14 | import org.gvsig.data.vectorial.IFeature; |
||
15 | import org.gvsig.data.vectorial.IFeatureCollection; |
||
16 | import org.gvsig.data.vectorial.IFeatureID; |
||
17 | import org.gvsig.data.vectorial.IFeatureType; |
||
18 | import org.gvsig.data.vectorial.expansionadapter.FeatureManager; |
||
19 | 19663 | jmvivo | import org.gvsig.data.vectorial.filter.FeatureFilterParser; |
20 | 19541 | vcaballero | import org.gvsig.data.vectorial.order.FeatureComparator; |
21 | |||
22 | |||
23 | public class H2FeatureCollectionWithFeatureID extends AbstractFeatureCollection { |
||
24 | protected ComplexObservable observable = new ComplexObservable(); |
||
25 | protected Collection featureIDs;//<IFeatureID> |
||
26 | protected IFeatureType featureType;
|
||
27 | |||
28 | 19663 | jmvivo | |
29 | public H2FeatureCollectionWithFeatureID(FeatureManager fm,H2Driver driver,IFeatureType type, String filter,String order) throws ReadException { |
||
30 | 19541 | vcaballero | this.featureType=type;
|
31 | 19663 | jmvivo | intilizeFeatureIDs(fm, driver, filter, order); |
32 | 19541 | vcaballero | } |
33 | |||
34 | 19663 | jmvivo | protected void intilizeFeatureIDs(FeatureManager fm,H2Driver driver, String filter,String order) throws ReadException { |
35 | FeatureFilterParser parser = null;
|
||
36 | IFeature feature; |
||
37 | Collection tmpFeatures;
|
||
38 | if (order == null){ |
||
39 | if (filter == null){ |
||
40 | tmpFeatures = new ArrayList(); // Si queremos optimizar deberiamos inicializar |
||
41 | // el tama?o
|
||
42 | } else {
|
||
43 | tmpFeatures = new ArrayList(); |
||
44 | } |
||
45 | } else {
|
||
46 | Comparator comparator = new FeatureComparator(this.featureType,order); |
||
47 | tmpFeatures = new TreeSet(comparator); |
||
48 | } |
||
49 | |||
50 | if (filter != null && filter != ""){ |
||
51 | parser = new FeatureFilterParser(filter,featureType);
|
||
52 | } |
||
53 | for (int i=0;i<fm.getNum();i++){ |
||
54 | feature = fm.getFeature(i); |
||
55 | if (fm.isDeleted(feature)){
|
||
56 | continue;
|
||
57 | } |
||
58 | if (parser == null || parser.match(feature)){ |
||
59 | if (order != null){ |
||
60 | tmpFeatures.add(feature); |
||
61 | } else {
|
||
62 | tmpFeatures.add(feature.getID()); |
||
63 | } |
||
64 | } |
||
65 | |||
66 | |||
67 | } |
||
68 | |||
69 | IFeatureCollection coll = new H2FeatureCollection(driver,this.featureType,filter,order); |
||
70 | Iterator iter = coll.iterator();
|
||
71 | while (iter.hasNext()){
|
||
72 | feature =(IFeature)iter.next(); |
||
73 | if (!fm.isDeleted(feature)){
|
||
74 | if (order != null){ |
||
75 | tmpFeatures.add(feature); |
||
76 | } else {
|
||
77 | tmpFeatures.add(feature.getID()); |
||
78 | } |
||
79 | } |
||
80 | } |
||
81 | |||
82 | if (order != null){ |
||
83 | featureIDs = new ArrayList(); |
||
84 | iter = tmpFeatures.iterator(); |
||
85 | while (iter.hasNext()){
|
||
86 | featureIDs.add(((IFeature)iter.next()).getID()); |
||
87 | } |
||
88 | } else {
|
||
89 | featureIDs = tmpFeatures; |
||
90 | } |
||
91 | |||
92 | |||
93 | 19541 | vcaballero | } |
94 | |||
95 | public int size() { |
||
96 | return featureIDs.size();
|
||
97 | } |
||
98 | |||
99 | public boolean isEmpty() { |
||
100 | return featureIDs.isEmpty();
|
||
101 | } |
||
102 | |||
103 | public boolean contains(Object o) { |
||
104 | if (o instanceof IFeature){ |
||
105 | featureIDs.contains(((IFeature)o).getID()); |
||
106 | } |
||
107 | return featureIDs.contains(o);
|
||
108 | } |
||
109 | |||
110 | public Iterator iterator() { |
||
111 | H2FIDIterator dbfIter=new H2FIDIterator(featureIDs.iterator());
|
||
112 | return dbfIter;
|
||
113 | } |
||
114 | |||
115 | public Object[] toArray() { |
||
116 | ArrayList features= new ArrayList(); |
||
117 | Iterator iterator= this.iterator(); |
||
118 | while(iterator.hasNext()){
|
||
119 | IFeature feature=(IFeature)iterator.next(); |
||
120 | features.add(feature); |
||
121 | } |
||
122 | return features.toArray();
|
||
123 | } |
||
124 | |||
125 | public Object[] toArray(Object[] a) { |
||
126 | ArrayList features= new ArrayList(); |
||
127 | Iterator iterator= this.iterator(); |
||
128 | while(iterator.hasNext()){
|
||
129 | IFeature feature=(IFeature)iterator.next(); |
||
130 | features.add(feature); |
||
131 | } |
||
132 | return features.toArray(a);
|
||
133 | } |
||
134 | |||
135 | public boolean add(Object o) { |
||
136 | throw new UnsupportedOperationException(); |
||
137 | } |
||
138 | |||
139 | public boolean remove(Object o) { |
||
140 | throw new UnsupportedOperationException(); |
||
141 | } |
||
142 | |||
143 | public boolean containsAll(Collection c) { |
||
144 | Iterator iter = c.iterator();
|
||
145 | while (iter.hasNext()){
|
||
146 | if (!this.contains(iter.next())){ |
||
147 | return false; |
||
148 | } |
||
149 | } |
||
150 | return true; |
||
151 | } |
||
152 | |||
153 | public boolean addAll(Collection c) { |
||
154 | throw new UnsupportedOperationException(); |
||
155 | } |
||
156 | |||
157 | public boolean removeAll(Collection c) { |
||
158 | throw new UnsupportedOperationException(); |
||
159 | } |
||
160 | |||
161 | public boolean retainAll(Collection c) { |
||
162 | throw new UnsupportedOperationException(); |
||
163 | } |
||
164 | |||
165 | public void clear() { |
||
166 | throw new UnsupportedOperationException(); |
||
167 | } |
||
168 | |||
169 | private class H2FIDIterator implements Iterator{ |
||
170 | private Iterator iter; |
||
171 | |||
172 | public H2FIDIterator(Iterator iter){ |
||
173 | this.iter=iter;
|
||
174 | } |
||
175 | public boolean hasNext() { |
||
176 | return iter.hasNext();
|
||
177 | } |
||
178 | |||
179 | public Object next() { |
||
180 | 19663 | jmvivo | |
181 | 19541 | vcaballero | IFeatureID fid= (IFeatureID)iter.next(); |
182 | 19610 | jmvivo | IFeature feature; |
183 | try {
|
||
184 | feature = fid.getFeature(featureType); |
||
185 | } catch (ReadException e) {
|
||
186 | throw new RuntimeException(e); |
||
187 | } |
||
188 | 19541 | vcaballero | return feature;
|
189 | } |
||
190 | |||
191 | public void remove() { |
||
192 | throw new UnsupportedOperationException(); |
||
193 | } |
||
194 | |||
195 | } |
||
196 | |||
197 | } |