svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.sqlite / org.gvsig.sqlite.provider / src / main / java / org / gvsig / sqlite / dal / geopackage / GeopackageGeometryColumns.java @ 47456
History | View | Annotate | Download (4.18 KB)
1 | 47456 | jjdelcerro | /*
|
---|---|---|---|
2 | * To change this license header, choose License Headers in Project Properties.
|
||
3 | * To change this template file, choose Tools | Templates
|
||
4 | * and open the template in the editor.
|
||
5 | */
|
||
6 | package org.gvsig.sqlite.dal.geopackage; |
||
7 | |||
8 | import java.sql.ResultSet; |
||
9 | import java.sql.SQLException; |
||
10 | import java.sql.Statement; |
||
11 | import java.util.Map; |
||
12 | import org.gvsig.expressionevaluator.ExpressionBuilder; |
||
13 | import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection; |
||
14 | import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils; |
||
15 | import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
||
16 | import org.gvsig.sqlite.dal.operations.SQLiteFetchFeatureTypeOperation; |
||
17 | import org.gvsig.sqlite.dal.operations.SQLiteFetchFeatureTypeOperation.SQLiteColumnInfo; |
||
18 | import org.sqlite.SQLiteException; |
||
19 | |||
20 | /**
|
||
21 | *
|
||
22 | * @author jjdelcerro
|
||
23 | */
|
||
24 | public class GeopackageGeometryColumns { |
||
25 | |||
26 | |||
27 | public static class GeopackageGeometryColumn extends SQLiteFetchFeatureTypeOperation.SQLiteColumnInfo { |
||
28 | |||
29 | private String geometry_type_name; |
||
30 | private int srs_id; |
||
31 | private int z; |
||
32 | private int m; |
||
33 | |||
34 | /*friend*/ GeopackageGeometryColumn() {
|
||
35 | super();
|
||
36 | } |
||
37 | |||
38 | public void set( |
||
39 | String table_name,
|
||
40 | String column_column,
|
||
41 | String geometry_type_name,
|
||
42 | int srs_id,
|
||
43 | int z,
|
||
44 | int m
|
||
45 | ) { |
||
46 | this.table_name = table_name;
|
||
47 | this.column_column = column_column;
|
||
48 | this.geometry_type_name = geometry_type_name;
|
||
49 | this.srs_id = srs_id;
|
||
50 | this.z = z;
|
||
51 | this.m = m;
|
||
52 | } |
||
53 | |||
54 | /**
|
||
55 | * @return the geometry_type_name
|
||
56 | */
|
||
57 | public String getGeometry_type_name() { |
||
58 | return geometry_type_name;
|
||
59 | } |
||
60 | |||
61 | /**
|
||
62 | * @return the srs_id
|
||
63 | */
|
||
64 | public int getSrs_id() { |
||
65 | return srs_id;
|
||
66 | } |
||
67 | |||
68 | /**
|
||
69 | * @return the z
|
||
70 | */
|
||
71 | public int getZ() { |
||
72 | return z;
|
||
73 | } |
||
74 | |||
75 | /**
|
||
76 | * @return the m
|
||
77 | */
|
||
78 | public int getM() { |
||
79 | return m;
|
||
80 | } |
||
81 | |||
82 | } |
||
83 | |||
84 | /*friend*/ static void load_gpkg_geometry_columns(Map<String,SQLiteColumnInfo> columns_info, JDBCConnection conn, String tableName, JDBCSQLBuilderBase sqlbuilder) { |
||
85 | ExpressionBuilder expbuilder = sqlbuilder.expression(); |
||
86 | sqlbuilder.select().column().name("table_name");
|
||
87 | sqlbuilder.select().column().name("column_name");
|
||
88 | sqlbuilder.select().column().name("geometry_type_name");
|
||
89 | sqlbuilder.select().column().name("srs_id");
|
||
90 | sqlbuilder.select().column().name("z");
|
||
91 | sqlbuilder.select().column().name("m");
|
||
92 | sqlbuilder.select().where().set( |
||
93 | expbuilder.eq( |
||
94 | expbuilder.column("table_name"),
|
||
95 | expbuilder.constant(tableName) |
||
96 | ) |
||
97 | ); |
||
98 | sqlbuilder.select().from().table().name("gpkg_geometry_columns");
|
||
99 | Statement st = null; |
||
100 | ResultSet rs = null; |
||
101 | try {
|
||
102 | st = conn.createStatement(); |
||
103 | rs = JDBCUtils.executeQuery(st, sqlbuilder.toString()); |
||
104 | while( rs.next() ) {
|
||
105 | String columnname = rs.getString("column_name"); |
||
106 | GeopackageGeometryColumn geominfo = new GeopackageGeometryColumn();
|
||
107 | geominfo.copyfrom(columns_info.get(columnname)); |
||
108 | geominfo.set( |
||
109 | rs.getString("table_name"),
|
||
110 | columnname, |
||
111 | rs.getString("geometry_type_name"),
|
||
112 | rs.getInt("srs_id"),
|
||
113 | rs.getInt("z"),
|
||
114 | rs.getInt("m")
|
||
115 | ); |
||
116 | columns_info.put(columnname, geominfo); |
||
117 | } |
||
118 | } catch(SQLiteException ex) {
|
||
119 | if( !ex.getMessage().contains("no such table") ) { |
||
120 | throw new RuntimeException("Can't load information from table gpkg_geometry_columns",ex); |
||
121 | } |
||
122 | } catch (Throwable ex) { |
||
123 | throw new RuntimeException("Can't load information from table gpkg_geometry_columns",ex); |
||
124 | } finally {
|
||
125 | JDBCUtils.closeQuietly(rs); |
||
126 | JDBCUtils.closeQuietly(st); |
||
127 | } |
||
128 | } |
||
129 | |||
130 | } |