Statistics
| Revision:

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

History | View | Annotate | Download (8.04 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.BoxWriter;
15
import org.gvsig.gpe.gml.writer.geometries.LineStringWriter;
16
import org.gvsig.gpe.gml.writer.geometries.PointWriter;
17
import org.gvsig.gpe.xml.writer.GPEXmlWriterHandler;
18

    
19
import sun.rmi.runtime.GetThreadPoolAction;
20

    
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: GPEGmlWriterHandler.java 11171 2007-04-12 17:06:44Z jorpiell $
64
 * $Log$
65
 * Revision 1.2  2007-04-12 17:06:44  jorpiell
66
 * First GML writing tests
67
 *
68
 * Revision 1.1  2007/04/12 10:23:41  jorpiell
69
 * Add some writers and the GPEXml parser
70
 *
71
 *
72
 */
73
/**
74
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
75
 */
76
public class GPEGmlWriterHandler extends GPEXmlWriterHandler{
77
        private boolean oneLayer = false;
78
        private String currentFeature = null;
79
        private String currentElement = null;
80
        
81
        public GPEGmlWriterHandler(String format, File file,GPEErrorHandler errorHandler) throws IOException {
82
                super(format, file, errorHandler);                
83
        }
84

    
85
        /*
86
         * (non-Javadoc)
87
         * @see org.gvsig.gpe.xml.writer.GPEXmlWriterHandler#createOutputStream()
88
         */
89
        protected Writer createWriter() throws IOException {
90
                return new FileWriter(getFile());
91
        }
92
        
93
        /*
94
         * (non-Javadoc)
95
         * @see org.gvsig.gpe.writer.GPEWriterHandler#initialize()
96
         */
97
        public void initialize(){
98
                try {
99
                        writer.write("\n");
100
                        writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION);
101
//                        Write the local namespace
102
                        String prefix = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_PREFIX);
103
                        String uri = GPEDefaults.getProperty(GPEDefaults.NAMESPACE_URI);
104
                        if ((prefix != null) && (uri != null)){
105
                                writer.write(" " + GMLTags.XML_NAMESPACE + ":" + prefix + "=\"");
106
                                writer.write(uri + "\" ");                                
107
                        }
108
                        writer.write(" " + GMLTags.NAMESPACE_GML);
109
                        writer.write(" " + GMLTags.NAMESPACE_XML);
110
                        if (uri != null){
111
                                writer.write(" " + GMLTags.XML_XSI + ":" + GMLTags.XML_SCHEMA_LOCATION + "=\"");
112
                                writer.write(uri + " " + "ESQUEMA.XSD" + "\"");
113
                        }
114
                        writer.write(">");
115
                } catch (IOException e) {
116
                        getErrorHandler().addError(e);
117
                }                
118
        }
119
        
120
        /*
121
         * (non-Javadoc)
122
         * @see org.gvsig.gpe.writer.GPEWriterHandler#close()
123
         */
124
        public void close(){
125
                try {
126
                        writer.write("\n");
127
                        writer.write("</" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_FEATURCOLLECTION + ">");
128
                        writer.flush();
129
                        writer.close();
130
                } catch (IOException e) {
131
                        getErrorHandler().addError(e);
132
                }
133
        }
134
        
135
        /*
136
         * (non-Javadoc)
137
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLayer(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
138
         */
139
        public void startLayer(String id, String name, String description, String srs) {
140
                //GML only can write one layer
141
                if (oneLayer){
142
                        //TODO: EXCEPCION DE NO PUEDO CON MAS DE UN LAYER
143
                }
144
                oneLayer = true;                
145
                try {
146
                        if (id != null){
147
                                writer.write("\n");
148
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
149
                                writer.write(id);
150
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_ID + ">");
151
                        }
152
                        if (name != null){
153
                                writer.write("\n");
154
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
155
                                writer.write(name);
156
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_NAME + ">");
157
                        }
158
                        if (description != null){
159
                                writer.write("\n");
160
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
161
                                writer.write(description);
162
                                writer.write("<" + GMLTags.GML_NAMESPACE + ":" + GMLTags.GML_DESCRIPTION + ">");
163
                        }
