Statistics
| Revision:

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

History | View | Annotate | Download (19.9 KB)

1
package org.gvsig.fmap.dal.store.gpe.handlers;
2

    
3
import java.io.File;
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.HashMap;
7
import java.util.Iterator;
8
import java.util.List;
9
import java.util.Map;
10

    
11
import org.gvsig.fmap.dal.DataTypes;
12
import org.gvsig.fmap.dal.exception.DataException;
13
import org.gvsig.fmap.dal.feature.EditableFeatureType;
14
import org.gvsig.fmap.dal.feature.Feature;
15
import org.gvsig.fmap.dal.feature.FeatureType;
16
import org.gvsig.fmap.dal.feature.spi.FeatureData;
17
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
18
import org.gvsig.fmap.dal.store.gpe.GPEStoreProvider;
19
import org.gvsig.fmap.dal.store.gpe.model.GPEElement;
20
import org.gvsig.fmap.dal.store.gpe.model.GPEFeature;
21
import org.gvsig.fmap.dal.store.gpe.xml.XMLSchemaManager;
22
import org.gvsig.fmap.geom.Geometry;
23
import org.gvsig.fmap.geom.GeometryLocator;
24
import org.gvsig.fmap.geom.GeometryManager;
25
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
26
import org.gvsig.fmap.geom.Geometry.TYPES;
27
import org.gvsig.fmap.geom.aggregate.Aggregate;
28
import org.gvsig.fmap.geom.aggregate.MultiCurve;
29
import org.gvsig.fmap.geom.aggregate.MultiPoint;
30
import org.gvsig.fmap.geom.aggregate.MultiSurface;
31
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
32
import org.gvsig.fmap.geom.exception.CreateGeometryException;
33
import org.gvsig.fmap.geom.primitive.Curve;
34
import org.gvsig.fmap.geom.primitive.Envelope;
35
import org.gvsig.fmap.geom.primitive.GeneralPathX;
36
import org.gvsig.fmap.geom.primitive.Point;
37
import org.gvsig.fmap.geom.primitive.Surface;
38
import org.gvsig.gpe.parser.GPEContentHandler;
39
import org.gvsig.gpe.parser.GPEErrorHandler;
40
import org.gvsig.gpe.parser.IAttributesIterator;
41
import org.gvsig.gpe.parser.ICoordinateIterator;
42
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
43
 *
44
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
45
 *
46
 * This program is free software; you can redistribute it and/or
47
 * modify it under the terms of the GNU General Public License
48
 * as published by the Free Software Foundation; either version 2
49
 * of the License, or (at your option) any later version.
50
 *
51
 * This program is distributed in the hope that it will be useful,
52
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
53
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
54
 * GNU General Public License for more details.
55
 *
56
 * You should have received a copy of the GNU General Public License
57
 * along with this program; if not, write to the Free Software
58
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
59
 *
60
 * For more information, contact:
61
 *
62
 *  Generalitat Valenciana
63
 *   Conselleria d'Infraestructures i Transport
64
 *   Av. Blasco Ib??ez, 50
65
 *   46010 VALENCIA
66
 *   SPAIN
67
 *
68
 *      +34 963862235
69
 *   gvsig@gva.es
70
 *      www.gvsig.gva.es
71
 *
72
 *    or
73
 *
74
 *   IVER T.I. S.A
75
 *   Salamanca 50
76
 *   46005 Valencia
77
 *   Spain
78
 *
79
 *   +34 963163400
80
 *   dac@iver.es
81
 */
82
/* CVS MESSAGES:
83
 *
84
 * $Id$
85
 * $Log$
86
 *
87
 */
88
/**
89
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
90
 */
