Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libDataSourceBaseDrivers / src / org / gvsig / data / datastores / vectorial / file / dbf / DBFFeatureCollectionWithFeatureID.java @ 20602

History | View | Annotate | Download (4.29 KB)

1
package org.gvsig.data.datastores.vectorial.file.dbf;
2

    
3
import java.util.ArrayList;
4
import java.util.Collection;
5
import java.util.Comparator;
6
import java.util.Iterator;
7
import java.util.TreeSet;
8

    
9
import org.gvsig.data.exception.ReadException;
10
import org.gvsig.data.vectorial.AbstractFeatureCollection;
11
import org.gvsig.data.vectorial.FeatureManager;
12
import org.gvsig.data.vectorial.IFeature;
13
import org.gvsig.data.vectorial.IFeatureCollection;
14
import org.gvsig.data.vectorial.IFeatureID;
15
import org.gvsig.data.vectorial.IFeatureType;
16
import org.gvsig.data.vectorial.IsNotFeatureSettingException;
17
import org.gvsig.data.vectorial.expressionevaluator.FeatureComparator;
18
import org.gvsig.util.observer.Observable;
19

    
20

    
21
//FIXME: OJO Excepciones
22
public class DBFFeatureCollectionWithFeatureID extends AbstractFeatureCollection {
23
        protected Observable observable = new Observable();
24
        protected Collection featureIDs;//<IFeatureID>
25
        protected IFeatureType featureType;
26

    
27
        public DBFFeatureCollectionWithFeatureID(FeatureManager fm,DBFStore store,IFeatureType type, String filter,String Order) throws ReadException {
28
                this.featureType=type;
29
                intilizeFeatureIDs(fm, store, filter, Order);
30
        }
31

    
32
        protected void intilizeFeatureIDs(FeatureManager fm,DBFStore store, String filter,String order) throws ReadException {
33
                try{
34
                if (order == null){
35
                        if (filter == null){
36
                                featureIDs = new ArrayList(); // Si queremos optimizar deberiamos inicializar
37
                                // el tama?o
38
                        } else {
39
                                featureIDs = new ArrayList();
40
                        }
41
                } else {
42
                        Comparator comparator = new FeatureComparator(this.featureType,order);
43
                        featureIDs = new TreeSet(comparator);
44
                }
45
                IFeatureCollection coll = new DBFFeatureCollection(fm,store,this.featureType,filter);
46
                Iterator iter = coll.iterator();
47
                while (iter.hasNext()){
48
                        IFeature feature =(IFeature)iter.next();
49
                        featureIDs.add(feature.getID());
50
                }
51
                }catch (Exception e) {
52
                        throw new ReadException("DBFFeatureCollection",e);
53
                }
54
        }
55

    
56
        public int size() {
57
                return featureIDs.size();
58
        }
59

    
60
        public boolean isEmpty() {
61
                return featureIDs.isEmpty();
62
        }
63

    
64
        public boolean contains(Object o) {
65
                if (o instanceof IFeature){
66
                        featureIDs.contains(((IFeature)o).getID());
67
                }
68
                return featureIDs.contains(o);
69
        }
70

    
71
        public Iterator iterator() {
72
                DBFFIDIterator dbfIter=new DBFFIDIterator(featureIDs.iterator());
73
                return dbfIter;
74
        }
75

    
76
        public Object[] toArray() {
77
                ArrayList features= new ArrayList();
78
                Iterator iterator= this.iterator();
79
                while(iterator.hasNext()){
80
                        IFeature feature=(IFeature)iterator.next();
81
                        features.add(feature);
82
                }
83
                return features.toArray();
84
        }
85

    
86
        public Object[] toArray(Object[] a) {
87
                ArrayList features= new ArrayList();
88
                Iterator iterator= this.iterator();
89
                while(iterator.hasNext()){
90
                        IFeature feature=(IFeature)iterator.next();
91
                        features.add(feature);
92
                }
93
                return features.toArray(a);
94
        }
95

    
96
        public boolean add(Object o) {
97
                throw new UnsupportedOperationException();
98
        }
99

    
100
        public boolean remove(Object o) {
101
                throw new UnsupportedOperationException();
102
        }
103

    
104
        public boolean containsAll(Collection c) {
105
                Iterator iter = c.iterator();
106
                while (iter.hasNext()){
107
                        if (!this.contains(iter.next())){
108
                                return false;
109
                        }
110
                }
111
                return true;
112
        }
113

    
114
        public boolean addAll(Collection c) {
115
                throw new UnsupportedOperationException();
116
        }
117

    
118
        public boolean removeAll(Collection c) {
119
                throw new UnsupportedOperationException();
120
        }
121

    
122
        public boolean retainAll(Collection c) {
123
                throw new UnsupportedOperationException();
124
        }
125

    
126
        public void clear() {
127
                throw new UnsupportedOperationException();
128
        }
129

    
130
        private class DBFFIDIterator implements Iterator{
131
                private Iterator iter;
132

    
133
                public DBFFIDIterator(Iterator iter){
134
                        this.iter=iter;
135
                }
136
                public boolean hasNext() {
137
                        return iter.hasNext();
138
                }
139

    
140
                public Object next() {
141
                        IFeatureID fid= (IFeatureID)iter.next();
142
                        IFeature feature;
143
                        try {
144
                                feature = fid.getFeature(featureType);
145
                        } catch (ReadException e) {
146
                                throw new RuntimeException(e);
147
                        }
148
                        return feature;
149
                }
150

    
151
                public void remove() {
152
                        throw new UnsupportedOperationException();
153
                }
154

    
155
        }
156

    
157
        public void dispose() {
158
                observable.deleteObservers();
159
                this.observable = null;
160
                this.featureIDs.clear();
161
                this.featureIDs= null;
162
                this.featureType = null;
163

    
164
        }
165

    
166
}