Statistics
| Revision:

svn-gvsig-desktop / branches / v10 / extensions / extGPE-gvSIG / src / org / gvsig / fmap / drivers / gpe / handlers / DefaultFmapContentHandler.java @ 18292

History | View | Annotate | Download (12.3 KB)

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

    
3
import org.gvsig.fmap.drivers.gpe.exceptions.CurveConversionWarning;
4
import org.gvsig.fmap.drivers.gpe.exceptions.NotMultipleLayerWarning;
5
import org.gvsig.fmap.drivers.gpe.model.GPEBBox;
6
import org.gvsig.fmap.drivers.gpe.model.GPECurve;
7
import org.gvsig.fmap.drivers.gpe.model.GPEElement;
8
import org.gvsig.fmap.drivers.gpe.model.GPEFeature;
9
import org.gvsig.fmap.drivers.gpe.model.GPEGeometry;
10
import org.gvsig.fmap.drivers.gpe.model.GPEMultiGeometry;
11
import org.gvsig.fmap.drivers.gpe.reader.AddFeatureToDriver;
12
import org.gvsig.fmap.drivers.gpe.reader.GPEVectorialDriver;
13
import org.gvsig.fmap.drivers.gpe.reader.IGPEDriver;
14
import org.gvsig.fmap.drivers.gpe.utils.GPETypesConversion;
15
import org.gvsig.gpe.GPEContentHandler;
16
import org.gvsig.gpe.GPEErrorHandler;
17

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

    
76
        public DefaultFmapContentHandler(GPEErrorHandler errorHandler,
77
                        IGPEDriver driver) {
78
                super();                
79
                setErrorHandler(errorHandler);
80
                this.driver = driver;
81
        }
82

    
83
        /*
84
         * (non-Javadoc)
85
         * @see org.gvsig.gpe.GPEContentHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object, java.lang.String)
86
         */
87
        public Object startLayer(String id, String name, String description, String srs, Object parentLayer, Object bBox, String xsElementName) {
88
                //Only one layer is supported
89
                if (hasLayer == false){
90
                        hasLayer = true;
91
                        addFeature = new AddFeatureToDriver();
92
                        addFeature.setSchema(getSchemaDocument());
93
                }else{
94
                        getErrorHandler().addWarning(new NotMultipleLayerWarning());
95
                        return null;
96
                }                        
97
                return driver;
98
        }
99

    
100
        /*
101
         * (non-Javadoc)
102
         * @see org.gvsig.gpe.IGPEContentHandler#endLayer(java.lang.Object)
103
         */
104
        public void endLayer(Object layer) {
105
                IGPEDriver gpeDriver = (IGPEDriver)layer;
106
        }
107

    
108
        /*
109
         * (non-Javadoc)
110
         * @see org.gvsig.gpe.GPEContentHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
111
         */
112
        public Object startPoint(String id, double x, double y, double z, String srs) {
113
                return new GPEGeometry(id, ShapeFactory.createPoint2D(x, y), srs);
114
        }
115

    
116
        /*
117
         * (non-Javadoc)
118
         * @see org.gvsig.gpe.IGPEContentHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
119
         */
120
        public Object startLineString(String id, double[] x, double[] y, double[] z, String srs) {
121
                GeneralPathX gp = new GeneralPathX();
122
                for (int i=0 ; i<x.length ; i++){
123
                        gp.append(ShapeFactory.createPoint2D(x[i], y[i]), true);
124
                }
125
                return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs);
126
        }
127

    
128
        /*
129
         * (non-Javadoc)
130
         * @see org.gvsig.gpe.IGPEContentHandler#startPolygon(java.lang.String, double[], double[], double[], java.lang.String)
131
         */
132
        public Object startPolygon(String id, double[] x, double[] y, double[] z, String srs) {
133
                GeneralPathX gp = new GeneralPathX();
134
                for (int i=0 ; i<x.length ; i++){
135
                        gp.append(ShapeFactory.createPoint2D(x[i], y[i]), true);
136
                }
137
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs);
138
        }
139

    
140
        /*
141
         * (non-Javadoc)
142
         * @see org.gvsig.gpe.GPEContentHandler#startInnerPolygon(java.lang.String, double[], double[], double[], java.lang.String)
143
         */