91
public class FmapContentHandler extends GPEContentHandler {
92
        private HashMap<String, Feature> featureSet = null;
93
        private EditableFeatureType featureType = null;
94
        private FeatureStoreProviderServices store = null;        
95
        private GPEStoreProvider storeProvider = null;
96
        private GeometryManager geomManager = GeometryLocator.getGeometryManager();
97
        private int featureId = 0;
98
        private Envelope envelope = null;
99
        private File file = null;
100
        private XMLSchemaManager schemaManager = null;
101

    
102
        public FmapContentHandler(GPEErrorHandler errorHandler, FeatureStoreProviderServices store,
103
                        GPEStoreProvider storeProvider, File file) {
104
                super();                
105
                setErrorHandler(errorHandler);
106
                this.store = store;
107
                this.storeProvider = storeProvider;
108
                this.file = file;
109
                schemaManager = new XMLSchemaManager();
110
        }        
111

    
112
        public int getFeaturesCount(){
113
                return featureSet.size();
114
        }
115

    
116
        public Feature getFeatureAt(int index){
117
                return (Feature)featureSet.get(index);
118
        }
119

    
120
        public EditableFeatureType getFeatureType(){
121
                return featureType;
122
        }        
123

    
124

    
125
        /**
126
         * @return the featureSet
127
         */
128
        public HashMap<String, Feature> getFeatureSet() {
129
                return featureSet;
130
        }
131

    
132
        /*
133
         * (non-Javadoc)
134
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object, java.lang.Object)
135
         */
136
        public Object startLayer(String id, String namespace, String name,
137
                        String description, String srs, IAttributesIterator iterator, Object parentLayer, Object box) {
138
                if (featureSet == null){
139
                        featureSet = new HashMap<String, Feature>();
140
                }
141
                try {
142
                        schemaManager = new XMLSchemaManager();
143
                        schemaManager.addSchemas(iterator, file);
144
                } catch (Exception e) {
145
                        getErrorHandler().addError(e);
146
                }
147
                return featureSet;
148
        }
149

    
150

    
151

    
152
        /*
153
         * (non-Javadoc)
154
         * @see org.gvsig.gpe.IGPEContentHandler#endLayer(java.lang.Object)
155
         */
156
        public void endLayer(Object layer) {
157
                storeProvider.setEnvelope(envelope);
158
        }
159

    
160
        /*
161
         * (non-Javadoc)
162
         * @see org.gvsig.gpe.parser.GPEContentHandler#startPoint(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
163
         */
164
        public Object startPoint(String id, ICoordinateIterator coords, String srs) {
165
                return createPoint(coords);                
166
        }
167

    
168
        private Point createPoint(ICoordinateIterator coords){
169
                double[] buffer = new double[coords.getDimension()];
170
                try {
171
                        coords.hasNext();
172
                        coords.next(buffer);
173
                        Point point = null;
174
                        if (coords.getDimension() == 2){
175
                                point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
176
                        }else if (coords.getDimension() == 3){
177
                                point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2DZ);
178
                        }
179
                        for (int i=0 ; i<buffer.length ; i++){
180
                                point.setCoordinateAt(i, buffer[i]);
181
                        }
182
                        return point;
183
                } catch (IOException e) {
184
                        getErrorHandler().addError(e);
185
                } catch (CreateGeometryException e) {
186
                        getErrorHandler().addError(e);
187
                }
188
                return null;
189
        }
190

    
191
        private Point createPoint(double[] buffer){
192
                try {
193
                        Point point = null;
194
                        if (buffer.length == 2){
195
                                point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2D);
196
                        }else if (buffer.length == 3){
197
                                point = (Point) geomManager.create(TYPES.POINT, SUBTYPES.GEOM2DZ);
198
                        }
199
                        for (int i=0 ; i<buffer.length ; i++){
200
                                point.setCoordinateAt(i, buffer[i]);
201
                        }
202
                        return point;
203
                }catch (CreateGeometryException e) {
204
                        getErrorHandler().addError(e);
205
                }
206
                return null;
207
        }
208

    
209

    
210
        /* (non-Javadoc)
211
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLineString(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
212
         */
