Statistics
| Revision:

root / trunk / libraries / libGPE-GML / src / org / gvsig / gpe / gml / writer / GPEGmlWriterHandler.java @ 11204

History | View | Annotate | Download (13.1 KB)

1
package org.gvsig.gpe.gml.writer;
2

    
3
import java.io.File;
4
import java.io.FileWriter;
5
import java.io.IOException;
6
import java.io.Writer;
7

    
8
import org.apache.xml.utils.NameSpace;
9
import org.gvsig.gpe.GPEDefaults;
10
import org.gvsig.gpe.GPEErrorHandler;
11
import org.gvsig.gpe.gml.GMLTags;
12
import org.gvsig.gpe.gml.writer.features.ElementWriter;
13
import org.gvsig.gpe.gml.writer.features.FeatureMemberWriter;
14
import org.gvsig.gpe.gml.writer.geometries.BoundedByWriter;
15
import org.gvsig.gpe.gml.writer.geometries.BoxWriter;
16
import org.gvsig.gpe.gml.writer.geometries.InnerBoundaryIs;
17
import org.gvsig.gpe.gml.writer.geometries.LineStringMemberWriter;
18
import org.gvsig.gpe.gml.writer.geometries.LineStringWriter;
19
import org.gvsig.gpe.gml.writer.geometries.LinearRingWriter;
20
import org.gvsig.gpe.gml.writer.geometries.MultiLineStringWriter;
21
import org.gvsig.gpe.gml.writer.geometries.MultiPointWriter;
22
import org.gvsig.gpe.gml.writer.geometries.MultiPolygonWriter;
23
import org.gvsig.gpe.gml.writer.geometries.PointMemberWriter;
24
import org.gvsig.gpe.gml.writer.geometries.PointWriter;
25
import org.gvsig.gpe.gml.writer.geometries.PolygonMemberWriter;
26
import org.gvsig.gpe.gml.writer.geometries.PolygonWriter;
27
import org.gvsig.gpe.xml.writer.GPEXmlWriterHandler;
28

    
29
import sun.rmi.runtime.GetThreadPoolAction;
30

    
31
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
32
 *
33
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
34
 *
35
 * This program is free software; you can redistribute it and/or
36
 * modify it under the terms of the GNU General Public License
37
 * as published by the Free Software Foundation; either version 2
38
 * of the License, or (at your option) any later version.
39
 *
40
 * This program is distributed in the hope that it will be useful,
41
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
43
 * GNU General Public License for more details.
44
 *
45
 * You should have received a copy of the GNU General Public License
46
 * along with this program; if not, write to the Free Software
47
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
48
 *
49
 * For more information, contact:
50
 *
51
 *  Generalitat Valenciana
52
 *   Conselleria d'Infraestructures i Transport
53
 *   Av. Blasco Ib??ez, 50
54
 *   46010 VALENCIA
55
 *   SPAIN
56
 *
57
 *      +34 963862235
58
 *   gvsig@gva.es
59
 *      www.gvsig.gva.es
60
 *
61
 *    or
62
 *
63
 *   IVER T.I. S.A
64
 *   Salamanca 50
65
 *   46005 Valencia
66
 *   Spain
67
 *
68
 *   +34 963163400
69
 *   dac@iver.es
70
 */
71
/* CVS MESSAGES:
72
 *
73
 * $Id: GPEGmlWriterHandler.java 11204 2007-04-13 13:16:00Z jorpiell $
74
 * $Log$
75
 * Revision 1.4  2007-04-13 13:16:00  jorpiell
76
 * Add the multiple geometries
77
 *
78
 * Revision 1.3  2007/04/13 07:17:57  jorpiell
79
 * Add the writting tests for the simple geometries
80
 *
81
 * Revision 1.2  2007/04/12 17:06:44  jorpiell
82
 * First GML writing tests
83
 *
84
 * Revision 1.1  2007/04/12 10:23:41  jorpiell
85
 * Add some writers and the GPEXml parser
86
 *
87
 *
88
 */
89
/**
90
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
91
 */
