Statistics
| Revision:

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

History | View | Annotate | Download (10.6 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.*;
36
import org.gvsig.fmap.dal.feature.*;
37
import org.gvsig.fmap.dal.feature.exception.PerformEditingException;
38
import org.gvsig.fmap.dal.feature.impl.DefaultFeature;
39
import org.gvsig.fmap.dal.feature.spi.*;
40
import org.gvsig.fmap.dal.resource.file.FileResource;
41
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
42
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
43
import org.gvsig.fmap.dal.store.gpe.handlers.FmapContentHandler;
44
import org.gvsig.fmap.dal.store.gpe.handlers.FmapErrorHandler;
45
import org.gvsig.fmap.geom.primitive.Envelope;
46
import org.gvsig.gpe.gml.parser.GPEGmlSFP0Parser;
47
import org.gvsig.gpe.parser.GPEErrorHandler;
48
import org.gvsig.gpe.parser.GPEParser;
49
import org.gvsig.tools.ToolsLocator;
50
import org.gvsig.tools.dynobject.*;
51
import org.gvsig.tools.persistence.PersistenceException;
52
import org.gvsig.tools.persistence.PersistentState;
53

    
54
/**
55
 * @author <a href="mailto:jpiera@gvsig.org">Jorge Piera</a>
56
 */
57
public class GPEStoreProvider extends AbstractFeatureStoreProvider implements
58
ResourceConsumer {
59
        public static String NAME = "GPEStore";
60
        public static String DESCRIPTION = "GPE file";
61
        private static final String DYNCLASS_NAME = "GPEStore";
62
        protected static DynClass DYNCLASS = null;
63
        private GPEStoreParameters gpeParams;
64
        protected File m_Fich;
65
        private ResourceProvider gpeResource;
66
        private boolean isOpen = false;
67
        private GPEParser parser = null;
68

    
69
        public GPEStoreProvider() {
70
                super();                        
71
        }
72

    
73
        public GPEStoreProvider(DataParameters params)
74
        throws InitializeException {
75
                this();
76
                this.gpeParams = (GPEStoreParameters) params;
77
                this.dynObject = (DelegatedDynObject) ToolsLocator
78
                .getDynObjectManager().createDynObject(DYNCLASS);
79

    
80
                this.dynObject.setDynValue("Envelope", null);
81

    
82
                m_Fich = getGPEParameters().getFile();
83
                gpeResource = this.createResource(FileResource.NAME,
84
                                new Object[] { m_Fich.getAbsolutePath() });
85
                gpeResource.addConsumer(this);
86
        }
87

    
88
        /*
89
         * (non-Javadoc)
90
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#initialize(org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices)
91
         */
92
        public FeatureStoreProvider initialize(FeatureStoreProviderServices store) throws InitializeException{
93
                super.initialize(store);
94
                this.initFeatureType();
95
                return this;
96
        }
97

    
98
        protected void initFeatureType() throws InitializeException {
99
                try {
100
                        this.open();                        
101
                } catch (DataException e) {
102
                        throw new InitializeException(this.getName(), e);
103
                }                
104
        }        
105

    
106
        private GPEStoreParameters getGPEParameters() {
107
                return this.gpeParams;
108
        }
109

    
110
        /* (non-Javadoc)
111
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getExplorer()
112
         */
113
        public DataServerExplorer getExplorer() throws ReadException {
114
                // TODO Auto-generated method stub
115
                return null;
116
        }
117

    
118
        /* (non-Javadoc)
119
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#performEditing(java.util.Iterator, java.util.Iterator, java.util.Iterator)
120
         */
121
        public void performEditing(Iterator deleteds, Iterator inserteds,
122
                        Iterator updateds) throws PerformEditingException {
123
                // TODO Auto-generated method stub
124

    
125
        }
126

    
127
        /* (non-Javadoc)
128
         * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#closeResourceRequested(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
129
         */
130
        public boolean closeResourceRequested(ResourceProvider resource) {
131
                // TODO Auto-generated method stub
132
                return false;
133
        }
134

    
135
        /* (non-Javadoc)
136
         * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
137
         */
138
        public void resourceChanged(ResourceProvider resource) {
139
                // TODO Auto-generated method stub
140

    
141
        }
142

    
143
        /* (non-Javadoc)
144
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#append(org.gvsig.fmap.dal.feature.Feature)
145
         */
146
        public void append(Feature feature) throws DataException {
147
                // TODO Auto-generated method stub
148

    
149
        }
150

    
151
        /* (non-Javadoc)
152
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#beginAppend()
153
         */
154
        public void beginAppend() throws DataException {
155
                // TODO Auto-generated method stub
156

    
157
        }
158

    
159
        /* (non-Javadoc)
160
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#canWriteGeometry(int)
161
         */
162
        public boolean canWriteGeometry(int geometryType) throws DataException {
163
                // TODO Auto-generated method stub
164
                return false;
165
        }
166

    
167
        /* (non-Javadoc)
168
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createNewOID()
169
         */
170
        public Object createNewOID() {
171
                return ((FmapContentHandler)parser.getContentHandler()).createNewOID();
172
        }
173

    
174
        /* (non-Javadoc)
175
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery)
176
         */
177
        public FeatureSetProvider createSet(FeatureQuery query)
178
        throws DataException {
179
                return new GPESetProvider(this, query);
180
        }
181

    
182
        /* (non-Javadoc)
183
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#endAppend()
184
         */
185
        public void endAppend() throws DataException {
186
                // TODO Auto-generated method stub
187

    
188
        }
189

    
190
        /* (non-Javadoc)
191
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureDataByReference(org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices)
192
         */
193
        public FeatureData getFeatureDataByReference(
194
                        FeatureReferenceProviderServices reference) throws DataException {
195
                return this.getFeatureDataByReference(reference, this.store
196
                                .getDefaultFeatureType());
197
        }
198

    
199
        /* (non-Javadoc)
200
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureDataByReference(org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices, org.gvsig.fmap.dal.feature.FeatureType)
201
         */
202
        public FeatureData getFeatureDataByReference(
203
                        FeatureReferenceProviderServices reference, FeatureType featureType)
204
        throws DataException {
205
                return this.getFeatureDataByIndex((String) reference.getOID(),
206
                                featureType);
207
        }
208

    
209
        FeatureData getFeatureDataByIndex(String index, FeatureType fType)
210
        throws DataException {
211
                return ((DefaultFeature)((FmapContentHandler)parser.getContentHandler())
212
                                .getFeatureSet().get(index)).getData();
213
        }
214

    
215

    
216
        /* (non-Javadoc)
217
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureReferenceOIDType()
218
         */
219
        public int getFeatureReferenceOIDType() {
220
                // TODO Auto-generated method stub
221
                return 0;
222
        }
223

    
224
        /* (non-Javadoc)
225
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getName()
226
         */
227
        public String getName() {
228
                return NAME;
229
        }
230

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

    
239
        /* (non-Javadoc)
240
         * @see org.gvsig.tools.persistence.Persistent#getState()
241
         */
242
        public PersistentState getState() throws PersistenceException {
243
                // TODO Auto-generated method stub
244
                return null;
245
        }
246

    
247
        /* (non-Javadoc)
248
         * @see org.gvsig.tools.persistence.Persistent#loadState(org.gvsig.tools.persistence.PersistentState)
249
         */
250
        public void loadState(PersistentState state) throws PersistenceException {
251
                // TODO Auto-generated method stub
252

    
253
        }
254

    
255
        /* (non-Javadoc)
256
         * @see org.gvsig.tools.persistence.Persistent#setState(org.gvsig.tools.persistence.PersistentState)
257
         */
258
        public void setState(PersistentState state) throws PersistenceException {
259
                // TODO Auto-generated method stub
260

    
261
        }
262

    
263
        /* (non-Javadoc)
264
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getChilds()
265
         */
266
        public Iterator getChilds() {
267
                // TODO Auto-generated method stub
268
                return null;
269
        }
270

    
271
        /* (non-Javadoc)
272
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getSourceId()
273
         */
274
        public Object getSourceId() {
275
                // TODO Auto-generated method stub
276
                return null;
277
        }
278

    
279
        /* (non-Javadoc)
280
         * @see org.gvsig.fmap.dal.spi.DataStoreProvider#open()
281
         */
282
        public void open() throws OpenException {
283
                if (isOpen) {
284
                        return;
285
                }
286
                try {
287
                        //parser = GPERegister.createParser(m_Fich.toURI());
288
                        parser = new  GPEGmlSFP0Parser();
289
                        GPEErrorHandler errorHandler = new FmapErrorHandler();
290
                        parser.parse(new FmapContentHandler(errorHandler, store, this, m_Fich) , 
291
                                        errorHandler, 
292
                                        m_Fich.toURI());
293
                } catch (Exception e) {
294
                        throw new OpenException("Imposible create a parser",e);
295
                }                
296
        }
297

    
298
        protected static void registerDynClass() {
299
                DynObjectManager dynman = ToolsLocator.getDynObjectManager();
300
                DynClass dynClass;
301
                DynField field;
302
                if (DYNCLASS == null) {
303

    
304
                        dynClass = dynman.add(DYNCLASS_NAME);
305

    
306
                        // The SHP store parameters extend the DBF store parameters
307
                        dynClass.extend(dynman.get(FeatureStore.DYNCLASS_NAME));
308

    
309
                        DYNCLASS = dynClass;
310
                }
311

    
312
        }
313

    
314
        /* (non-Javadoc)
315
         * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery, org.gvsig.fmap.dal.feature.FeatureType)
316
         */
317
        public FeatureSetProvider createSet(FeatureQuery query,
318
                        FeatureType featureType) throws DataException {
319
                return new GPESetProvider(this, query, featureType);
320
        }
321

    
322
        public long getFeatureCount() throws DataException {
323
                FmapContentHandler handler = (FmapContentHandler)parser.getContentHandler();
324
                return handler.getFeaturesCount();
325
        }        
326

    
327
        /**
328
         * @return the parser
329
         */
330
        public GPEParser getParser() {
331
                return parser;
332
        }
333

    
334
        /* (non-Javadoc)
335
         * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getEnvelope()
336
         */        
337
        public Envelope getEnvelope() throws DataException {
338
                this.open();
339
                return (Envelope) this.dynObject.getDynValue("Envelope");
340
        }
341

    
342
        public void setEnvelope(Envelope envelope) {
343
                this.dynObject.setDynValue("Envelope", envelope);                
344
        }
345

    
346
        /* (non-Javadoc)
347
         * @see org.gvsig.tools.persistence.Persistent#saveToState(org.gvsig.tools.persistence.PersistentState)
348
         */
349
        public void saveToState(PersistentState state) throws PersistenceException {
350
                // TODO Auto-generated method stub
351
                
352
        }
353
        
354
        
355
}
356