Statistics
| Revision:

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

History | View | Annotate | Download (13.4 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 org.gvsig.gpe.xml.writer.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.DescriptionWriter;
13
import org.gvsig.gpe.gml.writer.features.ElementWriter;
14
import org.gvsig.gpe.gml.writer.features.FeatureMemberWriter;
15
import org.gvsig.gpe.gml.writer.features.GidWriter;
16
import org.gvsig.gpe.gml.writer.features.NameWriter;
17
import org.gvsig.gpe.gml.writer.geometries.BoundedByWriter;
18
import org.gvsig.gpe.gml.writer.geometries.BoxWriter;
19
import org.gvsig.gpe.gml.writer.geometries.InnerBoundaryIs;
20
import org.gvsig.gpe.gml.writer.geometries.LineStringMemberWriter;
21
import org.gvsig.gpe.gml.writer.geometries.LineStringWriter;
22
import org.gvsig.gpe.gml.writer.geometries.LinearRingWriter;
23
import org.gvsig.gpe.gml.writer.geometries.MultiLineStringWriter;
24
import org.gvsig.gpe.gml.writer.geometries.MultiPointWriter;
25
import org.gvsig.gpe.gml.writer.geometries.MultiPolygonWriter;
26
import org.gvsig.gpe.gml.writer.geometries.PointMemberWriter;
27
import org.gvsig.gpe.gml.writer.geometries.PointWriter;
28
import org.gvsig.gpe.gml.writer.geometries.PolygonMemberWriter;
29
import org.gvsig.gpe.gml.writer.geometries.PolygonWriter;
30
import org.gvsig.gpe.xml.writer.GPEXmlWriterHandler;
31

    
32
import sun.rmi.runtime.GetThreadPoolAction;
33

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

    
124
        /*
125
         * (non-Javadoc)
126
         * @see org.gvsig.gpe.xml.writer.GPEXmlWriterHandler#createOutputStream()
127
         */
128
        protected Writer createWriter() throws IOException {
129
                return new Writer(new FileWriter(getOutputFile()));
130
        }
131
        
132
        /*
133
         * (non-Javadoc)
134
         * @see org.gvsig.gpe.writers.GPEWriterHandler#getDefaultFormat()
135
         */
136
        public String getDefaultFormat() {
137
                return "GML";
138
        }
139

    
140
        /*
141
         * (non-Javadoc)
142
         * @see org.gvsig.gpe.writers.GPEWriterHandler#getDefaultVersion()
143
         */
144
        public String getDefaultVersion() {
145
                return "2.1.2";
146
        }        
147
        
148
        /*
149
         * (non-Javadoc)
150
         * @see org.gvsig.gpe.writer.GPEWriterHandler#initialize()
151
         */
152
        public void initialize(){
153
                try {
154
                        initXmlHeader();
155
                        writer.write("\n");
156
                        writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION);
157
//                        Write the local namespace
158
                        String prefix = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_PREFIX);
159
                        String uri = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_URI);
160
                        if ((prefix != null) && (uri != null)){
161
                                writer.write(" " + GMLTags.XML_NAMESPACE + ":" + prefix + "=\"");
162
                                writer.write(uri + "\" ");                                
163
                        }
164
                        writer.write(" " + GMLTags.NAMESPACE_GML);
165
                        writer.write(" " + GMLTags.NAMESPACE_XML);
166
                        if (uri != null){
167
                                writer.write(" " + GMLTags.XML_XSI + ":" + GMLTags.XML_SCHEMA_LOCATION + "=\"");
168
                                writer.write(uri + " " + GPEDefaults.getProperty(GPEDefaults.XSD_SCHEMA_FILE) + "\"");
169
                        }
170
                        writer.write(">");
171
                } catch (IOException e) {
172
                        getErrorHandler().addError(e);
173
                }                
174
        }
175
        
176
        /*
177
         * (non-Javadoc)
178
         * @see org.gvsig.gpe.writer.GPEWriterHandler#close()
179
         */
180
        public void close(){
181
                try {
182
                        writer.write("\n");
183
                        writer.write("</" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION + ">");
184
                        writer.flush();
185
                        writer.close();
186
                } catch (IOException e) {
187
                        getErrorHandler().addError(e);
188
                }
189
        }
190
        
191
        /*
192
         * (non-Javadoc)
193
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
194
         */
