svn-gvsig-desktop / trunk / extensions / extGPE-gvSIG / src / org / gvsig / fmap / drivers / gpe / handlers / DefaultFmapContentHandler.java @ 27067
History | View | Annotate | Download (13.9 KB)
1 | 27067 | jpiera | package org.gvsig.fmap.drivers.gpe.handlers; |
---|---|---|---|
2 | |||
3 | import java.io.IOException; |
||
4 | |||
5 | import org.gvsig.fmap.drivers.gpe.exceptions.CurveConversionWarning; |
||
6 | import org.gvsig.fmap.drivers.gpe.exceptions.NotMultipleLayerWarning; |
||
7 | import org.gvsig.fmap.drivers.gpe.model.GPEBBox; |
||
8 | import org.gvsig.fmap.drivers.gpe.model.GPECurve; |
||
9 | import org.gvsig.fmap.drivers.gpe.model.GPEElement; |
||
10 | import org.gvsig.fmap.drivers.gpe.model.GPEFeature; |
||
11 | import org.gvsig.fmap.drivers.gpe.model.GPEGeometry; |
||
12 | import org.gvsig.fmap.drivers.gpe.model.GPEMultiGeometry; |
||
13 | import org.gvsig.fmap.drivers.gpe.model.GPEMultiLineGeometry; |
||
14 | import org.gvsig.fmap.drivers.gpe.model.GPEMultiPointGeometry; |
||
15 | import org.gvsig.fmap.drivers.gpe.model.GPEMultiPolygonGeometry; |
||
16 | import org.gvsig.fmap.drivers.gpe.reader.AddFeatureToDriver; |
||
17 | import org.gvsig.fmap.drivers.gpe.reader.GPEVectorialDriver; |
||
18 | import org.gvsig.fmap.drivers.gpe.reader.IGPEDriver; |
||
19 | import org.gvsig.fmap.drivers.gpe.reader.KMLVectorialDriver; |
||
20 | import org.gvsig.fmap.drivers.gpe.utils.GPETypesConversion; |
||
21 | import org.gvsig.gpe.parser.GPEContentHandler; |
||
22 | import org.gvsig.gpe.parser.GPEErrorHandler; |
||
23 | import org.gvsig.gpe.parser.ICoordinateIterator; |
||
24 | |||
25 | import com.hardcode.gdbms.engine.values.ValueFactory; |
||
26 | import com.iver.cit.gvsig.fmap.core.GeneralPathX; |
||
27 | import com.iver.cit.gvsig.fmap.core.ShapeFactory; |
||
28 | /* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
|
||
29 | *
|
||
30 | * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
|
||
31 | *
|
||
32 | * This program is free software; you can redistribute it and/or
|
||
33 | * modify it under the terms of the GNU General Public License
|
||
34 | * as published by the Free Software Foundation; either version 2
|
||
35 | * of the License, or (at your option) any later version.
|
||
36 | *
|
||
37 | * This program is distributed in the hope that it will be useful,
|
||
38 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
39 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
40 | * GNU General Public License for more details.
|
||
41 | *
|
||
42 | * You should have received a copy of the GNU General Public License
|
||
43 | * along with this program; if not, write to the Free Software
|
||
44 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
|
||
45 | *
|
||
46 | * For more information, contact:
|
||
47 | *
|
||
48 | * Generalitat Valenciana
|
||
49 | * Conselleria d'Infraestructures i Transport
|
||
50 | * Av. Blasco Ib??ez, 50
|
||
51 | * 46010 VALENCIA
|
||
52 | * SPAIN
|
||
53 | *
|
||
54 | * +34 963862235
|
||
55 | * gvsig@gva.es
|
||
56 | * www.gvsig.gva.es
|
||
57 | *
|
||
58 | * or
|
||
59 | *
|
||
60 | * IVER T.I. S.A
|
||
61 | * Salamanca 50
|
||
62 | * 46005 Valencia
|
||
63 | * Spain
|
||
64 | *
|
||
65 | * +34 963163400
|
||
66 | * dac@iver.es
|
||
67 | */
|
||
68 | /* CVS MESSAGES:
|
||
69 | *
|
||
70 | * $Id$
|
||
71 | * $Log$
|
||
72 | *
|
||
73 | */
|
||
74 | /**
|
||
75 | * @author Jorge Piera LLodr? (jorge.piera@iver.es)
|
||
76 | */
|
||
77 | public abstract class DefaultFmapContentHandler extends GPEContentHandler { |
||
78 | protected AddFeatureToDriver addFeature = null; |
||
79 | private int features = 0; |
||
80 | private boolean hasLayer = false; |
||
81 | private IGPEDriver driver = null; |
||
82 | |||
83 | public DefaultFmapContentHandler(GPEErrorHandler errorHandler,
|
||
84 | IGPEDriver driver) { |
||
85 | super();
|
||
86 | setErrorHandler(errorHandler); |
||
87 | this.driver = driver;
|
||
88 | GPEFeature.initIdFeature(); |
||
89 | } |
||
90 | |||
91 | |||
92 | |||
93 | /* (non-Javadoc)
|
||
94 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object, java.lang.Object)
|
||
95 | */
|
||
96 | public Object startLayer(String id, String namespace, String name, |
||
97 | String description, String srs, Object parentLayer, Object box) { |
||
98 | //Only one layer is supported
|
||
99 | if (hasLayer == false){ |
||
100 | hasLayer = true;
|
||
101 | addFeature = new AddFeatureToDriver();
|
||
102 | //addFeature.setSchema(getSchemaDocument());
|
||
103 | }else{
|
||
104 | getErrorHandler().addWarning(new NotMultipleLayerWarning());
|
||
105 | //TODO patch to support multilayer on KML
|
||
106 | if (driver.getName().equals(KMLVectorialDriver.DRIVERNAME)){
|
||
107 | return driver;
|
||
108 | } |
||
109 | return null; |
||
110 | } |
||
111 | return driver;
|
||
112 | } |
||
113 | |||
114 | /*
|
||
115 | * (non-Javadoc)
|
||
116 | * @see org.gvsig.gpe.IGPEContentHandler#endLayer(java.lang.Object)
|
||
117 | */
|
||
118 | public void endLayer(Object layer) { |
||
119 | IGPEDriver gpeDriver = (IGPEDriver)layer; |
||
120 | } |
||
121 | |||
122 | /*
|
||
123 | * (non-Javadoc)
|
||
124 | * @see org.gvsig.gpe.parser.GPEContentHandler#startPoint(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
125 | */
|
||
126 | public Object startPoint(String id, ICoordinateIterator coords, String srs) { |
||
127 | double[] buffer = new double[coords.getDimension()]; |
||
128 | double y = 0.0; |
||
129 | try {
|
||
130 | coords.hasNext(); |
||
131 | coords.next(buffer); |
||
132 | return new GPEGeometry(id, ShapeFactory.createPoint2D(buffer[0], buffer[1]), srs); |
||
133 | } catch (IOException e) { |
||
134 | getErrorHandler().addError(e); |
||
135 | } |
||
136 | return null; |
||
137 | } |
||
138 | |||
139 | /* (non-Javadoc)
|
||
140 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLineString(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
141 | */
|
||
142 | public Object startLineString(String id, ICoordinateIterator coords, |
||
143 | String srs) {
|
||
144 | GeneralPathX gp = new GeneralPathX();
|
||
145 | double[] buffer = new double[coords.getDimension()]; |
||
146 | try {
|
||
147 | while(coords.hasNext()){
|
||
148 | coords.next(buffer); |
||
149 | gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true); |
||
150 | } |
||
151 | } catch (IOException e) { |
||
152 | getErrorHandler().addError(e); |
||
153 | } |
||
154 | return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs); |
||
155 | } |
||
156 | |||
157 | /* (non-Javadoc)
|
||
158 | * @see org.gvsig.gpe.parser.GPEContentHandler#startPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
159 | */
|
||
160 | |||
161 | public Object startPolygon(String id, ICoordinateIterator coords, String srs) { |
||
162 | GeneralPathX gp = new GeneralPathX();
|
||
163 | double[] buffer = new double[coords.getDimension()]; |
||
164 | try {
|
||
165 | while(coords.hasNext()){
|
||
166 | coords.next(buffer); |
||
167 | gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true); |
||
168 | } |
||
169 | } catch (IOException e) { |
||
170 | getErrorHandler().addError(e); |
||
171 | } |
||
172 | return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs); |
||
173 | } |
||
174 | |||
175 | /* (non-Javadoc)
|
||
176 | * @see org.gvsig.gpe.parser.GPEContentHandler#startInnerPolygon(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
177 | */
|
||
178 | public Object startInnerPolygon(String id, ICoordinateIterator coords, |
||
179 | String srs) {
|
||
180 | GeneralPathX gp = new GeneralPathX();
|
||
181 | double[] buffer = new double[coords.getDimension()]; |
||
182 | try {
|
||
183 | while(coords.hasNext()){
|
||
184 | coords.next(buffer); |
||
185 | gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true); |
||
186 | } |
||
187 | } catch (IOException e) { |
||
188 | getErrorHandler().addError(e); |
||
189 | } |
||
190 | return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs); |
||
191 | } |
||
192 | |||
193 | |||
194 | |||
195 | /*
|
||
196 | * (non-Javadoc)
|
||
197 | * @see org.gvsig.gpe.IGPEContentHandler#addGeometryToFeature(java.lang.Object, java.lang.Object)
|
||
198 | */
|
||
199 | public void addGeometryToFeature(Object geometry, Object feature) { |
||
200 | ((GPEFeature)feature).setGeometry((GPEGeometry)geometry); |
||
201 | } |
||
202 | |||
203 | /*
|
||
204 | * (non-Javadoc)
|
||
205 | * @see org.gvsig.gpe.IGPEContentHandler#addBboxToLayer(java.lang.Object, java.lang.Object)
|
||
206 | */
|
||
207 | public void addBboxToLayer(Object bbox, Object layer) { |
||
208 | // if (layer != null){
|
||
209 | // GPEBBox gpeBBox = (GPEBBox)bbox;
|
||
210 | // if (gpeBBox.getSrs() != null){
|
||
211 | // IProjection projection = null;
|
||
212 | // try{
|
||
213 | // CRSFactory.getCRS(gpeBBox.getSrs());
|
||
214 | // }catch(Exception e){
|
||
215 | // //If the CRS factory has an error.
|
||
216 | // }
|
||
217 | // if ((projection != null) && (!(projection.equals(((FLayer)layer).getProjection())))){
|
||
218 | // //TODO reproyectar la bbox y asignarsela a la capa
|
||
219 | // }
|
||
220 | // }
|
||
221 | // ((IGPEDriver)layer).setExtent(gpeBBox.getBbox2D());
|
||
222 | // }
|
||
223 | } |
||
224 | |||
225 | /*
|
||
226 | * (non-Javadoc)
|
||
227 | * @see org.gvsig.gpe.IGPEContentHandler#addElementToFeature(java.lang.Object, java.lang.Object)
|
||
228 | */
|
||
229 | public void addElementToFeature(Object element, Object feature) { |
||
230 | ((GPEFeature)feature).addElement((GPEElement)element); |
||
231 | } |
||
232 | |||
233 | /*
|
||
234 | * (non-Javadoc)
|
||
235 | * @see org.gvsig.gpe.IGPEContentHandler#addFeatureToLayer(java.lang.Object, java.lang.Object)
|
||
236 | */
|
||
237 | public int k = 0; |
||
238 | public void addFeatureToLayer(Object feature, Object layer) { |
||
239 | //If it is null is a multilayer: not supported yet
|
||
240 | k = k + 1;
|
||
241 | System.out.println(k);
|
||
242 | if (layer != null){ |
||
243 | addFeature.addFeatureToLayer((GPEVectorialDriver)layer, |
||
244 | (GPEFeature)feature); |
||
245 | } |
||
246 | } |
||
247 | |||
248 | /*
|
||
249 | * (non-Javadoc)
|
||
250 | * @see org.gvsig.gpe.IGPEContentHandler#addInnerPolygonToPolygon(java.lang.Object, java.lang.Object)
|
||
251 | */
|
||
252 | public void addInnerPolygonToPolygon(Object innerPolygon, Object Polygon) { |
||
253 | ((GPEGeometry)Polygon).addGeometry((GPEGeometry)innerPolygon);
|
||
254 | } |
||
255 | |||
256 | /*
|
||
257 | * (non-Javadoc)
|
||
258 | * @see org.gvsig.gpe.IGPEContentHandler#addNameToFeature(java.lang.String, java.lang.Object)
|
||
259 | */
|
||
260 | public void addNameToFeature(String name, Object feature) { |
||
261 | |||
262 | } |
||
263 | |||
264 | /*
|
||
265 | * (non-Javadoc)
|
||
266 | * @see org.gvsig.gpe.IGPEContentHandler#addParentElementToElement(java.lang.Object, java.lang.Object)
|
||
267 | */
|
||
268 | public void addParentElementToElement(Object parent, Object element) { |
||
269 | |||
270 | } |
||
271 | |||
272 | /*
|
||
273 | * (non-Javadoc)
|
||
274 | * @see org.gvsig.gpe.IGPEContentHandler#addSrsToLayer(java.lang.String, java.lang.Object)
|
||
275 | */
|
||
276 | public void addSrsToLayer(String srs, Object Layer) { |
||
277 | // this.srs = srs;
|
||
278 | } |
||
279 | |||
280 | |||
281 | /* (non-Javadoc)
|
||
282 | * @see org.gvsig.gpe.parser.GPEContentHandler#startBbox(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
283 | */
|
||
284 | public Object startBbox(String id, ICoordinateIterator coords, String srs) { |
||
285 | return new GPEBBox(id,coords,srs); |
||
286 | } |
||
287 | |||
288 | /* (non-Javadoc)
|
||
289 | * @see org.gvsig.gpe.parser.GPEContentHandler#startElement(java.lang.String, java.lang.String, java.lang.Object, java.lang.Object)
|
||
290 | */
|
||
291 | public Object startElement(String namespace, String name, Object value, |
||
292 | Object parentElement) {
|
||
293 | return new GPEElement(name, GPETypesConversion.fromJavaTogvSIG(value), (GPEElement)parentElement); |
||
294 | } |
||
295 | |||
296 | /*
|
||
297 | * (non-Javadoc)
|
||
298 | * @see org.gvsig.gpe.IGPEContentHandler#startFeature(java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
|
||
299 | */
|
||
300 | public Object startFeature(String id, String name, String xsElementName, Object layer) { |
||
301 | |||
302 | return new GPEFeature(ValueFactory.createValue(id), |
||
303 | name, xsElementName); |
||
304 | } |
||
305 | |||
306 | /* (non-Javadoc)
|
||
307 | * @see org.gvsig.gpe.parser.GPEContentHandler#startLinearRing(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
308 | */
|
||
309 | public Object startLinearRing(String id, ICoordinateIterator coords, |
||
310 | String srs) {
|
||
311 | GeneralPathX gp = new GeneralPathX();
|
||
312 | double[] buffer = new double[coords.getDimension()]; |
||
313 | try {
|
||
314 | while(coords.hasNext()){
|
||
315 | coords.next(buffer); |
||
316 | gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true); |
||
317 | } |
||
318 | } catch (IOException e) { |
||
319 | getErrorHandler().addError(e); |
||
320 | } |
||
321 | return new GPEGeometry(id, ShapeFactory.createPolygon2D(gp), srs); |
||
322 | } |
||
323 | |||
324 | |||
325 | /*
|
||
326 | * (non-Javadoc)
|
||
327 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiPoint(java.lang.String, java.lang.String)
|
||
328 | */
|
||
329 | public Object startMultiPoint(String id, String srs) { |
||
330 | return new GPEMultiPointGeometry(id, srs); |
||
331 | } |
||
332 | |||
333 | /*
|
||
334 | * (non-Javadoc)
|
||
335 | * @see org.gvsig.gpe.IGPEContentHandler#addPointToMultiPoint(java.lang.Object, java.lang.Object)
|
||
336 | */
|
||
337 | public void addPointToMultiPoint(Object point, Object multiPoint) { |
||
338 | ((GPEMultiGeometry)multiPoint).addGeometry((GPEGeometry)point); |
||
339 | } |
||
340 | |||
341 | /*
|
||
342 | * (non-Javadoc)
|
||
343 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiLineString(java.lang.String, java.lang.String)
|
||
344 | */
|
||
345 | public Object startMultiLineString(String id, String srs) { |
||
346 | super.startMultiLineString(id, srs);
|
||
347 | return new GPEMultiLineGeometry(id, srs); |
||
348 | } |
||
349 | |||
350 | /*
|
||
351 | * (non-Javadoc)
|
||
352 | * @see org.gvsig.gpe.IGPEContentHandler#addLineStringToMultiLineString(java.lang.Object, java.lang.Object)
|
||
353 | */
|
||
354 | public void addLineStringToMultiLineString(Object lineString, Object multiLineString) { |
||
355 | ((GPEMultiGeometry)multiLineString).addGeometry((GPEGeometry)lineString); |
||
356 | } |
||
357 | |||
358 | /*
|
||
359 | * (non-Javadoc)
|
||
360 | * @see org.gvsig.gpe.IGPEContentHandler#startMultiPolygon(java.lang.String, java.lang.String)
|
||
361 | */
|
||
362 | public Object startMultiPolygon(String id, String srs) { |
||
363 | super.startMultiPolygon(id, srs);
|
||
364 | return new GPEMultiPolygonGeometry(id,srs); |
||
365 | } |
||
366 | |||
367 | /*
|
||
368 | * (non-Javadoc)
|
||
369 | * @see org.gvsig.gpe.IGPEContentHandler#addPolygonToMultiPolygon(java.lang.Object, java.lang.Object)
|
||
370 | */
|
||
371 | public void addPolygonToMultiPolygon(Object polygon, Object multiPolygon) { |
||
372 | ((GPEMultiGeometry)multiPolygon).addGeometry((GPEGeometry)polygon); |
||
373 | } |
||
374 | |||
375 | /* (non-Javadoc)
|
||
376 | * @see org.gvsig.gpe.GPEContentHandler#addCurveToMultiCurve(java.lang.Object, java.lang.Object)
|
||
377 | */
|
||
378 | public void addCurveToMultiCurve(Object curve, Object multiCurve) { |
||
379 | ((GPEMultiGeometry)multiCurve).addGeometry((GPEGeometry)curve); |
||
380 | } |
||
381 | |||
382 | /* (non-Javadoc)
|
||
383 | * @see org.gvsig.gpe.GPEContentHandler#addSegmentToCurve(java.lang.Object, java.lang.Object)
|
||
384 | */
|
||
385 | public void addSegmentToCurve(Object segment, Object curve) { |
||
386 | ((GPECurve)curve).addSegment((GPEGeometry)segment); |
||
387 | } |
||
388 | |||
389 | /* (non-Javadoc)
|
||
390 | * @see org.gvsig.gpe.parser.GPEContentHandler#startCurve(java.lang.String, org.gvsig.gpe.parser.ICoordinateIterator, java.lang.String)
|
||
391 | */
|
||
392 | public Object startCurve(String id, ICoordinateIterator coords, String srs) { |
||
393 | getErrorHandler().addWarning(new CurveConversionWarning(id));
|
||
394 | GeneralPathX gp = new GeneralPathX();
|
||
395 | double[] buffer = new double[coords.getDimension()]; |
||
396 | try {
|
||
397 | while(coords.hasNext()){
|
||
398 | coords.next(buffer); |
||
399 | gp.append(ShapeFactory.createPoint2D(buffer[0], buffer[1]), true); |
||
400 | } |
||
401 | } catch (IOException e) { |
||
402 | getErrorHandler().addError(e); |
||
403 | } |
||
404 | return new GPEGeometry(id, ShapeFactory.createPolyline2D(gp), srs); |
||
405 | } |
||
406 | |||
407 | /* (non-Javadoc)
|
||
408 | * @see org.gvsig.gpe.GPEContentHandler#startCurve(java.lang.String, java.lang.String)
|
||
409 | */
|
||
410 | public Object startCurve(String id, String srs) { |
||
411 | getErrorHandler().addWarning(new CurveConversionWarning(id));
|
||
412 | return new GPECurve(id, srs); |
||
413 | } |
||
414 | |||
415 | /* (non-Javadoc)
|
||
416 | * @see org.gvsig.gpe.GPEContentHandler#startMultiCurve(java.lang.String, java.lang.String)
|
||
417 | */
|
||
418 | public Object startMultiCurve(String id, String srs) { |
||
419 | return new GPEMultiLineGeometry(id, srs); |
||
420 | } |
||
421 | |||
422 | /* (non-Javadoc)
|
||
423 | * @see org.gvsig.gpe.GPEContentHandler#addGeometryToMultiGeometry(java.lang.Object, java.lang.Object)
|
||
424 | */
|
||
425 | public void addGeometryToMultiGeometry(Object geometry, Object multiGeometry) { |
||
426 | ((GPEMultiGeometry)multiGeometry).addGeometry((GPEGeometry)geometry); |
||
427 | } |
||
428 | |||
429 | /* (non-Javadoc)
|
||
430 | * @see org.gvsig.gpe.GPEContentHandler#startMultiGeometry(java.lang.String, java.lang.String)
|
||
431 | */
|
||
432 | public Object startMultiGeometry(String id, String srs) { |
||
433 | return new GPEMultiGeometry(id, srs); |
||
434 | } |
||
435 | |||
436 | } |