164
                        //TODO: EL SRS SE PIERDE DEBIDO A LA SEMANTICA DEL GML
165
                } catch (IOException e) {
166
                        getErrorHandler().addError(e);
167
                }        
168
        }        
169
        
170
        /*
171
         * (non-Javadoc)
172
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startFeature(java.lang.String, java.lang.String)
173
         */
174
        public void startFeature(String name, String id) {
175
                currentFeature = name;
176
                try {
177
                        FeatureMemberWriter.start(writer, name, getNamespacePrefix() , id);
178
                } catch (IOException e) {
179
                        getErrorHandler().addError(e);
180
                }
181
        }
182
        
183
        /*
184
         * (non-Javadoc)
185
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endFeature()
186
         */
187
        public void endFeature() {
188
                try {
189
                        FeatureMemberWriter.end(writer, currentFeature, getNamespacePrefix());
190
                } catch (IOException e) {
191
                        getErrorHandler().addError(e);
192
                }
193
                currentFeature = null;
194
        }
195
        
196
        /*
197
         * (non-Javadoc)
198
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startElement(java.lang.String, java.lang.Object, java.lang.Object)
199
         */
200
        public void startElement(String name, Object value, Object type) {
201
                currentElement = name;
202
                try {
203
                        ElementWriter.start(writer, name, getNamespacePrefix(), value, type);
204
                } catch (IOException e) {
205
                        getErrorHandler().addError(e);
206
                }
207
                
208
        }
209
        
210
        /*
211
         * (non-Javadoc)
212
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endElement()
213
         */
214
        public void endElement() {
215
                try {
216
                        ElementWriter.end(writer, currentElement, getNamespacePrefix());
217
                } catch (IOException e) {
218
                        getErrorHandler().addError(e);
219
                }
220
                currentElement = null;                
221
        }
222
        
223
        /*
224
         * (non-Javadoc)
225
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startPoint(java.lang.String, double, double, double, java.lang.String)
226
         */
227
        public void startPoint(String id, double x, double y, double z, String srs) {
228
                try {
229
                        PointWriter.start(writer, x, y, z, srs, id);
230
                } catch (IOException e) {
231
                        getErrorHandler().addError(e);
232
                }                
233
        }
234
        
235
        /*
236
         * (non-Javadoc)
237
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endPoint()
238
         */
239
        public void endPoint() {
240
                try {
241
                        PointWriter.end(writer);
242
                } catch (IOException e) {
243
                        getErrorHandler().addError(e);
244
                }
245
                
246
        }
247
        
248
        /*
249
         * (non-Javadoc)
250
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startLineString(java.lang.String, double[], double[], double[], java.lang.String)
251
         */
252
        public void startLineString(String id, double[] x, double[] y, double[] z, String srs) {
253
                try {
254
                        LineStringWriter.start(writer, x, y, z, srs, id);
255
                } catch (IOException e) {
256
                        getErrorHandler().addError(e);
257
                }                
258
        }
259
        
260
        /*
261
         * (non-Javadoc)
262
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endLineString()
263
         */
264
        public void endLineString() {
265
                try {
266
                        LineStringWriter.end(writer);
267
                } catch (IOException e) {
268
                        getErrorHandler().addError(e);
269
                }                
270
        }
271
        
272
        /*
273
         * (non-Javadoc)
274
         * @see org.gvsig.gpe.writer.GPEWriterHandler#startBbox(java.lang.String, double[], double[], double[], java.lang.String)
275
         */
276
        public void startBbox(String id, double[] x, double[] y, double[] z, String srs) {
277
                try {
278
                        BoxWriter.start(writer, x, y, z, srs, id);
279
                } catch (IOException e) {
280
                        getErrorHandler().addError(e);
281
                }                
282
        }
283
        
284
        /*
285
         * (non-Javadoc)
286
         * @see org.gvsig.gpe.writer.GPEWriterHandler#endBbox()
287
         */
288
        public void endBbox() {
289
                try {
290
                        BoxWriter.end(writer);
291
                } catch (IOException e) {
292
                        getErrorHandler().addError(e);
293
                }                        
294
        }
295

    
296

    
297
}