195
        public void startLayer(String id, String name, String description, String srs) {
196
                //GML only can write one layer
197
                if (oneLayer){
198
                        //TODO: EXCEPCION DE NO PUEDO CON MAS DE UN LAYER
199
                }
200
                oneLayer = true;                
201
                try {
202
                        GidWriter.write(writer, id);
203
                        NameWriter.write(writer, name);
204
                        DescriptionWriter.write(writer, description);
205
                        //TODO: EL SRS SE PIERDE DEBIDO A LA SEMANTICA DEL GML
206
                } catch (IOException e) {
207
                        getErrorHandler().addError(e);
208
                }        
209
        }        
210
        
211
        /*
212
         * (non-Javadoc)
213
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLayer()
214
         */
215
        public void endLayer() {
216

    
217
        }
218
        
219
        /*
220
         * (non-Javadoc)
221
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startFeature(java.lang.String, java.lang.String)
222
         */
223
        public void startFeature(String name, String id) {
224
                currentFeature = name;
225
                try {
226
                        FeatureMemberWriter.start(writer, name, getNamespacePrefix() , id);
227
                } catch (IOException e) {
228
                        getErrorHandler().addError(e);
229
                }
230
        }
231
        
232
        /*
233
         * (non-Javadoc)
234
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endFeature()
235
         */
236
        public void endFeature() {
237
                try {
238
                        FeatureMemberWriter.end(writer, currentFeature, getNamespacePrefix());
239
                } catch (IOException e) {
240
                        getErrorHandler().addError(e);
241
                }
242
                currentFeature = null;
243
        }
244
        
245
        /*
246
         * (non-Javadoc)
247
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startElement(java.lang.String, java.lang.Object, java.lang.Object)
248
         */
249
        public void startElement(String name, Object value, Object type) {
250
                currentElement = name;
251
                try {
252
                        ElementWriter.start(writer, name, getNamespacePrefix(), value, type);
253
                } catch (IOException e) {
254
                        getErrorHandler().addError(e);
255
                }
256
                
257
        }
258
        
259
        /*
260
         * (non-Javadoc)
261
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endElement()
262
         */
263
        public void endElement() {
264
                try {
265
                        ElementWriter.end(writer, currentElement, getNamespacePrefix());
266
                } catch (IOException e) {
267
                        getErrorHandler().addError(e);
268
                }
269
                currentElement = null;                
270
        }
271
        
272
        /*
273
         * (non-Javadoc)
274
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
275
         */
276
        public void startPoint(String id, double x, double y, double z, String srs) {
277
                try {
278
                        if (isMultiple){
279
                                PointMemberWriter.start(writer, x, y, z, srs, id);
280
                        }else{
281
                                PointWriter.start(writer, x, y, z, srs, id);
282
                        }
283
                } catch (IOException e) {
284
                        getErrorHandler().addError(e);
285
                }                
286
        }
287
        
288
        /*
289
         * (non-Javadoc)
290
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endPoint()
291
         */
292
        public void endPoint() {
293
                try {
294
                        if (isMultiple){
295
                                PointMemberWriter.end(writer);
296
                        }else{
297
                                PointWriter.end(writer);
298
                        }
299
                } catch (IOException e) {
300
                        getErrorHandler().addError(e);
301
                }
302
                
303
        }
304
        
305
        /*
306
         * (non-Javadoc)
307
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
308
         */
309
        public void startLineString(String id, double[] x, double[] y, double[] z, String srs) {
310
                try {
311
                        if (isMultiple){
312
                                LineStringMemberWriter.start(writer, x, y, z, srs, id);
313
                        }else{
314
                                LineStringWriter.start(writer, x, y, z, srs, id);
315
                        }
316
                } catch (IOException e) {
317
                        getErrorHandler().addError(e);
318
                }                
319
        }
320
        
321
        /*
322
         * (non-Javadoc)
323
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endLineString()
324
         */
325
        public void endLineString() {
326
                try {
327
                        if (isMultiple){
328
                                LineStringMemberWriter.end(writer);
329
                        }else{
330
                                LineStringWriter.end(writer);
331
                        }
332
                } catch (IOException e) {
333
                        getErrorHandler().addError(e);
334
                }                
335
        }
336
        
337
        /*
338
         * (non-Javadoc)
339
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
340
         */
341
        public void startBbox(String id, double[] x, double[] y, double[] z, String srs) {
342
                try {
343
                        BoundedByWriter.start(writer, x, y, z, srs, id);
344
                } catch (IOException e) {
345
                        getErrorHandler().addError(e);
346
                }                
347
        }
