Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extGPE-gvSIG / src / org / gvsig / fmap / drivers / gpe / handlers / DefaultFmapContentHandler.java @ 27067

History | View | Annotate | Download (13.9 KB)

1
package org.gvsig.fmap.drivers.gpe.handlers;
2

    
3
import java.io.IOException;
4

    
5
import org.gvsig.fmap.drivers.gpe.exceptions.CurveConversionWarning;
6
import org.gvsig.fmap.drivers.gpe.exceptions.NotMultipleLayerWarning;
7
import org.gvsig.fmap.drivers.gpe.model.GPEBBox;
8
import org.gvsig.fmap.drivers.gpe.model.GPECurve;
9
import org.gvsig.fmap.drivers.gpe.model.GPEElement;
10
import org.gvsig.fmap.drivers.gpe.model.GPEFeature;
11
import org.gvsig.fmap.drivers.gpe.model.GPEGeometry;
12
import org.gvsig.fmap.drivers.gpe.model.GPEMultiGeometry;
13
import org.gvsig.fmap.drivers.gpe.model.GPEMultiLineGeometry;
14
import org.gvsig.fmap.drivers.gpe.model.GPEMultiPointGeometry;
15
import org.gvsig.fmap.drivers.gpe.model.GPEMultiPolygonGeometry;
16
import org.gvsig.fmap.drivers.gpe.reader.AddFeatureToDriver;
17
import org.gvsig.fmap.drivers.gpe.reader.GPEVectorialDriver;
18
import org.gvsig.fmap.drivers.gpe.reader.IGPEDriver;
19
import org.gvsig.fmap.drivers.gpe.reader.KMLVectorialDriver;
20
import org.gvsig.fmap.drivers.gpe.utils.GPETypesConversion;
21
import org.gvsig.gpe.parser.GPEContentHandler;
22
import org.gvsig.gpe.parser.GPEErrorHandler;
23
import org.gvsig.gpe.parser.ICoordinateIterator;
24

    
25
import com.hardcode.gdbms.engine.values.ValueFactory;
26
import com.iver.cit.gvsig.fmap.core.GeneralPathX;
27
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
28
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
29
 *
30
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
31
 *
32
 * This program is free software; you can redistribute it and/or
33
 * modify it under the terms of the GNU General Public License
34
 * as published by the Free Software Foundation; either version 2
35
 * of the License, or (at your option) any later version.
36
 *
37
 * This program is distributed in the hope that it will be useful,
38
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
39
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
40
 * GNU General Public License for more details.
41
 *
42
 * You should have received a copy of the GNU General Public License
43
 * along with this program; if not, write to the Free Software
44
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
45
 *
46
 * For more information, contact:
47
 *
48
 *  Generalitat Valenciana
49
 *   Conselleria d'Infraestructures i Transport
50
 *   Av. Blasco Ib??ez, 50
51
 *   46010 VALENCIA
52
 *   SPAIN
53
 *
54
 *      +34 963862235
55
 *   gvsig@gva.es
56
 *      www.gvsig.gva.es
57
 *
58
 *    or
59
 *
60
 *   IVER T.I. S.A
61
 *   Salamanca 50
62
 *   46005 Valencia
63
 *   Spain
64
 *
65
 *   +34 963163400
66
 *   dac@iver.es
67
 */
68
/* CVS MESSAGES:
69
 *
70
 * $Id$
71
 * $Log$
72
 *
73
 */
74
/**
75
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
76
 */