213
        public Object startLineString(String id, ICoordinateIterator coords,
214
                        String srs) {
215
                return createCurve(coords);
216
        }
217

    
218
        private Curve createCurve(ICoordinateIterator coords){
219
                GeneralPathX gp = createGeneralPathX(coords);
220
                try {
221
                        Curve curve = null;
222
                        if (coords.getDimension() == 2){
223
                                curve = (Curve) geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2D);
224
                        }else if (coords.getDimension() == 3){
225
                                curve = (Curve) geomManager.create(TYPES.CURVE, SUBTYPES.GEOM2DZ);
226
                        }
227
                        curve.setGeneralPath(gp);
228
                        return curve;
229
                } catch (CreateGeometryException e) {
230
                        getErrorHandler().addError(e);
231
                }
232
                return null;
233
        }
234

    
235
        private GeneralPathX createGeneralPathX(ICoordinateIterator coords){
236
                GeneralPathX gp = new GeneralPathX();
237
                if (coords == null){
238
                        return gp;
239
                }
240
                double[] buffer = new double[coords.getDimension()];
241
                try {
242
                        if (coords.hasNext()){
243
                                coords.next(buffer);
244
                                gp.moveTo(buffer[0], buffer[1]);
245
                        }
246
                        while(coords.hasNext()){
247
                                coords.next(buffer);
248
                                gp.lineTo(buffer[0], buffer[1]);
249
                        }
250
                } catch (IOException e) {
251
                        getErrorHandler().addError(e);
252
                }        
253
                return gp;
254
        }
255

    
256
        /* (non-Javadoc)
257
         * @see org.gvsig.gpe.parser.GPEContentHandler#startPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
258
         */
259

    
260
        public Object startPolygon(String id, ICoordinateIterator coords, String srs) {
261
                return createSurface(coords);
262
        }
263

    
264
        private Surface createSurface(ICoordinateIterator coords){
265
                GeneralPathX gp = createGeneralPathX(coords);
266
                try {
267
                        Surface surface = null;
268
                        if (coords.getDimension() == 2){
269
                                surface = (Surface) geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2D);
270
                        }else if (coords.getDimension() == 3){
271
                                surface = (Surface) geomManager.create(TYPES.SURFACE, SUBTYPES.GEOM2DZ);
272
                        }
273
                        surface.setGeneralPath(gp);
274
                        return surface;
275
                } catch (CreateGeometryException e) {
276
                        getErrorHandler().addError(e);
277
                }
278
                return null;
279
        }
280

    
281

    
282
        /* (non-Javadoc)
283
         * @see org.gvsig.gpe.parser.GPEContentHandler#startInnerPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
284
         */        
285
        public Object startInnerPolygon(String id, ICoordinateIterator coords,
286
                        String srs) {
287
                return createSurface(coords);
288
        }
289

    
290
        /*
291
         * (non-Javadoc)
292
         * @see org.gvsig.gpe.IGPEContentHandler#addGeometryToFeature(java.lang.Object, java.lang.Object)
293
         */
294
        public void addGeometryToFeature(Object geometry, Object feature) {
295
                ((GPEFeature)feature).setGeometry((Geometry)geometry);
296
        }        
297

    
298
        /*
299
         * (non-Javadoc)
300
         * @see org.gvsig.gpe.IGPEContentHandler#addBboxToLayer(java.lang.Object, java.lang.Object)
301
         */
302
        public void addBboxToLayer(Object bbox, Object layer) {
303
                //                if (layer != null){
304
                //                GPEBBox gpeBBox = (GPEBBox)bbox;
305
                //                if (gpeBBox.getSrs() != null){
306
                //                IProjection projection = null;
307
                //                try{
308
                //                CRSFactory.getCRS(gpeBBox.getSrs());
309
                //                }catch(Exception e){
310
                //                //If the CRS factory has an error.
311
                //                }
312
                //                if ((projection != null) && (!(projection.equals(((FLayer)layer).getProjection())))){
313
                //                //TODO reproyectar la bbox y asignarsela a la capa                                
314
                //                }
315
                //                }
316
                //                ((IGPEDriver)layer).setExtent(gpeBBox.getBbox2D());
317
                //                }
318
        }
