Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extGPE-gvSIG / src / org / gvsig / fmap / dal / store / gpe / handlers / FmapContentHandler.java @ 32385

History | View | Annotate | Download (20.3 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.cresques.cts.IProjection;
12
import org.gvsig.fmap.dal.DataTypes;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
15
import org.gvsig.fmap.dal.feature.EditableFeatureType;
16
import org.gvsig.fmap.dal.feature.Feature;
17
import org.gvsig.fmap.dal.feature.FeatureType;
18
import org.gvsig.fmap.dal.feature.spi.DefaultFeatureProvider;
19
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
20
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
21
import org.gvsig.fmap.dal.store.gpe.GPEStoreProvider;
22
import org.gvsig.fmap.dal.store.gpe.model.GPEElement;
23
import org.gvsig.fmap.dal.store.gpe.model.GPEFeature;
24
import org.gvsig.fmap.geom.Geometry;
25
import org.gvsig.fmap.geom.GeometryLocator;
26
import org.gvsig.fmap.geom.GeometryManager;
27
import org.gvsig.fmap.geom.Geometry.SUBTYPES;
28
import org.gvsig.fmap.geom.Geometry.TYPES;
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.lib.api.parser.IAttributesIterator;
40
import org.gvsig.gpe.lib.api.parser.ICoordinateIterator;
41
import org.gvsig.gpe.lib.api.parser.IGPEErrorHandler;
42
import org.gvsig.gpe.lib.impl.parser.GPEContentHandler;
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 IProjection srs = null;
102
        private int geometryType = 0;
103

    
104
        public FmapContentHandler(IGPEErrorHandler errorHandler, FeatureStoreProviderServices store,
105
                        GPEStoreProvider storeProvider, File file, IProjection srs, int geometryType) {
106
                super();
107
                setErrorHandler(errorHandler);
108
                this.store = store;
109
                this.storeProvider = storeProvider;
110
                this.file = file;
111
                this.srs = srs;
112
                this.geometryType = geometryType;
113
        }
114

    
115
        public int getFeaturesCount(){
116
                return featureSet.size();
117
        }
118

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

    
123
        public EditableFeatureType getFeatureType(){
124
                return featureType;
125
        }
126

    
127

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

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

    
153

    
154

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

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

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

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

    
212

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

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

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

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

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

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

    
284

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

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

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

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

    
332
        /*
333
         * (non-Javadoc)
334
         * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
335
         */
336
        public void addFeatureToLayer(Object feature, Object layer) {
337
                GPEFeature gpefeature = (GPEFeature)feature;
338
                Envelope currentEnvelope = gpefeature.getEnvelope();
339
                if (featureType == null){
340
                        createFeatureType(gpefeature);
341

    
342
                        //Initialize the envelope
343
                        try {
344
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
345
                        } catch (CreateEnvelopeException e) {
346
                                getErrorHandler().addError(e);
347
                        }
348
                        //Calculates the envelope
349
                        envelope = currentEnvelope;
350
                }else{
351
                        //Calculates the envelope
352
                        envelope.add(currentEnvelope);
353
                }
354
                //If it is null is a multilayer: not supported yet
355
                if (layer != null){
356
                        FeatureProvider data;
357
                        try {
358
                                data = new DefaultFeatureProvider(featureType.getNotEditableCopy(), storeProvider.createNewOID());
359
                                Map elements = gpefeature.getelements();
360
                                Iterator keys = elements.keySet().iterator();
361
                                data.setDefaultGeometry(gpefeature.getGeometry());
362
                                data.set("the_geom", gpefeature.getGeometry());
363
                                data.setOID(gpefeature.getId());
364
                                while (keys.hasNext()){
365
                                        String elementName = (String)keys.next();
366
                                        if (!elementName.equals("the_geom")){
367
                                                data.set(elementName, ((GPEElement)elements.get(elementName)).getValue());
368
                                        }
369
                                }
370
                                Feature dalFeature = store.createFeature(data);
371
                                ((HashMap)layer).put(gpefeature.getId(),dalFeature);
372

    
373
                        } catch (DataException e) {
374
                                getErrorHandler().addError(e);
375
                        }
376
                }
377
        }
378
        
379
        private void createFeatureType(GPEFeature gpefeature){
380
                Map elements = gpefeature.getelements();
381
                Iterator keys = elements.keySet().iterator();
382
                featureType = store.createFeatureType();
383
                EditableFeatureAttributeDescriptor attributeDescriptor = featureType.add("the_geom", DataTypes.GEOMETRY).setGeometryType(geometryType);
384
                attributeDescriptor.setGeometrySubType(SUBTYPES.GEOM2D);
385
                attributeDescriptor.setSRS(srs);
386
                featureType.setDefaultGeometryAttributeName("the_geom");
387
                featureType.setHasOID(true);
388
                while (keys.hasNext()){
389
                        String elementName = (String)keys.next();
390
                        if (!elementName.equals("the_geom")){
391
                                featureType.add(elementName, DataTypes.STRING);
392
                        }
393
                }
394
                FeatureType defaultType = featureType.getNotEditableCopy();
395
                List types = new ArrayList(1);
396
                types.add(defaultType);
397
                this.store.setFeatureTypes(types, defaultType);
398
        }
399

    
400
        /*
401
         * (non-Javadoc)
402
         * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
403
         */
404
        public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) {
405
                //((Geometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
406
        }
407

    
408
        /*
409
         * (non-Javadoc)
410
         * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
411
         */
412
        public void addNameToFeature(String name, Object feature) {
413

    
414
        }
415

    
416
        /*
417
         * (non-Javadoc)
418
         * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
419
         */
420
        public void addParentElementToElement(Object parent, Object element) {
421

    
422
        }