77
public abstract class DefaultFmapContentHandler extends GPEContentHandler {
78
        protected AddFeatureToDriver addFeature = null;
79
        private int features = 0;
80
        private boolean hasLayer = false;
81
        private IGPEDriver driver = null;
82

    
83
        public DefaultFmapContentHandler(GPEErrorHandler errorHandler,
84
                        IGPEDriver driver) {
85
                super();                
86
                setErrorHandler(errorHandler);
87
                this.driver = driver;
88
                GPEFeature.initIdFeature();
89
        }
90

    
91
        
92
        
93
        /* (non-Javadoc)
94
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object)
95
         */        
96
        public Object startLayer(String id, String namespace, String name,
97
                        String description, String srs, Object parentLayer, Object box) {
98
                //Only one layer is supported
99
                if (hasLayer == false){
100
                        hasLayer = true;
101
                        addFeature = new AddFeatureToDriver();
102
                        //addFeature.setSchema(getSchemaDocument());
103
                }else{
104
                        getErrorHandler().addWarning(new NotMultipleLayerWarning());
105
                        //TODO patch to support multilayer on KML
106
                        if (driver.getName().equals(KMLVectorialDriver.DRIVERNAME)){
107
                                return driver;
108
                        }
109
                        return null;
110
                }                        
111
                return driver;
112
        }
113

    
114
        /*
115
         * (non-Javadoc)
116
         * @see org.gvsig.gpe.IGPEContentHandler#endLayer(java.lang.Object)
117
         */
118
        public void endLayer(Object layer) {
119
                IGPEDriver gpeDriver = (IGPEDriver)layer;
120
        }
121

    
122
        /*
123
         * (non-Javadoc)
124
         * @see org.gvsig.gpe.parser.GPEContentHandler#startPoint(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
125
         */
126
        public Object startPoint(String id, ICoordinateIterator coords, String srs) {
127
                double[] buffer = new double[coords.getDimension()];
128
                double y = 0.0;
129
                try {
130
                        coords.hasNext();
131
                        coords.next(buffer);
132
                        return new GPEGeometry(id, ShapeFactory.createPoint2D(buffer[0], buffer[1]), srs);
133
                } catch (IOException e) {
134
                        getErrorHandler().addError(e);
135
                }
136
                return null;
137
        }
138

    
139
        /* (non-Javadoc)
140
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLineString(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
141
         */
142
        public Object startLineString(String id, ICoordinateIterator coords,
143
                        String srs) {
144
                GeneralPathX gp = new GeneralPathX();
145
                double[] buffer = new double[coords.getDimension()];
146
                try {
147
                        while(coords.hasNext()){
148
                                coords.next(buffer);
149
                                gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true);
150
                        }
151
                } catch (IOException e) {
152
                        getErrorHandler().addError(e);
153
                }                
154
                return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs);
155
        }
156

    
157
        /* (non-Javadoc)
158
         * @see org.gvsig.gpe.parser.GPEContentHandler#startPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
159
         */
160
        
161
        public Object startPolygon(String id, ICoordinateIterator coords, String srs) {
162
                GeneralPathX gp = new GeneralPathX();
163
                double[] buffer = new double[coords.getDimension()];
164
                try {
165
                        while(coords.hasNext()){
166
                                coords.next(buffer);
167
                                gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true);
168
                        }
169
                } catch (IOException e) {
170
                        getErrorHandler().addError(e);
171
                }                
172
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs);
173
        }
174
        
175
        /* (non-Javadoc)
176
         * @see org.gvsig.gpe.parser.GPEContentHandler#startInnerPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
177
         */        
178
        public Object startInnerPolygon(String id, ICoordinateIterator coords,
179
                        String srs) {
180
                GeneralPathX gp = new GeneralPathX();
181
                double[] buffer = new double[coords.getDimension()];
182
                try {
183
                        while(coords.hasNext()){
184
                                coords.next(buffer);
185
                                gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true);
186
                        }
187
                } catch (IOException e) {
188
                        getErrorHandler().addError(e);
189
                }                
190
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs);
191
        }
192
        
193
        
194

    
195
        /*
196
         * (non-Javadoc)
197
         * @see org.gvsig.gpe.IGPEContentHandler#addGeometryToFeature(java.lang.Object, java.lang.Object)
198
         */
199
        public void addGeometryToFeature(Object geometry, Object feature) {
200
                ((GPEFeature)feature).setGeometry((GPEGeometry)geometry);
201
        }        