319

    
320
        /*
321
         * (non-Javadoc)
322
         * @see org.gvsig.gpe.IGPEContentHandler#addElementToFeature(java.lang.Object, java.lang.Object)
323
         */
324
        public void addElementToFeature(Object element, Object feature) {
325
                GPEElement gpeElement = (GPEElement)element;
326
                ((GPEFeature)feature).addElement(gpeElement);
327
        }
328

    
329
        /*
330
         * (non-Javadoc)
331
         * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
332
         */
333
        public void addFeatureToLayer(Object feature, Object layer) {
334
                GPEFeature gpefeature = (GPEFeature)feature;
335
                Envelope currentEnvelope = gpefeature.getGeometry().getEnvelope();
336
                if (featureType == null){
337
                        Map elements = gpefeature.getelements();
338
                        Iterator keys = elements.keySet().iterator();
339
                        featureType = store.createFeatureType();
340
                        featureType.add("the_geom", DataTypes.GEOMETRY).setGeometryType(TYPES.GEOMETRY);                        
341
                        featureType.setDefaultGeometryAttributeName("the_geom");
342
                        featureType.setHasOID(true);
343
                        while (keys.hasNext()){
344
                                String elementName = (String)keys.next();
345
                                featureType.add(elementName, DataTypes.STRING);
346
                        }        
347
                        FeatureType defaultType = featureType.getNotEditableCopy();
348
                        List types = new ArrayList(1);
349
                        types.add(defaultType);
350
                        this.store.setFeatureTypes(types, defaultType);
351

    
352
                        //Initialize the envelope
353
                        try {
354
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
355
                        } catch (CreateEnvelopeException e) {
356
                                getErrorHandler().addError(e);
357
                        }
358
                        //Calculates the envelope
359
                        envelope = currentEnvelope;
360
                }else{
361
                        //Calculates the envelope
362
                        envelope.add(currentEnvelope);
363
                }
364
                //If it is null is a multilayer: not supported yet
365
                if (layer != null){
366
                        FeatureData data;
367
                        try {
368
                                data = store.createDefaultFeatureData(featureType.getNotEditableCopy());
369
                                Map elements = gpefeature.getelements();
370
                                Iterator keys = elements.keySet().iterator();
371
                                data.setDefaultGeometry(gpefeature.getGeometry());
372
                                data.set("the_geom", gpefeature.getGeometry()); 
373
                                data.setOID(gpefeature.getId());
374
                                while (keys.hasNext()){
375
                                        String elementName = (String)keys.next();
376
                                        data.set(elementName, ((GPEElement)elements.get(elementName)).getValue());
377
                                }
378
                                Feature dalFeature = store.createFeature(data);                                
379
                                ((HashMap<String, Feature>)layer).put(gpefeature.getId(),dalFeature);
380

    
381
                        } catch (DataException e) {
382
                                getErrorHandler().addError(e);
383
                        }                        
384
                }
385
        }
386

    
387
        /*
388
         * (non-Javadoc)
389
         * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
390
         */
391
        public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) {
392
                //((Geometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
393
        }
394

    
395
        /*
396
         * (non-Javadoc)
397
         * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
398
         */
399
        public void addNameToFeature(String name, Object feature) {
400

    
401
        }
402

    
403
        /*
404
         * (non-Javadoc)
405
         * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
406
         */
407
        public void addParentElementToElement(Object parent, Object element) {
408

    
409
        }
410

    
411
        /*
412
         * (non-Javadoc)
413
         * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
414
         */
415
        public void addSrsToLayer(String srs, Object Layer) {
416
                //                this.srs = srs; 
417
        }