92
public class GPEGmlWriterHandler extends GPEXmlWriterHandler{
93
        //In GML there is only one label. It the consumer
94
        //try to add more labels the driver will be report
95
        //one exception
96
        private boolean oneLayer = false;
97
        
98
        //Used for the multi-geometries
99
        private boolean isMultiple = false;
100
        
101
        //Used to close the labels
102
        private String currentFeature = null;
103
        private String currentElement = null;        
104
        
105
        public GPEGmlWriterHandler(String format, File file,GPEErrorHandler errorHandler) throws IOException {
106
                super(format, file, errorHandler);                
107
        }
108

    
109
        /*
110
         * (non-Javadoc)
111
         * @see org.gvsig.gpe.xml.writer.GPEXmlWriterHandler#createOutputStream()
112
         */
113
        protected Writer createWriter() throws IOException {
114
                return new FileWriter(getFile());
115
        }
116
        
117
        /*
118
         * (non-Javadoc)
119
         * @see org.gvsig.gpe.writer.GPEWriterHandler#initialize()
120
         */
121
        public void initialize(){
122
                try {
123
                        writer.write("\n");
124
                        writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION);
125
//                        Write the local namespace
126
                        String prefix = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_PREFIX);
127
                        String uri = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_URI);
128
                        if ((prefix != null) && (uri != null)){
129
                                writer.write(" " + GMLTags.XML_NAMESPACE + ":" + prefix + "=\"");
130
                                writer.write(uri + "\" ");                                
131
                        }
132
                        writer.write(" " + GMLTags.NAMESPACE_GML);
133
                        writer.write(" " + GMLTags.NAMESPACE_XML);
134
                        if (uri != null){
135
                                writer.write(" " + GMLTags.XML_XSI + ":" + GMLTags.XML_SCHEMA_LOCATION + "=\"");
136
                                writer.write(uri + " " + "ESQUEMA.XSD" + "\"");
137
                        }
138
                        writer.write(">");
139
                } catch (IOException e) {
140
                        getErrorHandler().addError(e);
141
                }                
142
        }
143
        
144
        /*
145
         * (non-Javadoc)
146
         * @see org.gvsig.gpe.writer.GPEWriterHandler#close()
147
         */
148
        public void close(){
149
                try {
150
                        writer.write("\n");
151
                        writer.write("</" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION + ">");
152
                        writer.flush();
153
                        writer.close();
154
                } catch (IOException e) {
155
                        getErrorHandler().addError(e);
156
                }
157
        }
158
        
159
        /*
160
         * (non-Javadoc)
161
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
162
         */
163
        public void startLayer(String id, String name, String description, String srs) {
164
                //GML only can write one layer
165
                if (oneLayer){
166
                        //TODO: EXCEPCION DE NO PUEDO CON MAS DE UN LAYER
167
                }
168
                oneLayer = true;                
169
                try {
170
                        if (id != null){
171
                                writer.write("\n");
172
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
173
                                writer.write(id);
174
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
175
                        }
176
                        if (name != null){
177
                                writer.write("\n");
178
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
179
                                writer.write(name);
180
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
181
                        }
182
                        if (description != null){
183
                                writer.write("\n");
184
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
185
                                writer.write(description);
186
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
187
                        }
188
                        //TODO: EL SRS SE PIERDE DEBIDO A LA SEMANTICA DEL GML
189
                } catch (IOException e) {
190
                        getErrorHandler().addError(e);
191
                }        
192
        }        
193
        
194
        /*
195
         * (non-Javadoc)
196
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startFeature(java.lang.String, java.lang.String)
197
         */
198
        public void startFeature(String name, String id) {
199
                currentFeature = name;
200
                try {
201
                        FeatureMemberWriter.start(writer, name, getNamespacePrefix() , id);
202
                } catch (IOException e) {
203
                        getErrorHandler().addError(e);
204
                }
205
        }
206
        
207
        /*
208
         * (non-Javadoc)
209
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endFeature()
210
         */
211
        public void endFeature() {
212
                try {
213
                        FeatureMemberWriter.end(writer, currentFeature, getNamespacePrefix());
214
                } catch (IOException e) {
215
                        getErrorHandler().addError(e);
216
                }
217
                currentFeature = null;
218
        }
