Statistics
| Revision:

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

History | View | Annotate | Download (9.44 KB)

1 11158 jorpiell
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 11171 jorpiell
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.BoxWriter;
15
import org.gvsig.gpe.gml.writer.geometries.LineStringWriter;
16 11178 jorpiell
import org.gvsig.gpe.gml.writer.geometries.LinearRingWriter;
17 11171 jorpiell
import org.gvsig.gpe.gml.writer.geometries.PointWriter;
18 11178 jorpiell
import org.gvsig.gpe.gml.writer.geometries.PolygonWriter;
19 11158 jorpiell
import org.gvsig.gpe.xml.writer.GPEXmlWriterHandler;
20
21 11171 jorpiell
import sun.rmi.runtime.GetThreadPoolAction;
22
23 11158 jorpiell
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
24
 *
25
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
26
 *
27
 * This program is free software; you can redistribute it and/or
28
 * modify it under the terms of the GNU General Public License
29
 * as published by the Free Software Foundation; either version 2
30
 * of the License, or (at your option) any later version.
31
 *
32
 * This program is distributed in the hope that it will be useful,
33
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
34
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
35
 * GNU General Public License for more details.
36
 *
37
 * You should have received a copy of the GNU General Public License
38
 * along with this program; if not, write to the Free Software
39
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
40
 *
41
 * For more information, contact:
42
 *
43
 *  Generalitat Valenciana
44
 *   Conselleria d'Infraestructures i Transport
45
 *   Av. Blasco Ib??ez, 50
46
 *   46010 VALENCIA
47
 *   SPAIN
48
 *
49
 *      +34 963862235
50
 *   gvsig@gva.es
51
 *      www.gvsig.gva.es
52
 *
53
 *    or
54
 *
55
 *   IVER T.I. S.A
56
 *   Salamanca 50
57
 *   46005 Valencia
58
 *   Spain
59
 *
60
 *   +34 963163400
61
 *   dac@iver.es
62
 */
63
/* CVS MESSAGES:
64
 *
65
 * $Id$
66
 * $Log$
67 11178 jorpiell
 * Revision 1.3  2007-04-13 07:17:57  jorpiell
68
 * Add the writting tests for the simple geometries
69
 *
70
 * Revision 1.2  2007/04/12 17:06:44  jorpiell
71 11171 jorpiell
 * First GML writing tests
72
 *
73
 * Revision 1.1  2007/04/12 10:23:41  jorpiell
74 11158 jorpiell
 * Add some writers and the GPEXml parser
75
 *
76
 *
77
 */
78
/**
79
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
80
 */
81
public class GPEGmlWriterHandler extends GPEXmlWriterHandler{
82 11171 jorpiell
        private boolean oneLayer = false;
83
        private String currentFeature = null;
84
        private String currentElement = null;
85
86
        public GPEGmlWriterHandler(String format, File file,GPEErrorHandler errorHandler) throws IOException {
87
                super(format, file, errorHandler);
88 11158 jorpiell
        }
89
90
        /*
91
         * (non-Javadoc)
92
         * @see org.gvsig.gpe.xml.writer.GPEXmlWriterHandler#createOutputStream()
93
         */
94
        protected Writer createWriter() throws IOException {
95
                return new FileWriter(getFile());
96
        }
97 11171 jorpiell
98
        /*
99
         * (non-Javadoc)
100
         * @see org.gvsig.gpe.writer.GPEWriterHandler#initialize()
101
         */
102
        public void initialize(){
103
                try {
104
                        writer.write("\n");
105
                        writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION);
106
//                        Write the local namespace
107
                        String prefix = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_PREFIX);
108
                        String uri = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_URI);
109
                        if ((prefix != null) && (uri != null)){
110
                                writer.write(" " + GMLTags.XML_NAMESPACE + ":" + prefix + "=\"");
111
                                writer.write(uri + "\" ");
112
                        }
113
                        writer.write(" " + GMLTags.NAMESPACE_GML);
114
                        writer.write(" " + GMLTags.NAMESPACE_XML);
115
                        if (uri != null){
116
                                writer.write(" " + GMLTags.XML_XSI + ":" + GMLTags.XML_SCHEMA_LOCATION + "=\"");
117
                                writer.write(uri + " " + "ESQUEMA.XSD" + "\"");
118
                        }
119
                        writer.write(">");
120
                } catch (IOException e) {
121
                        getErrorHandler().addError(e);
122
                }
123
        }
124
125
        /*
126
         * (non-Javadoc)
127
         * @see org.gvsig.gpe.writer.GPEWriterHandler#close()
128
         */
129
        public void close(){
130
                try {
131
                        writer.write("\n");
132
                        writer.write("</" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION + ">");
133
                        writer.flush();
134
                        writer.close();
135
                } catch (IOException e) {
136
                        getErrorHandler().addError(e);
137
                }
138
        }
139
140
        /*
141
         * (non-Javadoc)
142
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
143
         */
144
        public void startLayer(String id, String name, String description, String srs) {
145
                //GML only can write one layer
146
                if (oneLayer){
147
                        //TODO: EXCEPCION DE NO PUEDO CON MAS DE UN LAYER
148
                }
149
                oneLayer = true;
150
                try {
151
                        if (id != null){
152
                                writer.write("\n");
153
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
154
                                writer.write(id);
155
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
156
                        }
157
                        if (name != null){
158
                                writer.write("\n");
159
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
160
                                writer.write(name);
161
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
162
                        }
163
                        if (description != null){
164
                                writer.write("\n");
165
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
166
                                writer.write(description);
167
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
168
                        }
169
                        //TODO: EL SRS SE PIERDE DEBIDO A LA SEMANTICA DEL GML
170
                } catch (IOException e) {
171
                        getErrorHandler().addError(e);
172
                }
173
        }
