Statistics
| Revision:

root / branches / piloto3d / libraries / libFMap / src / com / iver / cit / gvsig / fmap / drivers / gml / GMLTypesConversor.java @ 9524

History | View | Annotate | Download (10 KB)

1
package com.iver.cit.gvsig.fmap.drivers.gml;
2

    
3
import java.sql.Types;
4

    
5
import org.exolab.castor.xml.schema.SchemaException;
6
import org.geotools.feature.AttributeType;
7
import org.geotools.feature.AttributeTypeFactory;
8
import org.geotools.feature.FeatureType;
9
import org.geotools.feature.FeatureTypeBuilder;
10

    
11
import com.iver.cit.gvsig.fmap.core.FShape;
12
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
13
import com.iver.cit.gvsig.fmap.drivers.LayerDefinition;
14
import com.vividsolutions.jts.geom.Geometry;
15
import com.vividsolutions.jts.geom.GeometryCollection;
16
import com.vividsolutions.jts.geom.LineString;
17
import com.vividsolutions.jts.geom.MultiLineString;
18
import com.vividsolutions.jts.geom.MultiPoint;
19
import com.vividsolutions.jts.geom.MultiPolygon;
20
import com.vividsolutions.jts.geom.Point;
21
import com.vividsolutions.jts.geom.Polygon;
22
import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Float;
23

    
24
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
25
 *
26
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
27
 *
28
 * This program is free software; you can redistribute it and/or
29
 * modify it under the terms of the GNU General Public License
30
 * as published by the Free Software Foundation; either version 2
31
 * of the License, or (at your option) any later version.
32
 *
33
 * This program is distributed in the hope that it will be useful,
34
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
35
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
36
 * GNU General Public License for more details.
37
 *
38
 * You should have received a copy of the GNU General Public License
39
 * along with this program; if not, write to the Free Software
40
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
41
 *
42
 * For more information, contact:
43
 *
44
 *  Generalitat Valenciana
45
 *   Conselleria d'Infraestructures i Transport
46
 *   Av. Blasco Ib??ez, 50
47
 *   46010 VALENCIA
48
 *   SPAIN
49
 *
50
 *      +34 963862235
51
 *   gvsig@gva.es
52
 *      www.gvsig.gva.es
53
 *
54
 *    or
55
 *
56
 *   IVER T.I. S.A
57
 *   Salamanca 50
58
 *   46005 Valencia
59
 *   Spain
60
 *
61
 *   +34 963163400
62
 *   dac@iver.es
63
 */
64
/* CVS MESSAGES:
65
 *
66
 * $Id: GMLTypesConversor.java 9524 2007-01-03 15:14:45Z sbayarri $
67
 * $Log$
68
 * Revision 1.4.2.1  2007-01-03 15:12:33  sbayarri
69
 * v10 synch & 3D
70
 *
71
 * Revision 1.4.4.2  2006/11/15 00:08:24  jjdelcerro
72
 * *** empty log message ***
73
 *
74
 * Revision 1.6  2006/10/02 08:41:23  jorpiell
75
 * Actualizados los drivers de GML
76
 *
77
 * Revision 1.4.4.1  2006/09/19 12:22:48  jorpiell
78
 * Ya no se depende de geotools
79
 *
80
 * Revision 1.5  2006/09/18 12:09:43  jorpiell
81
 * El driver de GML ya no depende de geotools
82
 *
83
 * Revision 1.4  2006/07/24 08:28:09  jorpiell
84
 * A?adidos algunos tipos de datos en la conversi?n de java a gvSIG
85
 *
86
 * Revision 1.3  2006/07/24 07:36:40  jorpiell
87
 * Se han hecho un cambio en los nombres de los metodos para clarificar
88
 *
89
 * Revision 1.2  2006/07/21 08:57:28  jorpiell
90
 * Se ha a?adido la exportaci?n de capas de puntos
91
 *
92
 * Revision 1.1  2006/07/19 12:29:39  jorpiell
93
 * A?adido el driver de GML
94
 *
95
 *
96
 */
97
/**
98
 * Types conversor from GML to gvSIG
99
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
100
 */