219
        
220
        /*
221
         * (non-Javadoc)
222
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startElement(java.lang.String, java.lang.Object, java.lang.Object)
223
         */
224
        public void startElement(String name, Object value, Object type) {
225
                currentElement = name;
226
                try {
227
                        ElementWriter.start(writer, name, getNamespacePrefix(), value, type);
228
                } catch (IOException e) {
229
                        getErrorHandler().addError(e);
230
                }
231
                
232
        }
233
        
234
        /*
235
         * (non-Javadoc)
236
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endElement()
237
         */
238
        public void endElement() {
239
                try {
240
                        ElementWriter.end(writer, currentElement, getNamespacePrefix());
241
                } catch (IOException e) {
242
                        getErrorHandler().addError(e);
243
                }
244
                currentElement = null;                
245
        }
246
        
247
        /*
248
         * (non-Javadoc)
249
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
250
         */
251
        public void startPoint(String id, double x, double y, double z, String srs) {
252
                try {
253
                        if (isMultiple){
254
                                PointMemberWriter.start(writer, x, y, z, srs, id);
255
                        }else{
256
                                PointWriter.start(writer, x, y, z, srs, id);
257
                        }
258
                } catch (IOException e) {
259
                        getErrorHandler().addError(e);
260
                }                
261
        }
262
        
263
        /*
264
         * (non-Javadoc)
265
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endPoint()
266
         */
267
        public void endPoint() {
268
                try {
269
                        if (isMultiple){
270
                                PointMemberWriter.end(writer);
271
                        }else{
272
                                PointWriter.end(writer);
273
                        }
274
                } catch (IOException e) {
275
                        getErrorHandler().addError(e);
276
                }
277
                
278
        }
279
        
280
        /*
281
         * (non-Javadoc)
282
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
283
         */
284
        public void startLineString(String id, double[] x, double[] y, double[] z, String srs) {
285
                try {
286
                        if (isMultiple){
287
                                LineStringMemberWriter.start(writer, x, y, z, srs, id);
288
                        }else{
289
                                LineStringWriter.start(writer, x, y, z, srs, id);
290
                        }
291
                } catch (IOException e) {
292
                        getErrorHandler().addError(e);
293
                }                
294
        }
295
        
296
        /*
297
         * (non-Javadoc)
298
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endLineString()
299
         */
300
        public void endLineString() {
301
                try {
302
                        if (isMultiple){
303
                                LineStringMemberWriter.end(writer);
304
                        }else{
305
                                LineStringWriter.end(writer);
306
                        }
307
                } catch (IOException e) {
308
                        getErrorHandler().addError(e);
309
                }                
310
        }
311
        
312
        /*
313
         * (non-Javadoc)
314
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
315
         */
316
        public void startBbox(String id, double[] x, double[] y, double[] z, String srs) {
317
                try {
318
                        BoundedByWriter.start(writer, x, y, z, srs, id);
319
                } catch (IOException e) {
320
                        getErrorHandler().addError(e);
321
                }                
322
        }
323
        
324
        /*
325
         * (non-Javadoc)
326
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endBbox()
327
         */
328
        public void endBbox() {
329
                try {
330
                        BoundedByWriter.end(writer);
331
                } catch (IOException e) {
332
                        getErrorHandler().addError(e);
333
                }                        
334
        }
335
        
336
        /*
337
         * (non-Javadoc)
338
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startLinearRing(java.lang.String, double[], double[], double[], java.lang.String)
339
         */
340
        public void startLinearRing(String id, double[] x, double[] y, double[] z, String srs) {
341
                try {
342
                        LinearRingWriter.start(writer, x, y, z, srs, id);
343
                } catch (IOException e) {
344
                        getErrorHandler().addError(e);
345
                }                        
346
        }
347
        
348
        /*
349
         * (non-Javadoc)
350
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLinearRing()
351
         */
352
        public void endLinearRing() {
353
                try {
354
                        LinearRingWriter.end(writer);
355
                } catch (IOException e) {
356
                        getErrorHandler().addError(e);
357
                }                
358
        }
