Statistics
| Revision:

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

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.Map;
32

    
33
import org.cresques.cts.IProjection;
34

    
35
import org.gvsig.fmap.dal.DALLocator;
36
import org.gvsig.fmap.dal.DataManager;
37
import org.gvsig.fmap.dal.DataServerExplorer;
38
import org.gvsig.fmap.dal.DataStoreParameters;
39
import org.gvsig.fmap.dal.DataTypes;
40
import org.gvsig.fmap.dal.FileHelper;
41
import org.gvsig.fmap.dal.exception.DataException;
42
import org.gvsig.fmap.dal.exception.InitializeException;
43
import org.gvsig.fmap.dal.exception.OpenException;
44
import org.gvsig.fmap.dal.exception.ReadException;
45
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
46
import org.gvsig.fmap.dal.feature.FeatureQuery;
47
import org.gvsig.fmap.dal.feature.FeatureType;
48
import org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider;
49
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
50
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
51
import org.gvsig.fmap.dal.feature.spi.FeatureSetProvider;
52
import org.gvsig.fmap.dal.resource.exception.ResourceExecuteException;
53
import org.gvsig.fmap.dal.resource.file.FileResource;
54
import org.gvsig.fmap.dal.resource.spi.ResourceConsumer;
55
import org.gvsig.fmap.dal.resource.spi.ResourceProvider;
56
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
57
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
58
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
59
import org.gvsig.fmap.dal.store.gpe.handlers.FmapContentHandler;
60
import org.gvsig.fmap.dal.store.gpe.handlers.FmapErrorHandler;
61
import org.gvsig.fmap.geom.Geometry.TYPES;
62
import org.gvsig.fmap.geom.primitive.Envelope;
63
import org.gvsig.gpe.lib.api.GPELocator;
64
import org.gvsig.gpe.lib.api.GPEManager;
65
import org.gvsig.tools.dynobject.DynObject;
66
import org.gvsig.xmlschema.lib.api.XMLSchemaLocator;
67
import org.gvsig.xmlschema.lib.api.XMLSchemaManager;
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 final String NAME = "GPE";
75
    public static final String DESCRIPTION = "GPE file";
76
    public static final String METADATA_DEFINITION_NAME = NAME;
77

    
78
    protected File m_Fich;
79
    protected boolean isOpen = false;
80
    //private GPEStoreParameters gpeParams;
81
    private ResourceProvider gpeResource;
82

    
83
    //Managers to manage the parsing process
84
    protected GPEManager gpeManager = null;
85
    protected XMLSchemaManager xmlSchemaManager = null;
86

    
87
    //The content handler and the error handler
88
    protected FmapContentHandler contentHandler;
89
    protected FmapErrorHandler errorHandler;
90

    
91
    public GPEStoreProvider(DataStoreParameters params,
92
        DataStoreProviderServices storeServices)
93
    throws InitializeException {
94
        this(params, storeServices, FileHelper
95
            .newMetadataContainer(METADATA_DEFINITION_NAME));
96
    }   
97

    
98
    protected GPEStoreProvider(DataStoreParameters params,
99
        DataStoreProviderServices storeServices, DynObject metadata)
100
    throws InitializeException {
101

    
102
        super(params, storeServices, metadata);
103

    
104
        this.setDynValue("Envelope", params.getDynValue("Envelope"));
105

    
106
        gpeManager = GPELocator.getGPEManager();
107
        xmlSchemaManager = XMLSchemaLocator.getXMLSchemaManager();                
108

    
109
        retrieveFile();
110
        gpeResource = this.createResource(FileResource.NAME,
111
            new Object[] { m_Fich.getAbsolutePath() });
112
        gpeResource.addConsumer(this);
113
        this.initFeatureType();
114
    }
115

    
116
    protected void retrieveFile() throws InitializeException{
117
        m_Fich = getGPEParameters().getFile();
118
    }
119

    
120
    protected void initFeatureType() throws InitializeException {
121
        try {
122

    
123
            this.open();
124
        } catch (DataException e) {
125
            throw new InitializeException(this.getProviderName(), e);
126
        }
127
    }
128

    
129
    private GPEStoreParameters getGPEParameters() {
130
        return (GPEStoreParameters) this.getParameters();
131
    }
132

    
133
    /* (non-Javadoc)
134
     * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#closeResourceRequested(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
135
     */
136
    public boolean closeResourceRequested(ResourceProvider resource) {
137
        // TODO Auto-generated method stub
138
        return false;
139
    }
140

    
141
    /* (non-Javadoc)
142
     * @see org.gvsig.fmap.dal.resource.spi.ResourceConsumer#resourceChanged(org.gvsig.fmap.dal.resource.spi.ResourceProvider)
143
     */
144
    public void resourceChanged(ResourceProvider resource) {
145
        // TODO Auto-generated method stub
146

    
147
    }
148

    
149
    /* (non-Javadoc)
150
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#canWriteGeometry(int)
151
     */
152
    public boolean canWriteGeometry(int geometryType, int geometrySubtype)
153
    throws DataException {
154
        // TODO Auto-generated method stub
155
        return false;
156
    }
157

    
158
    /* (non-Javadoc)
159
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createNewOID()
160
     */
161
    public Object createNewOID() {
162
        return contentHandler.createNewOID();
163
    }
164

    
165
    /* (non-Javadoc)
166
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery)
167
     */
168
    public FeatureSetProvider createSet(FeatureQuery query)
169
    throws DataException {
170
        return new GPESetProvider(this, query);
171
    }