174
175
        /*
176
         * (non-Javadoc)
177
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startFeature(java.lang.String, java.lang.String)
178
         */
179
        public void startFeature(String name, String id) {
180
                currentFeature = name;
181
                try {
182
                        FeatureMemberWriter.start(writer, name, getNamespacePrefix() , id);
183
                } catch (IOException e) {
184
                        getErrorHandler().addError(e);
185
                }
186
        }
187
188
        /*
189
         * (non-Javadoc)
190
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endFeature()
191
         */
192
        public void endFeature() {
193
                try {
194
                        FeatureMemberWriter.end(writer, currentFeature, getNamespacePrefix());
195
                } catch (IOException e) {
196
                        getErrorHandler().addError(e);
197
                }
198
                currentFeature = null;
199
        }
200
201
        /*
202
         * (non-Javadoc)
203
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startElement(java.lang.String, java.lang.Object, java.lang.Object)
204
         */
205
        public void startElement(String name, Object value, Object type) {
206
                currentElement = name;
207
                try {
208
                        ElementWriter.start(writer, name, getNamespacePrefix(), value, type);
209
                } catch (IOException e) {
210
                        getErrorHandler().addError(e);
211
                }
212
213
        }
214
215
        /*
216
         * (non-Javadoc)
217
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endElement()
218
         */
219
        public void endElement() {
220
                try {
221
                        ElementWriter.end(writer, currentElement, getNamespacePrefix());
222
                } catch (IOException e) {
223
                        getErrorHandler().addError(e);
224
                }
225
                currentElement = null;
226
        }
227
228
        /*
229
         * (non-Javadoc)
230
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
231
         */
232
        public void startPoint(String id, double x, double y, double z, String srs) {
233
                try {
234
                        PointWriter.start(writer, x, y, z, srs, id);
235
                } catch (IOException e) {
236
                        getErrorHandler().addError(e);
237
                }
238
        }
239
240
        /*
241
         * (non-Javadoc)
242
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endPoint()
243
         */
244
        public void endPoint() {
245
                try {
246
                        PointWriter.end(writer);
247
                } catch (IOException e) {
248
                        getErrorHandler().addError(e);
249
                }
250
251
        }
252
253
        /*
254
         * (non-Javadoc)
255
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
256
         */
257
        public void startLineString(String id, double[] x, double[] y, double[] z, String srs) {
258
                try {
259
                        LineStringWriter.start(writer, x, y, z, srs, id);
260
                } catch (IOException e) {
261
                        getErrorHandler().addError(e);
262
                }
263
        }
264
265
        /*
266
         * (non-Javadoc)
267
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endLineString()
268
         */
269
        public void endLineString() {
270
                try {
271
                        LineStringWriter.end(writer);
272
                } catch (IOException e) {
273
                        getErrorHandler().addError(e);
274
                }
275
        }
276
277
        /*
278
         * (non-Javadoc)
279
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
280
         */
281
        public void startBbox(String id, double[] x, double[] y, double[] z, String srs) {
282
                try {
283
                        BoxWriter.start(writer, x, y, z, srs, id);
284
                } catch (IOException e) {
285
                        getErrorHandler().addError(e);
286
                }
287
        }
288
289
        /*
290
         * (non-Javadoc)
291
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endBbox()
292
         */
293
        public void endBbox() {
294
                try {
295
                        BoxWriter.end(writer);
296
                } catch (IOException e) {
297
                        getErrorHandler().addError(e);
298
                }
299
        }
300 11178 jorpiell
301
        /*
302
         * (non-Javadoc)
303
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startLinearRing(java.lang.String, double[], double[], double[], java.lang.String)
304
         */
305
        public void startLinearRing(String id, double[] x, double[] y, double[] z, String srs) {
306
                try {
307
                        LinearRingWriter.start(writer, x, y, z, srs, id);
308
                } catch (IOException e) {
309
                        getErrorHandler().addError(e);
310
                }
311
        }
312
313
        /*
314
         * (non-Javadoc)
315
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endLinearRing()
316
         */
317
        public void endLinearRing() {
318
                try {
319
                        LinearRingWriter.end(writer);
320
                } catch (IOException e) {
321
                        getErrorHandler().addError(e);
322
                }
323
        }
324
325
        /*
326
         * (non-Javadoc)
327
         * @see org.gvsig.gpe.writers.GPEWriterHandler#startPolygon(java.lang.String, double[], double[], double[], java.lang.String)
328
         */
329
        public void startPolygon(String id, double[] x, double[] y, double[] z, String srs) {
330
                try {
331
                        PolygonWriter.start(writer, x, y, z, srs, id);
332
                } catch (IOException e) {
333
                        getErrorHandler().addError(e);
334
                }
335
        }
336
337
        /*
338
         * (non-Javadoc)
339
         * @see org.gvsig.gpe.writers.GPEWriterHandler#endPolygon()
340
         */
341
        public void endPolygon() {
342
                try {
343
                        PolygonWriter.end(writer);
344
                } catch (IOException e) {
345
                        getErrorHandler().addError(e);
346
                }
347
        }
348 11158 jorpiell
}