Statistics
| Revision:

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

History | View | Annotate | Download (23.6 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.jfree.util.Log;
13
import org.slf4j.Logger;
14
import org.slf4j.LoggerFactory;
15

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

    
98
    private HashMap featureSet = null;
99
    private EditableFeatureType featureType = null;
100
    private FeatureStoreProviderServices store = null;
101
    private GPEStoreProvider storeProvider = null;
102
    private GeometryManager geomManager = GeometryLocator.getGeometryManager();
103
    private int featureId = 0;
104
    private Envelope envelope = null;
105
    private File file = null;
106
    private IProjection srs = null;
107
    private int geometryType = 0;
108

    
109
    public FmapContentHandler(IGPEErrorHandler errorHandler, FeatureStoreProviderServices store,
110
        GPEStoreProvider storeProvider, File file, IProjection srs, int geometryType) {
111
        super();
112
        setErrorHandler(errorHandler);
113
        this.store = store;
114
        this.storeProvider = storeProvider;
115
        this.file = file;
116
        this.srs = srs;
117
        this.geometryType = geometryType;
118
    }
119

    
120
    public int getFeaturesCount(){
121
        return featureSet.size();
122
    }
123

    
124
    public Feature getFeatureAt(int index){
125
        return (Feature)featureSet.get(new Integer(index));
126
    }
127

    
128
    public EditableFeatureType getFeatureType(){
129
        return featureType;
130
    }
131

    
132

    
133
    /**
134
     * @return the featureSet
135
     */
136
    public HashMap getFeatureSet() {
137
        return featureSet;
138
    }
139

    
140
    /*
141
     * (non-Javadoc)
142
     * @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)
143
     */
144
    public Object startLayer(String id, String namespace, String name,
145
        String description, String srs, IAttributesIterator iterator, Object parentLayer, Object box) {
146
        if (featureSet == null){
147
            featureSet = new HashMap();
148
        }
149
        if (envelope == null){
150
            try {
151
                envelope = geomManager.createEnvelope(SUBTYPES.GEOM2D);
152
            } catch (CreateEnvelopeException e) {
153
                Log.error("Error creating the envelope", e);
154
            }
155
        }
156
        return featureSet;
157
    }
158

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

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

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

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

    
216

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

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

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

    
263
    /* (non-Javadoc)
264
     * @see org.gvsig.gpe.parser.GPEContentHandler#startPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
265
     */
266

    
267
    public Object startPolygon(String id, ICoordinateIterator coords, String srs) {
268
        return createSurface(coords);
269
    }
270

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

    
288

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

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

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

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

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

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

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

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

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

    
415
    }
416

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

    
423
    }
424

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

    
433

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
661
    /**
662
     * @param envelope the envelope to set
663
     */
664
    public void setEnvelope(Envelope envelope) {
665
        this.envelope = envelope;
666
    }
667

    
668
    /**
669
     * @param featureType the featureType to set
670
     */
671
    public void setFeatureType(EditableFeatureType featureType) {
672
        this.featureType = featureType;
673
    }
674
}