418

    
419

    
420
        /* (non-Javadoc)
421
         * @see org.gvsig.gpe.parser.GPEContentHandler#startBbox(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
422
         */        
423
        public Object startBbox(String id, ICoordinateIterator coords, String srs) {
424
                Envelope envelope = null;
425
                try {
426
                        if (coords.getDimension() == 2){
427
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
428
                        }else if (coords.getDimension() == 3){
429
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2DZ);
430
                        } 
431
                        double[] buffer = new double[coords.getDimension()];
432

    
433
                        if (coords.hasNext()){
434
                                coords.next(buffer);
435
                                envelope.setLowerCorner(createPoint(buffer));
436
                        }
437
                        if (coords.hasNext()){
438
                                coords.next(buffer);
439
                                envelope.setUpperCorner(createPoint(buffer));
440
                        }                
441
                } catch (IOException e) {
442
                        getErrorHandler().addError(e);
443
                } catch (CreateEnvelopeException e) {
444
                        getErrorHandler().addError(e);
445
                }        
446
                return envelope;
447
        }
448

    
449
        /*
450
         * (non-Javadoc)
451
         * @see org.gvsig.gpe.parser.GPEContentHandler#startElement(java.lang.String, java.lang.String, java.lang.Object, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object)
452
         */
453
        public Object startElement(String namespace, String name, Object value,
454
                        IAttributesIterator attributesIterator,        Object parentElement) {
455
                return new GPEElement(name, (String)value, (GPEElement)parentElement);
456
        }
457

    
458
        /*
459
         * (non-Javadoc)
460
         * @see org.gvsig.gpe.parser.GPEContentHandler#startFeature(java.lang.String, java.lang.String, java.lang.String, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object)
461
         */
462
        public Object startFeature(String id, String namespace, String name, 
463
                        IAttributesIterator attributes, Object layer){                         
464
                if (id == null){
465
                        id = String.valueOf(featureId);
466
                        featureId++;
467
                }
468
                //Check the xml schema...
469
//                for (int i=0 ; i<schemas.size() ; i++){
470
//                        IXSSchema schema = schemas.get(i);
471
//                        IXSElementDeclaration element = schema.getElementDeclarationByName(namespace, name);
472
//                        if (element != null){
473
//                                featureType = store.createFeatureType();
474
//                                IXSTypeDefinition type = element.getTypeDefinition();
475
//                                if (type instanceof IXSComplexTypeDefinition){
476
//                                        IXSComplexTypeDefinition complexType = (IXSComplexTypeDefinition)type;
477
//                                        complexType.getContentType().
478
//                                }
479
//                                
480
//                                featureType.add("the_geom", DataTypes.GEOMETRY).setGeometryType(TYPES.GEOMETRY);                        
481
//                                featureType.setDefaultGeometryAttributeName("the_geom");
482
//                                featureType.setHasOID(true);
483
//                                while (keys.hasNext()){
484
//                                        String elementName = (String)keys.next();
485
//                                        featureType.add(elementName, DataTypes.STRING);
486
//                                }        
487
//                                FeatureType defaultType = featureType.getNotEditableCopy();
488
//                                List types = new ArrayList(1);
489
//                                types.add(defaultType);
490
//                                this.store.setFeatureTypes(types, defaultType);
491
//
492
//                                //Initialize the envelope
493
//                                try {
494
//                                        envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
495
//                                } catch (CreateEnvelopeException e) {
496
//                                        getErrorHandler().addError(e);
497
//                                }
498
//                        }
499
//                }
500
                return new GPEFeature(id,
501
                                name, name);
502
        }
503

    
504
        /* (non-Javadoc)
505
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLinearRing(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
506
         */        
507
        public Object startLinearRing(String id, ICoordinateIterator coords,
508
                        String srs) {
509
                return createSurface(coords);
510
        }
511

    
512
        /*
513
         * (non-Javadoc)
514
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
515
         */