144
        public Object startInnerPolygon(String id, double[] x, double[] y,
145
                        double[] z, String srs) {
146
                GeneralPathX gp = new GeneralPathX();
147
                gp.moveTo(x[0], y[0]);
148
                for (int i=1 ; i<x.length ; i++){
149
                        gp.append(ShapeFactory.createPoint2D(x[i], y[i]), true);                        
150
                }
151
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs);
152
        }
153

    
154
        /*
155
         * (non-Javadoc)
156
         * @see org.gvsig.gpe.IGPEContentHandler#addGeometryToFeature(java.lang.Object, java.lang.Object)
157
         */
158
        public void addGeometryToFeature(Object geometry, Object feature) {
159
                ((GPEFeature)feature).setGeometry((GPEGeometry)geometry);
160
        }        
161

    
162
        /*
163
         * (non-Javadoc)
164
         * @see org.gvsig.gpe.IGPEContentHandler#addBboxToLayer(java.lang.Object, java.lang.Object)
165
         */
166
        public void addBboxToLayer(Object bbox, Object layer) {
167
//                if (layer != null){
168
//                GPEBBox gpeBBox = (GPEBBox)bbox;
169
//                if (gpeBBox.getSrs() != null){
170
//                IProjection projection = null;
171
//                try{
172
//                CRSFactory.getCRS(gpeBBox.getSrs());
173
//                }catch(Exception e){
174
//                //If the CRS factory has an error.
175
//                }
176
//                if ((projection != null) && (!(projection.equals(((FLayer)layer).getProjection())))){
177
//                //TODO reproyectar la bbox y asignarsela a la capa                                
178
//                }
179
//                }
180
//                ((IGPEDriver)layer).setExtent(gpeBBox.getBbox2D());
181
//                }
182
        }
183

    
184
        /*
185
         * (non-Javadoc)
186
         * @see org.gvsig.gpe.IGPEContentHandler#addElementToFeature(java.lang.Object, java.lang.Object)
187
         */
188
        public void addElementToFeature(Object element, Object feature) {
189
                ((GPEFeature)feature).addElement((GPEElement)element);
190
        }
191

    
192
        /*
193
         * (non-Javadoc)
194
         * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
195
         */
196
        public void addFeatureToLayer(Object feature, Object layer) {
197
                //If it is null is a multilayer: not supported yet
198
                if (layer != null){
199
                        addFeature.addFeatureToLayer((GPEVectorialDriver)layer,
200
                                        (GPEFeature)feature);
201
                }
202
        }
203

    
204
        /*
205
         * (non-Javadoc)
206
         * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
207
         */
208
        public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) {
209
                ((GPEGeometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
210
        }
211

    
212
        /*
213
         * (non-Javadoc)
214
         * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
215
         */
216
        public void addNameToFeature(String name, Object feature) {
217

    
218
        }
219

    
220
        /*
221
         * (non-Javadoc)
222
         * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
223
         */
224
        public void addParentElementToElement(Object parent, Object element) {
225

    
226
        }
227

    
228
        /*
229
         * (non-Javadoc)
230
         * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
231
         */
232
        public void addSrsToLayer(String srs, Object Layer) {
233
//                this.srs = srs; 
234
        }
235

    
236

    
237
        /*
238
         * (non-Javadoc)
239
         * @see org.gvsig.gpe.IGPEContentHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
240
         */
241
        public Object startBbox(String id, double[] x, double[] y, double[] z, String srs) {
242
                return new GPEBBox(id,x,y,z,srs);                
243
        }
244

    
245
        /*
246
         * (non-Javadoc)
247
         * @see org.gvsig.gpe.IGPEContentHandler#startElement(java.lang.String, java.lang.Object, java.lang.String, java.lang.Object)
248
         */
249
        public Object startElement(String name, Object value, String xsElementName, Object parentElement) {
250
                return new GPEElement(name, GPETypesConversion.fromJavaTogvSIG(value), (GPEElement)parentElement);
251
        }
252

    
253
        /*
254
         * (non-Javadoc)
255
         * @see org.gvsig.gpe.IGPEContentHandler#startFeature(java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
256
         */
257
        public Object startFeature(String id, String name, String xsElementName, Object layer) {
258
                return new GPEFeature(ValueFactory.createValue(id),
259
                                name, xsElementName);
260
        }
261

    
262
        /*
263
         * (non-Javadoc)
264
         * @see org.gvsig.gpe.IGPEContentHandler#startLinearRing(java.lang.String, double[], double[], double[], java.lang.String)
265
         */
266
        public Object startLinearRing(String id, double[] x, double[] y, double[] z, String srs) {
267
                GeneralPathX gp = new GeneralPathX();
268
                for (int i=0 ; i<x.length ; i++){
269
                        gp.append(ShapeFactory.createPoint2D(x[i], y[i]), true);
270
                }
271
                return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), id);
272
        }
