Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / spi / memory / AbstractMemoryStoreProvider.java @ 29289

History | View | Annotate | Download (4.35 KB)

1
package org.gvsig.fmap.dal.feature.spi.memory;
2

    
3
import java.util.ArrayList;
4
import java.util.Iterator;
5

    
6
import org.gvsig.fmap.dal.DataStoreParameters;
7
import org.gvsig.fmap.dal.exception.DataException;
8
import org.gvsig.fmap.dal.exception.InitializeException;
9
import org.gvsig.fmap.dal.feature.DisposableIterator;
10
import org.gvsig.fmap.dal.feature.FeatureQuery;
11
import org.gvsig.fmap.dal.feature.FeatureType;
12
import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
13
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
14
import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
15
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
16
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
17
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
18
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
19
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
20

    
21
public abstract class AbstractMemoryStoreProvider extends
22
                AbstractFeatureStoreProvider {
23

    
24
        protected ArrayList data;
25
        protected DataStoreParameters parameters;
26

    
27
        public AbstractMemoryStoreProvider(DataStoreParameters parameters) {
28
                super();
29
                this.parameters = parameters;
30
        }
31

    
32
        public FeatureStoreProvider initialize(FeatureStoreProviderServices store)
33
                        throws InitializeException {
34
                super.initialize(store);
35
                return this;
36
        }
37

    
38
        public void performChanges(Iterator deleteds, Iterator inserteds, Iterator updateds, Iterator originalFeatureTypesUpdated) throws PerformEditingException {
39
                throw new UnsupportedOperationException();
40
        }
41

    
42
        public void addFeatureData(FeatureProvider data) {
43
                data.setOID(this.createNewOID());
44
                this.data.add(data);
45
        }
46

    
47
        public DisposableIterator dataIterator() throws DataException {
48
                this.open();
49
                return new DelegatedDisposableIterator(this.data.iterator());
50
        }
51

    
52
        public DisposableIterator dataIterator(long index) throws DataException {
53
                this.open();
54
                return new DelegatedDisposableIterator(this.data
55
                                .listIterator((int) index));
56
        }
57
        public DisposableIterator dataIterator(FeatureType featureType)
58
                        throws DataException {
59
                this.open();
60
                return new DelegatedDisposableIterator(this.data.iterator(),
61
                                featureType);
62
        }
63

    
64
        public DisposableIterator dataIterator(long index, FeatureType featureType)
65
                        throws DataException {
66
                this.open();
67
                return new DelegatedDisposableIterator(this.data
68
                                .listIterator((int) index), featureType);
69
        }
70

    
71
        public long getDataSize() throws DataException {
72
                this.open();
73
                return this.data.size();
74
        }
75

    
76
        public FeatureProvider getFeatureDataByReference(
77
                        FeatureReferenceProviderServices reference)
78
                        throws DataException {
79
                int oid = ((Long) reference.getOID()).intValue();
80
                return (FeatureProvider) this.data.get(oid);
81
        }
82

    
83
        public FeatureProvider getFeatureDataByReference(
84
                        FeatureReferenceProviderServices reference,
85
                        FeatureType featureType) throws DataException {
86
                int oid = ((Long) reference.getOID()).intValue();
87
                return new MemoryFeatureDataWrapper((DefaultFeatureProvider) this.data
88
                                .get(oid),
89
                                featureType);
90
        }
91

    
92
        public FeatureSetProvider createSet(FeatureQuery query, FeatureType featureType)
93
                        throws DataException {
94
                this.open();
95
                return new MemoryFeatureSet(this, query, featureType);
96
        }
97

    
98
        public FeatureProvider createFeatureData(FeatureType featureType)throws DataException  {
99
                this.open();
100
                return new DefaultFeatureProvider(featureType);
101
        }
102

    
103
        public boolean canWriteGeometry(int geometryType, int geometrySubType) {
104
                // By default memory stores support all geometry types
105
                return true;
106
        }
107

    
108
        protected abstract void initializeFeatureTypes() throws InitializeException;
109

    
110
        private class DelegatedDisposableIterator implements DisposableIterator {
111
                private Iterator delegated;
112
                private FeatureType fType;
113

    
114
                public DelegatedDisposableIterator(Iterator it) {
115
                        this(it, null);
116
                }
117

    
118
                public DelegatedDisposableIterator(Iterator it, FeatureType featureType) {
119
                        this.delegated = it;
120
                        this.fType = featureType;
121

    
122
                }
123

    
124
                public void dispose() {
125
                        this.delegated = null;
126
                }
127

    
128
                public boolean hasNext() {
129
                        return delegated.hasNext();
130
                }
131

    
132
                public Object next() {
133
                        if (fType == null) {
134
                                return delegated.next();
135
                        } else {
136
                                return new MemoryFeatureDataWrapper(
137
                                                (DefaultFeatureProvider) delegated.next(),
138
                                                this.fType);
139
                        }
140

    
141
                }
142

    
143
                public void remove() {
144
                        throw new UnsupportedOperationException();
145
                }
146

    
147
        }
148

    
149
        public long getFeatureCount() throws DataException {
150
                return data.size();
151
        }
152
}