Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / drivers / gml / GMLTypesConversor.java @ 7717

History | View | Annotate | Download (9.87 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 7717 2006-10-02 08:41:23Z jorpiell $
67
 * $Log$
68
 * Revision 1.6  2006-10-02 08:41:23  jorpiell
69
 * Actualizados los drivers de GML
70
 *
71
 * Revision 1.4.4.1  2006/09/19 12:22:48  jorpiell
72
 * Ya no se depende de geotools
73
 *
74
 * Revision 1.5  2006/09/18 12:09:43  jorpiell
75
 * El driver de GML ya no depende de geotools
76
 *
77
 * Revision 1.4  2006/07/24 08:28:09  jorpiell
78
 * A?adidos algunos tipos de datos en la conversi?n de java a gvSIG
79
 *
80
 * Revision 1.3  2006/07/24 07:36:40  jorpiell
81
 * Se han hecho un cambio en los nombres de los metodos para clarificar
82
 *
83
 * Revision 1.2  2006/07/21 08:57:28  jorpiell
84
 * Se ha a?adido la exportaci?n de capas de puntos
85
 *
86
 * Revision 1.1  2006/07/19 12:29:39  jorpiell
87
 * A?adido el driver de GML
88
 *
89
 *
90
 */
91
/**
92
 * Types conversor from GML to gvSIG
93
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
94
 */
95
public class GMLTypesConversor {
96

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

    
339

    
340
        public static int gmlToGvSigType(String gmlType) {
341
                if (gmlType.toUpperCase().compareTo("STRING") == 0){
342
                        return Types.VARCHAR;
343
                }
344
                if (gmlType.toUpperCase().compareTo("\"\"") == 0){
345
                        return Types.VARCHAR;
346
                }
347
                if (gmlType.toUpperCase().compareTo("INTEGER") == 0){
348
                        return  Types.INTEGER;
349
                }
350
                if (gmlType.toUpperCase().compareTo("INT") == 0){
351
                        return Types.INTEGER;
352
                }
353
                if (gmlType.toUpperCase().compareTo("LONG") == 0){
354
                        return Types.INTEGER;
355
                }
356
                if (gmlType.toUpperCase().compareTo("DOUBLE") == 0){
357
                        return Types.DOUBLE;
358
                }
359
                if (gmlType.toUpperCase().compareTo("FLOAT") == 0){
360
                        return Types.DOUBLE;
361
                }
362
                return Types.VARCHAR;                
363
        }
364
}