Statistics
| Revision:

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

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

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

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

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

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

    
125

    
126
        /**
127
         * @return the featureSet
128
         */
129
        public HashMap getFeatureSet() {
130
                return featureSet;
131
        }
132

    
133
        /*
134
         * (non-Javadoc)
135
         * @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)
136
         */
137
        public Object startLayer(String id, String namespace, String name,
138
                        String description, String srs, IAttributesIterator iterator, Object parentLayer, Object box) {
139
                if (featureSet == null){
140
                        featureSet = new HashMap();
141
                }
142
                try {
143
                        schemaManager = new XMLSchemaManager();
144
                        schemaManager.addSchemas(iterator, file);
145
                } catch (Exception e) {
146
                        getErrorHandler().addError(e);
147
                }
148
                return featureSet;
149
        }
150

    
151

    
152

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

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

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

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

    
210

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

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

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

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

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

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

    
282

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

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

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

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

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

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

    
383
                        } catch (DataException e) {
384
                                getErrorHandler().addError(e);
385
                        }                        
386
                }
387
        }
388

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

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

    
403
        }
404

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

    
411
        }
412

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

    
421

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
646
}