Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extGPE-gvSIG / src / org / gvsig / fmap / dal / store / gpe / GPEStoreProvider.java @ 27499

History | View | Annotate | Download (11.2 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 * 
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 * 
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 * 
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
 * MA  02110-1301, USA.
20
 * 
21
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2009 {Iver T.I.}   {Task}
26
 */
27

    
28
package org.gvsig.fmap.dal.store.gpe;
29

    
30
import java.io.File;
31
import java.util.Iterator;
32

    
33
import org.gvsig.fmap.dal.DataParameters;
34
import org.gvsig.fmap.dal.DataServerExplorer;
35
import org.gvsig.fmap.dal.exception.DataException;
36
import org.gvsig.fmap.dal.exception.InitializeException;
37
import org.gvsig.fmap.dal.exception.OpenException;
38
import org.gvsig.fmap.dal.exception.ReadException;
39
import org.gvsig.fmap.dal.feature.Feature;
40
import org.gvsig.fmap.dal.feature.FeatureQuery;
41
import org.gvsig.fmap.dal.feature.FeatureStore;
42
import org.gvsig.fmap.dal.feature.FeatureType;
43
import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
44
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
45
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
46
import org.gvsig.fmap.dal.feature.spi.FeatureData;
47
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
48
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
49
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
50
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
51
import org.gvsig.fmap.dal.resource.file.FileResource;
52
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
53
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
54
import org.gvsig.fmap.dal.store.gpe.handlers.FmapContentHandler;
55
import org.gvsig.fmap.dal.store.gpe.handlers.FmapErrorHandler;
56
import org.gvsig.fmap.geom.primitive.Envelope;
57
import org.gvsig.gpe.GPEFactory;
58
import org.gvsig.gpe.GPERegister;
59
import org.gvsig.gpe.parser.GPEErrorHandler;
60
import org.gvsig.gpe.parser.GPEParser;
61
import org.gvsig.tools.ToolsLocator;
62
import org.gvsig.tools.dynobject.DelegatedDynObject;
63
import org.gvsig.tools.dynobject.DynClass;
64
import org.gvsig.tools.dynobject.DynField;
65
import org.gvsig.tools.dynobject.DynObjectManager;
66
import org.gvsig.tools.persistence.PersistenceException;
67
import org.gvsig.tools.persistence.PersistentState;
68

    
69
/**
70
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
71
 */
72
public class GPEStoreProvider extends AbstractFeatureStoreProvider implements
73
ResourceConsumer {
74
        public static String NAME = "GPEStore";
75
        public static String DESCRIPTION = "GPE file";
76
        private static final String DYNCLASS_NAME = "GPEStore";
77
        protected static DynClass DYNCLASS = null;
78
        private GPEStoreParameters gpeParams;
79
        private File m_Fich;
80
        private ResourceProvider gpeResource;
81
        private boolean isOpen = false;
82
        private GPEParser parser = null;
83

    
84
        public GPEStoreProvider() {
85
                super();                        
86
        }
87

    
88
        public GPEStoreProvider(DataParameters params)
89
        throws InitializeException {
90
                this();
91
                this.gpeParams = (GPEStoreParameters) params;
92
                this.dynObject = (DelegatedDynObject) ToolsLocator
93
                .getDynObjectManager().createDynObject(DYNCLASS);
94

    
95
                this.dynObject.setDynValue("DefaultSRS", null);
96
                this.dynObject.setDynValue("Envelope", null);
97

    
98
                m_Fich = getGPEParameters().getFile();
99
                gpeResource = this.createResource(FileResource.NAME,
100
                                new Object[] { m_Fich.getAbsolutePath() });
101
                gpeResource.addConsumer(this);
102
        }
103

    
104
        /*
105
         * (non-Javadoc)
106
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#initialize(org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices)
107
         */
108
        public FeatureStoreProvider initialize(FeatureStoreProviderServices store) throws InitializeException{
109
                super.initialize(store);
110
                this.initFeatureType();
111
                return this;
112
        }
113

    
114
        protected void initFeatureType() throws InitializeException {
115
                try {
116
                        this.open();                        
117
                } catch (DataException e) {
118
                        throw new InitializeException(this.getName(), e);
119
                }                
120
        }        
121

    
122
        private GPEStoreParameters getGPEParameters() {
123
                return this.gpeParams;
124
        }
125

    
126
        /* (non-Javadoc)
127
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getExplorer()
128
         */
129
        public DataServerExplorer getExplorer() throws ReadException {
130
                // TODO Auto-generated method stub
131
                return null;
132
        }
133

    
134
        /* (non-Javadoc)
135
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#performEditing(java.util.Iterator, java.util.Iterator, java.util.Iterator)
136
         */
137
        public void performEditing(Iterator deleteds, Iterator inserteds,
138
                        Iterator updateds) throws PerformEditingException {
139
                // TODO Auto-generated method stub
140

    
141
        }
142

    
143
        /* (non-Javadoc)
144
         * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#closeResourceRequested(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
145
         */
146
        public boolean closeResourceRequested(ResourceProvider resource) {
147
                // TODO Auto-generated method stub
148
                return false;
149
        }
150

    
151
        /* (non-Javadoc)
152
         * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
153
         */
154
        public void resourceChanged(ResourceProvider resource) {
155
                // TODO Auto-generated method stub
156

    
157
        }
158

    
159
        /* (non-Javadoc)
160
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#append(org.gvsig.fmap.dal.feature.Feature)
161
         */
162
        public void append(Feature feature) throws DataException {
163
                // TODO Auto-generated method stub
164

    
165
        }
166

    
167
        /* (non-Javadoc)
168
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#beginAppend()
169
         */
170
        public void beginAppend() throws DataException {
171
                // TODO Auto-generated method stub
172

    
173
        }
174

    
175
        /* (non-Javadoc)
176
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#canWriteGeometry(int)
177
         */
178
        public boolean canWriteGeometry(int geometryType) throws DataException {
179
                // TODO Auto-generated method stub
180
                return false;
181
        }
182

    
183
        /* (non-Javadoc)
184
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createNewOID()
185
         */
186
        public Object createNewOID() {
187
                return ((FmapContentHandler)parser.getContentHandler()).createNewOID();
188
        }
189

    
190
        /* (non-Javadoc)
191
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery)
192
         */
193
        public FeatureSetProvider createSet(FeatureQuery query)
194
        throws DataException {
195
                return new GPESetProvider(this, query);
196
        }
197

    
198
        /* (non-Javadoc)
199
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#endAppend()
200
         */
201
        public void endAppend() throws DataException {
202
                // TODO Auto-generated method stub
203

    
204
        }
205

    
206
        /* (non-Javadoc)
207
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureDataByReference(org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices)
208
         */
209
        public FeatureData getFeatureDataByReference(
210
                        FeatureReferenceProviderServices reference) throws DataException {
211
                return this.getFeatureDataByReference(reference, this.store
212
                                .getDefaultFeatureType());
213
        }
214

    
215
        /* (non-Javadoc)
216
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureDataByReference(org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices, org.gvsig.fmap.dal.feature.FeatureType)
217
         */
218
        public FeatureData getFeatureDataByReference(
219
                        FeatureReferenceProviderServices reference, FeatureType featureType)
220
        throws DataException {
221
                return this.getFeatureDataByIndex((String) reference.getOID(),
222
                                featureType);
223
        }
224

    
225
        FeatureData getFeatureDataByIndex(String index, FeatureType fType)
226
        throws DataException {
227
                return ((DefaultFeature)((FmapContentHandler)parser.getContentHandler())
228
                                .getFeatureSet().get(index)).getData();
229
        }
230

    
231

    
232
        /* (non-Javadoc)
233
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureReferenceOIDType()
234
         */
235
        public int getFeatureReferenceOIDType() {
236
                // TODO Auto-generated method stub
237
                return 0;
238
        }
239

    
240
        /* (non-Javadoc)
241
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getName()
242
         */
243
        public String getName() {
244
                return NAME;
245
        }
246

    
247
        /* (non-Javadoc)
248
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#supportsAppendMode()
249
         */
250
        public boolean supportsAppendMode() {
251
                // TODO Auto-generated method stub
252
                return false;
253
        }
254

    
255
        /* (non-Javadoc)
256
         * @see org.gvsig.tools.persistence.Persistent#getState()
257
         */
258
        public PersistentState getState() throws PersistenceException {
259
                // TODO Auto-generated method stub
260
                return null;
261
        }
262

    
263
        /* (non-Javadoc)
264
         * @see org.gvsig.tools.persistence.Persistent#loadState(org.gvsig.tools.persistence.PersistentState)
265
         */
266
        public void loadState(PersistentState state) throws PersistenceException {
267
                // TODO Auto-generated method stub
268

    
269
        }
270

    
271
        /* (non-Javadoc)
272
         * @see org.gvsig.tools.persistence.Persistent#setState(org.gvsig.tools.persistence.PersistentState)
273
         */
274
        public void setState(PersistentState state) throws PersistenceException {
275
                // TODO Auto-generated method stub
276

    
277
        }
278

    
279
        /* (non-Javadoc)
280
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getChilds()
281
         */
282
        public Iterator getChilds() {
283
                // TODO Auto-generated method stub
284
                return null;
285
        }
286

    
287
        /* (non-Javadoc)
288
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getSourceId()
289
         */
290
        public Object getSourceId() {
291
                // TODO Auto-generated method stub
292
                return null;
293
        }
294

    
295
        /* (non-Javadoc)
296
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#open()
297
         */
298
        public void open() throws OpenException {
299
                if (isOpen) {
300
                        return;
301
                }
302
                try {
303
                        parser = GPERegister.createParser(m_Fich.toURI());
304
                        GPEErrorHandler errorHandler = new FmapErrorHandler();
305
                        parser.parse(new FmapContentHandler(errorHandler, store, this) , 
306
                                        errorHandler, 
307
                                        m_Fich.toURI());
308
                } catch (Exception e) {
309
                        throw new OpenException("Imposible create a parser",e);
310
                }                
311
        }
312

    
313
        protected static void registerDynClass() {
314
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
315
                DynClass dynClass;
316
                DynField field;
317
                if (DYNCLASS == null) {
318

    
319
                        dynClass = dynman.add(DYNCLASS_NAME);
320

    
321
                        // The SHP store parameters extend the DBF store parameters
322
                        dynClass.extend(dynman.get(FeatureStore.DYNCLASS_NAME));
323

    
324
                        DYNCLASS = dynClass;
325
                }
326

    
327
        }
328

    
329
        /* (non-Javadoc)
330
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery, org.gvsig.fmap.dal.feature.FeatureType)
331
         */
332
        public FeatureSetProvider createSet(FeatureQuery query,
333
                        FeatureType featureType) throws DataException {
334
                return new GPESetProvider(this, query, featureType);
335
        }
336

    
337
        /**
338
         * @return
339
         */
340
        public int getFeatureCount() {
341
                FmapContentHandler handler = (FmapContentHandler)parser.getContentHandler();
342
                return handler.getFeaturesCount();
343
        }        
344

    
345
        /**
346
         * @return the parser
347
         */
348
        public GPEParser getParser() {
349
                return parser;
350
        }
351

    
352
        /* (non-Javadoc)
353
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getEnvelope()
354
         */        
355
        public Envelope getEnvelope() throws DataException {
356
                this.open();
357
                return (Envelope) this.dynObject.getDynValue("Envelope");
358
        }
359

    
360
        public void setEnvelope(Envelope envelope) {
361
                this.dynObject.setDynValue("Envelope", envelope);                
362
        }
363
        
364
        
365
}
366