202

    
203
        /*
204
         * (non-Javadoc)
205
         * @see org.gvsig.gpe.IGPEContentHandler#addBboxToLayer(java.lang.Object, java.lang.Object)
206
         */
207
        public void addBboxToLayer(Object bbox, Object layer) {
208
//                if (layer != null){
209
//                GPEBBox gpeBBox = (GPEBBox)bbox;
210
//                if (gpeBBox.getSrs() != null){
211
//                IProjection projection = null;
212
//                try{
213
//                CRSFactory.getCRS(gpeBBox.getSrs());
214
//                }catch(Exception e){
215
//                //If the CRS factory has an error.
216
//                }
217
//                if ((projection != null) && (!(projection.equals(((FLayer)layer).getProjection())))){
218
//                //TODO reproyectar la bbox y asignarsela a la capa                                
219
//                }
220
//                }
221
//                ((IGPEDriver)layer).setExtent(gpeBBox.getBbox2D());
222
//                }
223
        }
224

    
225
        /*
226
         * (non-Javadoc)
227
         * @see org.gvsig.gpe.IGPEContentHandler#addElementToFeature(java.lang.Object, java.lang.Object)
228
         */
229
        public void addElementToFeature(Object element, Object feature) {
230
                ((GPEFeature)feature).addElement((GPEElement)element);
231
        }
232

    
233
        /*
234
         * (non-Javadoc)
235
         * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
236
         */
237
        public int k = 0;
238
        public void addFeatureToLayer(Object feature, Object layer) {
239
                //If it is null is a multilayer: not supported yet
240
                k = k + 1;
241
                System.out.println(k);
242
                if (layer != null){
243
                        addFeature.addFeatureToLayer((GPEVectorialDriver)layer,
244
                                        (GPEFeature)feature);
245
                }
246
        }
247

    
248
        /*
249
         * (non-Javadoc)
250
         * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
251
         */
252
        public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) {
253
                ((GPEGeometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
254
        }
255

    
256
        /*
257
         * (non-Javadoc)
258
         * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
259
         */
260
        public void addNameToFeature(String name, Object feature) {
261

    
262
        }
263

    
264
        /*
265
         * (non-Javadoc)
266
         * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
267
         */
268
        public void addParentElementToElement(Object parent, Object element) {
269

    
270
        }
271

    
272
        /*
273
         * (non-Javadoc)
274
         * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
275
         */
276
        public void addSrsToLayer(String srs, Object Layer) {
277
//                this.srs = srs; 
278
        }
279

    
280

    
281
        /* (non-Javadoc)
282
         * @see org.gvsig.gpe.parser.GPEContentHandler#startBbox(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
283
         */        
284
        public Object startBbox(String id, ICoordinateIterator coords, String srs) {
285
                return new GPEBBox(id,coords,srs);                
286
        }        
287
        
288
        /* (non-Javadoc)
289
         * @see org.gvsig.gpe.parser.GPEContentHandler#startElement(java.lang.String, java.lang.String, java.lang.Object, java.lang.Object)
290
         */
291
        public Object startElement(String namespace, String name, Object value,
292
                        Object parentElement) {
293
                return new GPEElement(name, GPETypesConversion.fromJavaTogvSIG(value), (GPEElement)parentElement);
294
        }
295

    
296
        /*
297
         * (non-Javadoc)
298
         * @see org.gvsig.gpe.IGPEContentHandler#startFeature(java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
299
         */
300
        public Object startFeature(String id, String name, String xsElementName, Object layer) {
301
                
302
                return new GPEFeature(ValueFactory.createValue(id),
303
                                name, xsElementName);
304
        }
305
        
306
        /* (non-Javadoc)
307
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLinearRing(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
308
         */        
309
        public Object startLinearRing(String id, ICoordinateIterator coords,
310
                        String srs) {
311
                GeneralPathX gp = new GeneralPathX();
312
                double[] buffer = new double[coords.getDimension()];
313
                try {
314
                        while(coords.hasNext()){
315
                                coords.next(buffer);
316
                                gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true);
317
                        }
318
                } catch (IOException e) {
319
                        getErrorHandler().addError(e);
320
                }                
321
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs);
322
        }
