Statistics
| Revision:

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

History | View | Annotate | Download (4.38 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.ComplexObservable;
10
import org.gvsig.data.exception.ReadException;
11
import org.gvsig.data.vectorial.AbstractFeatureCollection;
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.expansionadapter.FeatureManager;
18
import org.gvsig.data.vectorial.order.FeatureComparator;
19

    
20

    
21
//FIXME: OJO Excepciones
22
public class DBFFeatureCollectionWithFeatureID extends AbstractFeatureCollection {
23
        protected ComplexObservable observable = new ComplexObservable();
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
                        } catch (IsNotFeatureSettingException e) {
148
                                throw new RuntimeException(e);
149
                        }
150
                        return feature;
151
                }
152

    
153
                public void remove() {
154
                        throw new UnsupportedOperationException();
155
                }
156

    
157
        }
158

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

    
166
        }
167

    
168
}