172

    
173
    protected FeatureProvider internalGetFeatureProviderByReference(
174
        FeatureReferenceProviderServices reference) throws DataException {
175
        return internalGetFeatureProviderByReference(reference,
176
            this
177
            .getFeatureStore()
178
            .getDefaultFeatureType());
179
    }
180

    
181
    public FeatureProvider internalGetFeatureProviderByReference(
182
        FeatureReferenceProviderServices reference, FeatureType featureType)
183
    throws DataException {
184
        Map featureSet = contentHandler.getFeatureSet();
185
        if (featureSet.containsKey(reference.getOID())){
186
            return (FeatureProvider)featureSet.get(reference.getOID());
187
        }
188
        return null;
189
    }
190

    
191
    FeatureProvider getFeatureProviderByIndex(Long index, FeatureType fType)
192
    throws DataException {
193
        Map featureSet = contentHandler.getFeatureSet();
194
        if (featureSet.containsKey(index)){
195
            return (FeatureProvider)featureSet.get(index);
196
        }        
197
        return null;
198
    }
199

    
200
    public void resourcesBegin() throws ResourceExecuteException {
201
        // Nothing to do
202
    }
203

    
204
    public void resourcesEnd() {
205
        // Nothing to do
206
    }
207

    
208
    /* (non-Javadoc)
209
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getFeatureReferenceOIDType()
210
     */
211
    public int getOIDType() {
212
        return DataTypes.STRING;
213
    }
214

    
215
    /* (non-Javadoc)
216
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#getName()
217
     */
218
    public String getProviderName() {
219
        return NAME;
220
    }
221

    
222
    /* (non-Javadoc)
223
     * @see org.gvsig.fmap.dal.spi.DataStoreProvider#getSourceId()
224
     */
225
    public Object getSourceId() {
226
        return getGPEParameters().getFile();
227
    }
228

    
229
    public String getName() {
230
        String name = this.getGPEParameters().getFile().getName();
231
        int n = name.lastIndexOf(".");
232
        if( n<1 ) {
233
            return name;
234
        }
235
        return name.substring(0, n);
236
    }
237

    
238
    public String getFullName() {
239
        return this.getGPEParameters().getFile().getAbsolutePath();
240
    }
241

    
242
    /* (non-Javadoc)
243
     * @see org.gvsig.fmap.dal.spi.DataStoreProvider#open()
244
     */
245
    public void open() throws OpenException {
246
        if (isOpen) {
247
            return;
248
        }
249
        try {
250
            errorHandler = new FmapErrorHandler();
251
            contentHandler = new FmapContentHandler(errorHandler,
252
                getStoreServices(), this, m_Fich,
253
                getSRS(),
254
                getGeometryType());
255
            if (getStoreServices().getDefaultFeatureType() != null){
256
                contentHandler.setFeatureType(getStoreServices().getDefaultFeatureType().getEditable());
257
            }
258
            contentHandler.setEnvelope((Envelope)getDynValue("Envelope"));
259
            isOpen = true;
260
            gpeManager.parse(contentHandler, errorHandler, m_Fich.toURI());                        
261
        } catch (Exception e) {
262
            throw new OpenException("Imposible create a parser",e);
263
        }
264
    }
265

    
266
    protected IProjection getSRS(){
267
        return getGPEParameters().getCRS();
268
    }        
269

    
270
    protected int getGeometryType() {
271
        return TYPES.GEOMETRY;
272
    }
273

    
274
    /* (non-Javadoc)
275
     * @see org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider#createSet(org.gvsig.fmap.dal.feature.FeatureQuery, org.gvsig.fmap.dal.feature.FeatureType)
276
     */
277
    public FeatureSetProvider createSet(FeatureQuery query,
278
        FeatureType featureType) throws DataException {
279
        return new GPESetProvider(this, query, featureType);
280
    }
281

    
282
    public long getFeatureCount() throws DataException {                
283
        return contentHandler.getFeaturesCount();
284
    }
285

    
286
    /* (non-Javadoc)
287
     * @see org.gvsig.fmap.dal.feature.spi.AbstractFeatureStoreProvider#getEnvelope()
288
     */
289
    public Envelope getEnvelope() throws DataException {
290
        this.open();
291
        return (Envelope) this.getDynValue("Envelope");
292
    }
293

    
294
    public void setEnvelope(Envelope envelope) {
295
        this.setDynValue("Envelope", envelope);
296
    }
297

    
298
    public ResourceProvider getResource() {
299
        return gpeResource;
300
    }
301

    
302
    public DataServerExplorer getExplorer() throws ReadException,
303
    ValidateDataParametersException {
304
        DataManager manager = DALLocator.getDataManager();
305
        FilesystemServerExplorerParameters params;
306
        try {
307
            params = (FilesystemServerExplorerParameters) manager
308
            .createServerExplorerParameters(FilesystemServerExplorer.NAME);
309
            params.setRoot(this.getGPEParameters().getFile().getParent());
310
            return manager.createServerExplorer(params);
311
        } catch (DataException e) {
312
            throw new ReadException(this.getProviderName(), e);
313
        } catch (ValidateDataParametersException e) {
314
            // TODO Auto-generated catch block
315
            throw new ReadException(this.getProviderName(), e);
316
        }
317
    }
318

    
319
    /**
320
     * @return the contentHandler
321
     */
322
    public FmapContentHandler getContentHandler() {
323
        return contentHandler;
324
    }
325

    
326
    /**
327
     * @return the errorHandler
328
     */
329
    public FmapErrorHandler getErrorHandler() {
330
        return errorHandler;
331
    }
332

    
333
}