Statistics
| Revision:

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
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
import java.util.HashMap;
7
import java.util.Iterator;
8
import java.util.Map;
9
import java.util.TreeSet;
10

    
11
import org.gvsig.data.ComplexObservable;
12
import org.gvsig.data.exception.ReadException;
13
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
import org.gvsig.data.vectorial.filter.FeatureFilterParser;
20
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

    
29
        public H2FeatureCollectionWithFeatureID(FeatureManager fm,H2Driver driver,IFeatureType type, String filter,String order) throws ReadException {
30
                this.featureType=type;
31
                intilizeFeatureIDs(fm, driver, filter, order);
32
        }
33

    
34
        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
        }
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

    
181
                        IFeatureID fid= (IFeatureID)iter.next();
182
                        IFeature feature;
183
                        try {
184
                                feature = fid.getFeature(featureType);
185
                        } catch (ReadException e) {
186
                                throw new RuntimeException(e);
187
                        }
188
                        return feature;
189
                }
190

    
191
                public void remove() {
192
                        throw new UnsupportedOperationException();
193
                }
194

    
195
        }
196

    
197
}