101
public class GMLTypesConversor {
102

    
103
         /**
104
          * Make a conversion between the gvSIG LayerDefinition and a geotools
105
          * FeatureType.
106
          * @param schema
107
          * gvSIG feature schema that contains a list of attributes
108
          * @return
109
         * @throws SchemaException 
110
         * @throws  
111
          */
112
         public static FeatureType featureTypefromGvSIGToGeotools(LayerDefinition lyrDef) throws Exception{
113
                 FieldDescription[] fDescription = lyrDef.getFieldsDesc();
114
                 AttributeType[] types = new AttributeType[fDescription.length];
115
                 for(int i=0 ; i<fDescription.length ; i++){
116
                         types[i] = attributteTypefromGvSIGToGeotools(fDescription[i]);
117
                 }
118
                 String typeName = lyrDef.getName();
119
                 FeatureType featureType = FeatureTypeBuilder.newFeatureType(types,typeName);                                        
120
                 return featureType;
121
         }         
122
         
123
         
124
        /**
125
         * Make a conversion between the gvSIG FieldDescription and a geotools
126
         * AttributeType.
127
         * @param fDescription
128
         * gvSIG field description
129
         * @return
130
         */
131
         private static AttributeType attributteTypefromGvSIGToGeotools(FieldDescription fDescrition){
132
                 AttributeType type = AttributeTypeFactory.newAttributeType(fDescrition.getFieldName(),
133
                                 typesFromgvSIGtoGeotools(fDescrition.getFieldType()));
134
                 
135
                 return type;
136
         }        
137
         
138
         
139
         /**
140
          * Type conversor from gvSIG types to geotools types
141
          * @param type
142
          * @return
143
          */
144
         private static Class typesFromgvSIGtoGeotools(int type){
145
                 switch (type) {
146
         case Types.SMALLINT:
147
                 return Integer.class;
148
         case Types.BIT:
149
                 return Boolean.class;
150
         case Types.BOOLEAN:
151
                 return Boolean.class;
152
         case Types.VARCHAR:
153
                 return String.class;
154
         case Types.DOUBLE:
155
                 return Double.class;
156
         case Types.INTEGER:
157
                 return Integer.class;
158
         default:
159
                 return String.class;        
160
                 }
161
         } 
162
         
163
                /**        
164
                 * From gvSIG types to xlink types used in GML 
165
                 * @param gmlType
166
                 * @return
167
                 */
168
         public static String gvSIGToXlinkTypes(int type){
169
                 switch (type) {
170
                 case Types.BIT:
171
                         return "xs:boolean";
172
                 case Types.TINYINT:
173
                         return "xs:integer";
174
                 case Types.SMALLINT:
175
                         return "xs:integer";
176
                 case Types.INTEGER:
177
                         return "xs:double";
178
                 case Types.BIGINT: 
179
                         return "xs:integer";
180
                 case Types.FLOAT:
181
                         return "xs:float";
182
                 case Types.REAL:
183
                         return "xs:double";
184
                 case Types.DOUBLE:
185
                         return "xs:double";
186
                 case Types.NUMERIC:
187
                         return "xs:integer";
188
                 case Types.DECIMAL:
189
                         return "xs:float";
190
                 case Types.CHAR:
191
                         return "xs:string";
192
                 case Types.VARCHAR:
193
                         return "xs:string";
194
                 case Types.LONGVARCHAR: 
195
                         return "xs:string";
196
                 case Types.DATE:
197
                         return "xs:string";
198
                 case Types.TIME:
199
                         return "xs:string";
200
                 case Types.TIMESTAMP:
201
                         return "xs:string";
202
                 case Types.BINARY:
203
                         return "xs:boolean";
204
                 case Types.VARBINARY:
205
                         return "xs:string";
206
                 case Types.LONGVARBINARY:
207
                         return "xs:string";
208
                 case Types.NULL:
209
                         return "xs:string";
210
                 case Types.OTHER:
211
                         return "xs:string";
212
                 case Types.BOOLEAN:
213
                         return "xs:boolean";
214
         default:
215
                 return "xs:string";        
216
                 }
217
         }
218
         
219
                /**        
220
                 * From gvSIG to GML types
221
                 * @param gmlType
222
                 * @return
223
                 */
224
         public static String gvSIGToGMLTypes(int type){
225
                 switch (type) {
226
         case FShape.LINE:
227
                 return "gml:MultiLineStringPropertyType";
228
         case FShape.POINT:
229
                    return "gml:PointPropertyType";
230
         case FShape.MULTIPOINT:
231
                 return "gml:MultiPointPropertyType";
232
         case FShape.POLYGON:
233
                 return "gml:MultiPolygonPropertyType";
234
         default:
235
                 return "gml:GeometryPropertyType";        
236
                 }                
237
         }
238
         
239
        /**        
240
         * From GML to Java types
241
         * @param gmlType
242
         * @return
243
         */
244
        public static Class gmlToJavaTypes(String gmlType){
245
                if (gmlType.toUpperCase().compareTo("STRING") == 0){
246
                        return String.class;
247
                }
248
                if (gmlType.toUpperCase().compareTo("\"\"") == 0){
249
                        return String.class;
250
                }
251
                if (gmlType.toUpperCase().compareTo("INTEGER") == 0){
252
                        return Integer.class;
253
                }
254
                if (gmlType.toUpperCase().compareTo("INT") == 0){
255
                        return Integer.class;
256
                }
257
                if (gmlType.toUpperCase().compareTo("LONG") == 0){
258
                        return Long.class;
259
                }
260
                if (gmlType.toUpperCase().compareTo("DOUBLE") == 0){
261
                        return Double.class;
262
                }
263
                if (gmlType.toUpperCase().compareTo("FLOAT") == 0){
264
                        return Float.class;
265
                }
266
                if (gmlType.toUpperCase().compareTo("GEOMETRY") == 0){
267
                        return Geometry.class;
268
                }
269
                if (gmlType.toUpperCase().compareTo("GEOMETRYPROPERTYTYPE") == 0){
270
                        return Geometry.class;
271
                }
272
                if (gmlType.toUpperCase().compareTo("POINT") == 0){
273
                        return Point.class;
274
                }
275
                if (gmlType.toUpperCase().compareTo("POINTPROPERTYTYPE") == 0){
276
                        return Point.class;
277
                }
278
                if (gmlType.toUpperCase().compareTo("LINESTRING") == 0){
279
                        return LineString.class;
280
                }
281
                if (gmlType.toUpperCase().compareTo("LINESTRINGPROPERTYTYPE") == 0){
282
                        return LineString.class;
283
                }                  
284
                if (gmlType.toUpperCase().compareTo("POLYGON") == 0){
285
                        return Polygon.class;
286
                }
287
                if (gmlType.toUpperCase().compareTo("POLYGONPROPERTYTYPE") == 0){
288
                        return Polygon.class;
289
                }
290
                if (gmlType.toUpperCase().compareTo("MULTIPOINT") == 0){
291
                        return MultiPoint.class;
292
                }
293
                if (gmlType.toUpperCase().compareTo("MULTIPOINTPROPERTYTYPE") == 0){
294
                        return MultiPoint.class;
295
                }                  
296
                if (gmlType.toUpperCase().compareTo("MULTILINESTRING") == 0){
297
                        return  MultiLineString.class;
298
                }
299
                if (gmlType.toUpperCase().compareTo("MULTILINESTRINGPROPERTYTYPE") == 0){
300
                        return MultiLineString.class;
301
                }
302
                if (gmlType.toUpperCase().compareTo("MULTIPOLYGON") == 0){
303
                        return MultiPolygon.class;
304
                }
305
                if (gmlType.toUpperCase().compareTo("MULTIPOLYGONPROPERTYTYPE") == 0){
306
                        return MultiPolygon.class;
307
                }  
308
                if (gmlType.toUpperCase().compareTo("MULTIGEOMETRYPROPERTYTYPE") == 0){
309
                        return GeometryCollection.class;
310
                }
311
                if (gmlType.toUpperCase().compareTo("GEOMETRYCOLLECTION") == 0){
312
                        return GeometryCollection.class;
313
                }
314
                if (gmlType.toUpperCase().compareTo("GEOMETRYASSOCIATIONTYPE") == 0){
315
                        return Geometry.class;
316
                }  
317
                return String.class;
318
        }         
319
        
320
        /**
321
         * From Java to gvSIG types
322
         * @param type
323
         * @return
324
         */
325
        public static int javaToGvSIGTypes(Class type){
326
                if (type == String.class){
327
                        return Types.VARCHAR;
328
                }
329
                if (type == Integer.class){
330
                        return Types.INTEGER;
331
                }
332
                if (type == Double.class){
333
                        return Types.DOUBLE;
334
                }
335
                if (type == Float.class){
336
                        return Types.FLOAT;
337
                }
338
                if (type == Long.class){
339
                        return Types.INTEGER;
340
                }
341
                return Types.VARCHAR;
342
                
343
        }
344

    
345

    
346
        public static int gmlToGvSigType(String gmlType) {
347
                if (gmlType.toUpperCase().compareTo("STRING") == 0){
348
                        return Types.VARCHAR;
349
                }
350
                if (gmlType.toUpperCase().compareTo("\"\"") == 0){
351
                        return Types.VARCHAR;
352
                }
353
                if (gmlType.toUpperCase().compareTo("INTEGER") == 0){
354
                        return  Types.INTEGER;
355
                }
356
                if (gmlType.toUpperCase().compareTo("INT") == 0){
357
                        return Types.INTEGER;
358
                }
359
                if (gmlType.toUpperCase().compareTo("LONG") == 0){
360
                        return Types.INTEGER;
361
                }
362
                if (gmlType.toUpperCase().compareTo("DOUBLE") == 0){
363
                        return Types.DOUBLE;
364
                }
365
                if (gmlType.toUpperCase().compareTo("FLOAT") == 0){
366
                        return Types.DOUBLE;
367
                }
368
                return Types.VARCHAR;                
369
        }
370
}