359
        
360
        /*
361
         * (non-Javadoc)
362
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startPolygon(java.lang.String, double[], double[], double[], java.lang.String)
363
         */
364
        public void startPolygon(String id, double[] x, double[] y, double[] z, String srs) {
365
                try {
366
                        if (isMultiple){
367
                                PolygonMemberWriter.start(writer, x, y, z, srs, id);
368
                        }else{
369
                                PolygonWriter.start(writer, x, y, z, srs, id);
370
                        }
371
                } catch (IOException e) {
372
                        getErrorHandler().addError(e);
373
                }
374
        }
375
        
376
        /*
377
         * (non-Javadoc)
378
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endPolygon()
379
         */
380
        public void endPolygon() {
381
                try {
382
                        if (isMultiple){
383
                                PolygonMemberWriter.end(writer);
384
                        }else{
385
                                PolygonWriter.end(writer);
386
                        }
387
                } catch (IOException e) {
388
                        getErrorHandler().addError(e);
389
                }        
390
        }
391
        
392
        /*
393
         * (non-Javadoc)
394
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startInnerBoundary(java.lang.String, double[], double[], double[], java.lang.String)
395
         */
396
        public void startInnerBoundary(String id, double[] x, double[] y, double[] z, String srs) {
397
                try {
398
                        InnerBoundaryIs.start(writer, x, y, z);
399
                } catch (IOException e) {
400
                        getErrorHandler().addError(e);
401
                }
402
        }
403
        
404
        /*
405
         * (non-Javadoc)
406
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endInnerBoundary()
407
         */
408
        public void endInnerBoundary() {
409
                try {
410
                        InnerBoundaryIs.end(writer);
411
                } catch (IOException e) {
412
                        getErrorHandler().addError(e);
413
                }        
414
        }
415
        
416
        /*
417
         * (non-Javadoc)
418
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiPoint(java.lang.String, java.lang.String)
419
         */
420
        public void startMultiPoint(String id, String srs) {
421
                isMultiple = true;
422
                try {
423
                        MultiPointWriter.start(writer, srs, id);
424
                } catch (IOException e) {
425
                        getErrorHandler().addError(e);
426
                }
427
        }
428
        
429
        /*
430
         * (non-Javadoc)
431
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMuliPoint()
432
         */
433
        public void endMuliPoint() {
434
                isMultiple = false;
435
                try {
436
                        MultiPointWriter.end(writer);
437
                } catch (IOException e) {
438
                        getErrorHandler().addError(e);
439
                }
440
        }
441

    
442
        /*
443
         * (non-Javadoc)
444
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiLineString(java.lang.String, java.lang.String)
445
         */
446
        public void startMultiLineString(String id, String srs) {
447
                isMultiple = true;
448
                try {
449
                        MultiLineStringWriter.start(writer, srs, id);
450
                } catch (IOException e) {
451
                        getErrorHandler().addError(e);
452
                }
453
        }
454
        
455
        /*
456
         * (non-Javadoc)
457
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMultiLineString()
458
         */
459
        public void endMultiLineString() {
460
                isMultiple = false;
461
                try {
462
                        MultiLineStringWriter.end(writer);
463
                } catch (IOException e) {
464
                        getErrorHandler().addError(e);
465
                }
466
        }
467

    
468
        /*
469
         * (non-Javadoc)
470
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiPolygon(java.lang.String, java.lang.String)
471
         */
472
        public void startMultiPolygon(String id, String srs) {
473
                isMultiple = true;
474
                try {
475
                        MultiPolygonWriter.start(writer, srs, id);
476
                } catch (IOException e) {
477
                        getErrorHandler().addError(e);
478
                }                
479
        }
480
        
481
        /*
482
         * (non-Javadoc)
483
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMultiPolygon()
484
         */
485
        public void endMultiPolygon() {
486
                isMultiple = false;
487
                try {
488
                        MultiPolygonWriter.end(writer);
489
                } catch (IOException e) {
490
                        getErrorHandler().addError(e);
491
                }                
492
        }        
493
}