516
        public Object startMultiPoint(String id, String srs) {
517
                try {
518
                        return (MultiPoint) geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
519
                } catch (CreateGeometryException e) {
520
                        getErrorHandler().addError(e);
521
                }
522
                return null;
523
        }
524

    
525
        /*
526
         * (non-Javadoc)
527
         * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
528
         */
529
        public void addPointToMultiPoint(Object point, Object multiPoint) {
530
                ((MultiPoint)multiPoint).addPoint((Point)point);
531
        }
532

    
533
        /*
534
         * (non-Javadoc)
535
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
536
         */
537
        public Object startMultiLineString(String id, String srs) {
538
                super.startMultiLineString(id, srs);
539
                try {
540
                        return (MultiCurve) geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
541
                } catch (CreateGeometryException e) {
542
                        getErrorHandler().addError(e);
543
                }
544
                return null;
545
        }
546

    
547
        /*
548
         * (non-Javadoc)
549
         * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
550
         */
551
        public void addLineStringToMultiLineString(Object lineString, Object multiLineString) {
552
                ((MultiCurve)multiLineString).addCurve((Curve)lineString);
553
        }
554

    
555
        /*
556
         * (non-Javadoc)
557
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
558
         */
559
        public Object startMultiPolygon(String id, String srs) {
560
                super.startMultiPolygon(id, srs);
561
                try {
562
                        return (MultiSurface) geomManager.create(TYPES.MULTISURFACE, SUBTYPES.GEOM2D);
563
                } catch (CreateGeometryException e) {
564
                        getErrorHandler().addError(e);
565
                }
566
                return null;
567
        }
568

    
569
        /*
570
         * (non-Javadoc)
571
         * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
572
         */
573
        public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) {
574
                ((MultiSurface)multiPolygon).addSurface((Surface)polygon);
575
        }                
576

    
577
        /* (non-Javadoc)
578
         * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
579
         */
580
        public void addCurveToMultiCurve(Object curve, Object multiCurve) {
581
                ((MultiCurve)multiCurve).addCurve((Curve)curve);
582
        }
583

    
584
        /* (non-Javadoc)
585
         * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
586
         */
587
        public void addSegmentToCurve(Object segment, Object curve) {
588
                ((Curve)curve).addVertex((Point)segment);                
589
        }
590

    
591
        /* (non-Javadoc)
592
         * @see org.gvsig.gpe.parser.GPEContentHandler#startCurve(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
593
         */
594
        public Object startCurve(String id, ICoordinateIterator coords, String srs) {
595
                return createCurve(coords);
596
        }
597

    
598
        /* (non-Javadoc)
599
         * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
600
         */
601
        public Object startCurve(String id, String srs) {
602
                return createCurve(null);
603
        }
604

    
605
        /* (non-Javadoc)
606
         * @see org.gvsig.gpe.GPEContentHandler#startMultiCurve(java.lang.String, java.lang.String)
607
         */
608
        public Object startMultiCurve(String id, String srs) {
609
                try {
610
                        return (MultiCurve) geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
611
                } catch (CreateGeometryException e) {
612
                        getErrorHandler().addError(e);
613
                }
614
                return null;        
615
        }
616

    
617
        /* (non-Javadoc)
618
         * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
619
         */
620
        public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) {
621
                ((MultiCurve)multiGeometry).addCurve((Curve)geometry);
622
        }
623

    
624
        /* (non-Javadoc)
625
         * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
626
         */
627
        public Object startMultiGeometry(String id, String srs) {
628
                try {
629
                        return (Aggregate) geomManager.create(TYPES.AGGREGATE, SUBTYPES.GEOM2D);
630
                } catch (CreateGeometryException e) {
631
                        getErrorHandler().addError(e);
632
                }
633
                return null;
634
        }
635

    
636
        /**
637
         * @return a new OID
638
         */
639
        public Object createNewOID() {
640
                featureId++;
641
                return String.valueOf(featureId);         
642
        }
643

    
644
}