Statistics
| Revision:

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

History | View | Annotate | Download (11.1 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.gml.parser.GPEGmlSFP0Parser;
58
import org.gvsig.gpe.parser.GPEErrorHandler;
59
import org.gvsig.gpe.parser.GPEParser;
60
import org.gvsig.tools.ToolsLocator;
61
import org.gvsig.tools.dynobject.DelegatedDynObject;
62
import org.gvsig.tools.dynobject.DynClass;
63
import org.gvsig.tools.dynobject.DynField;
64
import org.gvsig.tools.dynobject.DynObjectManager;
65
import org.gvsig.tools.persistence.PersistenceException;
66
import org.gvsig.tools.persistence.PersistentState;
67

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

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

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

    
94
                this.dynObject.setDynValue("Envelope", null);
95

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

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

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

    
120
        private GPEStoreParameters getGPEParameters() {
121
                return this.gpeParams;
122
        }
123

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

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

    
139
        }
140

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

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

    
155
        }
156

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

    
163
        }
164

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

    
171
        }
172

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

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

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

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

    
202
        }
203

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

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

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

    
229

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

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

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

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

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

    
267
        }
268

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

    
275
        }
276

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

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

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

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

    
318
                        dynClass = dynman.add(DYNCLASS_NAME);
319

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

    
323
                        DYNCLASS = dynClass;
324
                }
325

    
326
        }
327

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

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

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

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

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