348
        
349
        /*
350
         * (non-Javadoc)
351
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endBbox()
352
         */
353
        public void endBbox() {
354
                try {
355
                        BoundedByWriter.end(writer);
356
                } catch (IOException e) {
357
                        getErrorHandler().addError(e);
358
                }                        
359
        }
360
        
361
        /*
362
         * (non-Javadoc)
363
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startLinearRing(java.lang.String, double[], double[], double[], java.lang.String)
364
         */
365
        public void startLinearRing(String id, double[] x, double[] y, double[] z, String srs) {
366
                try {
367
                        LinearRingWriter.start(writer, x, y, z, srs, id);
368
                } catch (IOException e) {
369
                        getErrorHandler().addError(e);
370
                }                        
371
        }
372
        
373
        /*
374
         * (non-Javadoc)
375
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLinearRing()
376
         */
377
        public void endLinearRing() {
378
                try {
379
                        LinearRingWriter.end(writer);
380
                } catch (IOException e) {
381
                        getErrorHandler().addError(e);
382
                }                
383
        }
384
        
385
        /*
386
         * (non-Javadoc)
387
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startPolygon(java.lang.String, double[], double[], double[], java.lang.String)
388
         */
389
        public void startPolygon(String id, double[] x, double[] y, double[] z, String srs) {
390
                try {
391
                        if (isMultiple){
392
                                PolygonMemberWriter.start(writer, x, y, z, srs, id);
393
                        }else{
394
                                PolygonWriter.start(writer, x, y, z, srs, id);
395
                        }
396
                } catch (IOException e) {
397
                        getErrorHandler().addError(e);
398
                }
399
        }
400
        
401
        /*
402
         * (non-Javadoc)
403
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endPolygon()
404
         */
405
        public void endPolygon() {
406
                try {
407
                        if (isMultiple){
408
                                PolygonMemberWriter.end(writer);
409
                        }else{
410
                                PolygonWriter.end(writer);
411
                        }
412
                } catch (IOException e) {
413
                        getErrorHandler().addError(e);
414
                }        
415
        }
416
        
417
        /*
418
         * (non-Javadoc)
419
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startInnerBoundary(java.lang.String, double[], double[], double[], java.lang.String)
420
         */
421
        public void startInnerBoundary(String id, double[] x, double[] y, double[] z, String srs) {
422
                try {
423
                        InnerBoundaryIs.start(writer, x, y, z);
424
                } catch (IOException e) {
425
                        getErrorHandler().addError(e);
426
                }
427
        }
428
        
429
        /*
430
         * (non-Javadoc)
431
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endInnerBoundary()
432
         */
433
        public void endInnerBoundary() {
434
                try {
435
                        InnerBoundaryIs.end(writer);
436
                } catch (IOException e) {
437
                        getErrorHandler().addError(e);
438
                }        
439
        }
440
        
441
        /*
442
         * (non-Javadoc)
443
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiPoint(java.lang.String, java.lang.String)
444
         */
445
        public void startMultiPoint(String id, String srs) {
446
                isMultiple = true;
447
                try {
448
                        MultiPointWriter.start(writer, srs, id);
449
                } catch (IOException e) {
450
                        getErrorHandler().addError(e);
451
                }
452
        }
453
        
454
        /*
455
         * (non-Javadoc)
456
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMuliPoint()
457
         */
458
        public void endMuliPoint() {
459
                isMultiple = false;
460
                try {
461
                        MultiPointWriter.end(writer);
462
                } catch (IOException e) {
463
                        getErrorHandler().addError(e);
464
                }
465
        }
466

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

    
493
        /*
494
         * (non-Javadoc)
495
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startMultiPolygon(java.lang.String, java.lang.String)
496
         */
497
        public void startMultiPolygon(String id, String srs) {
498
                isMultiple = true;
499
                try {
500
                        MultiPolygonWriter.start(writer, srs, id);
501
                } catch (IOException e) {
502
                        getErrorHandler().addError(e);
503
                }                
504
        }
505
        
506
        /*
507
         * (non-Javadoc)
508
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endMultiPolygon()
509
         */
510
        public void endMultiPolygon() {
511
                isMultiple = false;
512
                try {
513
                        MultiPolygonWriter.end(writer);
514
                } catch (IOException e) {
515
                        getErrorHandler().addError(e);
516
                }                
517
        }
518
}