273

    
274
        /*
275
         * (non-Javadoc)
276
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
277
         */
278
        public Object startMultiPoint(String id, String srs) {
279
                return new GPEMultiGeometry(id, srs);
280
        }
281

    
282
        /*
283
         * (non-Javadoc)
284
         * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
285
         */
286
        public void addPointToMultiPoint(Object point, Object multiPoint) {
287
                ((GPEMultiGeometry)multiPoint).addGeometry((GPEGeometry)point);
288
        }
289

    
290
        /*
291
         * (non-Javadoc)
292
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
293
         */
294
        public Object startMultiLineString(String id, String srs) {
295
                super.startMultiLineString(id, srs);
296
                return new GPEMultiGeometry(id, srs);
297
        }
298

    
299
        /*
300
         * (non-Javadoc)
301
         * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
302
         */
303
        public void addLineStringToMultiLineString(Object lineString, Object multiLineString) {
304
                ((GPEMultiGeometry)multiLineString).addGeometry((GPEGeometry)lineString);
305
        }
306

    
307
        /*
308
         * (non-Javadoc)
309
         * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
310
         */
311
        public Object startMultiPolygon(String id, String srs) {
312
                super.startMultiPolygon(id, srs);
313
                return new GPEMultiGeometry(id,srs);
314
        }
315

    
316
        /*
317
         * (non-Javadoc)
318
         * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
319
         */
320
        public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) {
321
                ((GPEMultiGeometry)multiPolygon).addGeometry((GPEGeometry)polygon);
322
        }                
323

    
324
        /* (non-Javadoc)
325
         * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
326
         */
327
        public void addCurveToMultiCurve(Object curve, Object multiCurve) {
328
                ((GPEMultiGeometry)multiCurve).addGeometry((GPEGeometry)curve);
329
        }
330

    
331
        /* (non-Javadoc)
332
         * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
333
         */
334
        public void addSegmentToCurve(Object segment, Object curve) {
335
                ((GPECurve)curve).addSegment((GPEGeometry)segment);                
336
        }
337

    
338
        /* (non-Javadoc)
339
         * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, double[], double[], double[], java.lang.String)
340
         */
341
        public Object startCurve(String id, double[] x, double[] y, double[] z,
342
                        String srs) {
343
                getErrorHandler().addWarning(new CurveConversionWarning(id));
344
                GeneralPathX gp = new GeneralPathX();
345
                for (int i=0 ; i<x.length ; i++){
346
                        gp.append(ShapeFactory.createPoint2D(x[i], y[i]), true);
347
                }
348
                return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs);
349
        }
350

    
351
        /* (non-Javadoc)
352
         * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
353
         */
354
        public Object startCurve(String id, String srs) {
355
                getErrorHandler().addWarning(new CurveConversionWarning(id));
356
                return new GPECurve(id, srs);
357
        }
358

    
359
        /* (non-Javadoc)
360
         * @see org.gvsig.gpe.GPEContentHandler#startMultiCurve(java.lang.String, java.lang.String)
361
         */
362
        public Object startMultiCurve(String id, String srs) {
363
                return new GPEMultiGeometry(id, srs);                
364
        }
365

    
366
        /* (non-Javadoc)
367
         * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
368
         */
369
        public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) {
370
                ((GPEMultiGeometry)multiGeometry).addGeometry((GPEGeometry)geometry);
371
        }
372

    
373
        /* (non-Javadoc)
374
         * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
375
         */
376
        public Object startMultiGeometry(String id, String srs) {
377
                return new GPEMultiGeometry(id, srs);
378
        }
379

    
380
}