Statistics
| Revision:

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

History | View | Annotate | Download (9.28 KB)

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

    
3
import java.sql.SQLException;
4
import java.sql.Time;
5
import java.sql.Timestamp;
6
import java.sql.Types;
7
import java.util.Date;
8
import java.util.Hashtable;
9

    
10
import org.geotools.factory.FactoryConfigurationError;
11
import org.geotools.feature.AttributeType;
12
import org.geotools.feature.AttributeTypeFactory;
13
import org.geotools.feature.FeatureType;
14
import org.geotools.feature.FeatureTypeBuilder;
15
import org.geotools.feature.SchemaException;
16

    
17
import com.hardcode.gdbms.engine.values.ValueFactory;
18
import com.iver.cit.gvsig.fmap.core.FShape;
19
import com.iver.cit.gvsig.fmap.core.ShapeFactory;
20
import com.iver.cit.gvsig.fmap.core.v02.FConverter;
21
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
22
import com.iver.cit.gvsig.fmap.drivers.LayerDefinition;
23
import com.vividsolutions.jts.geom.Geometry;
24
import com.vividsolutions.jts.geom.GeometryCollection;
25
import com.vividsolutions.jts.geom.LineString;
26
import com.vividsolutions.jts.geom.MultiLineString;
27
import com.vividsolutions.jts.geom.MultiPoint;
28
import com.vividsolutions.jts.geom.MultiPolygon;
29
import com.vividsolutions.jts.geom.Point;
30
import com.vividsolutions.jts.geom.Polygon;
31
import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence.Float;
32

    
33
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
34
 *
35
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
36
 *
37
 * This program is free software; you can redistribute it and/or
38
 * modify it under the terms of the GNU General Public License
39
 * as published by the Free Software Foundation; either version 2
40
 * of the License, or (at your option) any later version.
41
 *
42
 * This program is distributed in the hope that it will be useful,
43
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
44
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
45
 * GNU General Public License for more details.
46
 *
47
 * You should have received a copy of the GNU General Public License
48
 * along with this program; if not, write to the Free Software
49
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
50
 *
51
 * For more information, contact:
52
 *
53
 *  Generalitat Valenciana
54
 *   Conselleria d'Infraestructures i Transport
55
 *   Av. Blasco Ib??ez, 50
56
 *   46010 VALENCIA
57
 *   SPAIN
58
 *
59
 *      +34 963862235
60
 *   gvsig@gva.es
61
 *      www.gvsig.gva.es
62
 *
63
 *    or
64
 *
65
 *   IVER T.I. S.A
66
 *   Salamanca 50
67
 *   46005 Valencia
68
 *   Spain
69
 *
70
 *   +34 963163400
71
 *   dac@iver.es
72
 */
73
/* CVS MESSAGES:
74
 *
75
 * $Id: GMLTypesConversor.java 6509 2006-07-24 08:28:09Z jorpiell $
76
 * $Log$
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
}