423

    
424
        /*
425
         * (non-Javadoc)
426
         * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
427
         */
428
        public void addSrsToLayer(String srs, Object Layer) {
429
                //                this.srs = srs;
430
        }
431

    
432

    
433
        /* (non-Javadoc)
434
         * @see org.gvsig.gpe.parser.GPEContentHandler#startBbox(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
435
         */
436
        public Object startBbox(String id, ICoordinateIterator coords, String srs) {
437
                Envelope envelope = null;
438
                try {
439
                        if (coords.getDimension() == 2){
440
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
441
                        }else if (coords.getDimension() == 3){
442
                                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2DZ);
443
                        }
444
                        double[] buffer = new double[coords.getDimension()];
445

    
446
                        if (coords.hasNext()){
447
                                coords.next(buffer);
448
                                envelope.setLowerCorner(createPoint(buffer));
449
                        }
450
                        if (coords.hasNext()){
451
                                coords.next(buffer);
452
                                envelope.setUpperCorner(createPoint(buffer));
453
                        }
454
                } catch (IOException e) {
455
                        getErrorHandler().addError(e);
456
                } catch (CreateEnvelopeException e) {
457
                        getErrorHandler().addError(e);
458
                }
459
                return envelope;
460
        }
461

    
462
        /*
463
         * (non-Javadoc)
464
         * @see org.gvsig.gpe.parser.GPEContentHandler#startElement(java.lang.String, java.lang.String, java.lang.Object, org.gvsig.gpe.parser.IAttributesIterator, java.lang.Object)
465
         */
466
        public Object startElement(String namespace, String name, Object value,
467
                        IAttributesIterator attributesIterator,        Object parentElement) {
468
                return new GPEElement(name, (String)value, (GPEElement)parentElement);
469
        }
470

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

    
520
        /* (non-Javadoc)
521
         * @see org.gvsig.gpe.parser.GPEContentHandler#startLinearRing(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
522
         */
523
        public Object startLinearRing(String id, ICoordinateIterator coords,
524
                        String srs) {
525
                return createSurface(coords);
526
        }
527

    
528
        /*
529
         * (non-Javadoc)
530
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
531
         */
532
        public Object startMultiPoint(String id, String srs) {
533
                try {
534
                        return geomManager.create(TYPES.MULTIPOINT, SUBTYPES.GEOM2D);
535
                } catch (CreateGeometryException e) {
536
                        getErrorHandler().addError(e);
537
                }
538
                return null;
539
        }
540

    
541
        /*
542
         * (non-Javadoc)
543
         * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
544
         */
545
        public void addPointToMultiPoint(Object point, Object multiPoint) {
546
                ((MultiPoint)multiPoint).addPoint((Point)point);
547
        }
548

    
549
        /*
550
         * (non-Javadoc)
551
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
552
         */
553
        public Object startMultiLineString(String id, String srs) {
554
                super.startMultiLineString(id, srs);
555
                try {
556
                        return geomManager.create(TYPES.MULTICURVE, SUBTYPES.GEOM2D);
557
                } catch (CreateGeometryException e) {
558
                        getErrorHandler().addError(e);
559
                }
560
                return null;
561
        }
562

    
563
        /*
564
         * (non-Javadoc)
565
         * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
566
         */
567
        public void addLineStringToMultiLineString(Object lineString, Object multiLineString) {
568
                ((MultiCurve)multiLineString).addCurve((Curve)lineString);
569
        }
570

    
571
        /*
572
         * (non-Javadoc)
573
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
574
         */
575
        public Object startMultiPolygon(String id, String srs) {
576
                super.startMultiPolygon(id, srs);
577
                try {
578
                        return geomManager.create(TYPES.MULTISURFACE, SUBTYPES.GEOM2D);
579
                } catch (CreateGeometryException e) {
580
                        getErrorHandler().addError(e);
581
                }
582
                return null;
583
        }
584

    
585
        /*
586
         * (non-Javadoc)
587
         * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
588
         */
589
        public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) {
590
                ((MultiSurface)multiPolygon).addSurface((Surface)polygon);
591
        }
592

    
593
        /* (non-Javadoc)
594
         * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
595
         */
596
        public void addCurveToMultiCurve(Object curve, Object multiCurve) {
597
                ((MultiCurve)multiCurve).addCurve((Curve)curve);
598
        }
599

    
600
        /* (non-Javadoc)
601
         * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
602
         */
603
        public void addSegmentToCurve(Object segment, Object curve) {
604
                ((Curve)curve).addVertex((Point)segment);
605
        }
606

    
607
        /* (non-Javadoc)
608
         * @see org.gvsig.gpe.parser.GPEContentHandler#startCurve(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
609
         */
610
        public Object startCurve(String id, ICoordinateIterator coords, String srs) {
611
                return createCurve(coords);
612
        }
613

    
614
        /* (non-Javadoc)
615
         * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
616
         */
617
        public Object startCurve(String id, String srs) {
618
                return createCurve(null);
619
        }
620

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

    
633
        /* (non-Javadoc)
634
         * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
635
         */
636
        public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) {
637
                ((MultiCurve)multiGeometry).addCurve((Curve)geometry);
638
        }
639

    
640
        /* (non-Javadoc)
641
         * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
642
         */
643
        public Object startMultiGeometry(String id, String srs) {
644
                try {
645
                        return geomManager.create(TYPES.AGGREGATE, SUBTYPES.GEOM2D);
646
                } catch (CreateGeometryException e) {
647
                        getErrorHandler().addError(e);
648
                }
649
                return null;
650
        }
651

    
652
        /**
653
         * @return a new OID
654
         */
655
        public Object createNewOID() {
656
                featureId++;
657
                return String.valueOf(featureId);
658
        }
659

    
660
}