323

    
324

    
325
        /*
326
         * (non-Javadoc)
327
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
328
         */
329
        public Object startMultiPoint(String id, String srs) {
330
                return new GPEMultiPointGeometry(id, srs);
331
        }
332

    
333
        /*
334
         * (non-Javadoc)
335
         * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
336
         */
337
        public void addPointToMultiPoint(Object point, Object multiPoint) {
338
                ((GPEMultiGeometry)multiPoint).addGeometry((GPEGeometry)point);
339
        }
340

    
341
        /*
342
         * (non-Javadoc)
343
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
344
         */
345
        public Object startMultiLineString(String id, String srs) {
346
                super.startMultiLineString(id, srs);
347
                return new GPEMultiLineGeometry(id, srs);
348
        }
349

    
350
        /*
351
         * (non-Javadoc)
352
         * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
353
         */
354
        public void addLineStringToMultiLineString(Object lineString, Object multiLineString) {
355
                ((GPEMultiGeometry)multiLineString).addGeometry((GPEGeometry)lineString);
356
        }
357

    
358
        /*
359
         * (non-Javadoc)
360
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
361
         */
362
        public Object startMultiPolygon(String id, String srs) {
363
                super.startMultiPolygon(id, srs);
364
                return new GPEMultiPolygonGeometry(id,srs);
365
        }
366

    
367
        /*
368
         * (non-Javadoc)
369
         * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
370
         */
371
        public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) {
372
                ((GPEMultiGeometry)multiPolygon).addGeometry((GPEGeometry)polygon);
373
        }                
374

    
375
        /* (non-Javadoc)
376
         * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
377
         */
378
        public void addCurveToMultiCurve(Object curve, Object multiCurve) {
379
                ((GPEMultiGeometry)multiCurve).addGeometry((GPEGeometry)curve);
380
        }
381

    
382
        /* (non-Javadoc)
383
         * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
384
         */
385
        public void addSegmentToCurve(Object segment, Object curve) {
386
                ((GPECurve)curve).addSegment((GPEGeometry)segment);                
387
        }
388

    
389
        /* (non-Javadoc)
390
         * @see org.gvsig.gpe.parser.GPEContentHandler#startCurve(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
391
         */
392
        public Object startCurve(String id, ICoordinateIterator coords, String srs) {
393
                getErrorHandler().addWarning(new CurveConversionWarning(id));
394
                GeneralPathX gp = new GeneralPathX();
395
                double[] buffer = new double[coords.getDimension()];
396
                try {
397
                        while(coords.hasNext()){
398
                                coords.next(buffer);
399
                                gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true);
400
                        }
401
                } catch (IOException e) {
402
                        getErrorHandler().addError(e);
403
                }                
404
                return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs);
405
        }
406

    
407
        /* (non-Javadoc)
408
         * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
409
         */
410
        public Object startCurve(String id, String srs) {
411
                getErrorHandler().addWarning(new CurveConversionWarning(id));
412
                return new GPECurve(id, srs);
413
        }
414

    
415
        /* (non-Javadoc)
416
         * @see org.gvsig.gpe.GPEContentHandler#startMultiCurve(java.lang.String, java.lang.String)
417
         */
418
        public Object startMultiCurve(String id, String srs) {
419
                return new GPEMultiLineGeometry(id, srs);                
420
        }
421

    
422
        /* (non-Javadoc)
423
         * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
424
         */
425
        public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) {
426
                ((GPEMultiGeometry)multiGeometry).addGeometry((GPEGeometry)geometry);
427
        }
428

    
429
        /* (non-Javadoc)
430
         * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
431
         */
432
        public Object startMultiGeometry(String id, String srs) {
433
                return new GPEMultiGeometry(id, srs);
434
        }
435

    
436
}