Revision 43377 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.db/org.gvsig.fmap.dal.db.jdbc/src/main/java/org/gvsig/fmap/dal/store/jdbc2/spi/operations/FetchFeatureTypeOperation.java
FetchFeatureTypeOperation.java | ||
---|---|---|
40 | 40 |
public FetchFeatureTypeOperation( |
41 | 41 |
JDBCHelper helper, |
42 | 42 |
EditableFeatureType featureType, |
43 |
String defaultGeometryColumn, |
|
44 |
IProjection crs |
|
45 |
) { |
|
46 |
this(helper, featureType, null, null, null, null, defaultGeometryColumn, crs); |
|
47 |
} |
|
48 |
|
|
49 |
public FetchFeatureTypeOperation( |
|
50 |
JDBCHelper helper, |
|
51 |
EditableFeatureType featureType, |
|
43 | 52 |
String dbname, |
44 | 53 |
String schema, |
45 | 54 |
String table, |
... | ... | |
110 | 119 |
rs = JDBCUtils.executeQuery(st, sqlbuilder.toString()); |
111 | 120 |
ResultSetMetaData rsMetadata = rs.getMetaData(); |
112 | 121 |
|
113 |
int i; |
|
114 |
int geometriesColumns = 0; |
|
115 |
String lastGeometry = null; |
|
122 |
fetchFeatureTypeFromMetadata(conn, rsMetadata, pks); |
|
116 | 123 |
|
117 |
EditableFeatureAttributeDescriptor attr; |
|
118 |
boolean firstGeometryAttrFound = false; |
|
119 |
for (i = 1; i <= rsMetadata.getColumnCount(); i++) { |
|
120 |
attr = getAttributeFromMetadata(featureType, conn, rsMetadata, i); |
|
121 |
if ( isInPrimaryKeys(pks,attr) ) { |
|
122 |
attr.setIsPrimaryKey(true); |
|
123 |
} |
|
124 |
if (attr.getType() == DataTypes.GEOMETRY) { |
|
125 |
geometriesColumns++; |
|
126 |
lastGeometry = attr.getName(); |
|
127 |
// Set the default geometry attribute if it is the one |
|
128 |
// given as parameter or it is the first one, just in case. |
|
129 |
if (!firstGeometryAttrFound || lastGeometry.equals(defaultGeometryColumn)) { |
|
130 |
firstGeometryAttrFound = true; |
|
131 |
featureType.setDefaultGeometryAttributeName(lastGeometry); |
|
132 |
} |
|
133 |
} |
|
134 |
|
|
135 |
} |
|
136 |
|
|
137 |
if (defaultGeometryColumn == null && geometriesColumns == 1) { |
|
138 |
featureType.setDefaultGeometryAttributeName(lastGeometry); |
|
139 |
} |
|
140 |
|
|
141 | 124 |
} catch (SQLException ex) { |
142 | 125 |
throw new RuntimeException("Can't fecth feature type.",ex); |
143 | 126 |
} finally { |
144 | 127 |
JDBCUtils.closeQuietly(rs); |
145 | 128 |
JDBCUtils.closeQuietly(st); |
146 | 129 |
} |
130 |
} |
|
131 |
|
|
132 |
public void fetchFeatureTypeFromMetadata(Connection conn, ResultSetMetaData rsMetadata) throws SQLException { |
|
133 |
this.fetchFeatureTypeFromMetadata(conn, rsMetadata, new ArrayList<String>()); |
|
134 |
} |
|
147 | 135 |
|
136 |
protected void fetchFeatureTypeFromMetadata(Connection conn, ResultSetMetaData rsMetadata, List<String> pks) throws SQLException { |
|
137 |
int i; |
|
138 |
int geometriesColumns = 0; |
|
139 |
String lastGeometry = null; |
|
140 |
|
|
141 |
EditableFeatureAttributeDescriptor attr; |
|
142 |
boolean firstGeometryAttrFound = false; |
|
143 |
for (i = 1; i <= rsMetadata.getColumnCount(); i++) { |
|
144 |
attr = getAttributeFromMetadata(featureType, conn, rsMetadata, i); |
|
145 |
if ( isInPrimaryKeys(pks,attr) ) { |
|
146 |
attr.setIsPrimaryKey(true); |
|
147 |
} |
|
148 |
if (attr.getType() == DataTypes.GEOMETRY) { |
|
149 |
geometriesColumns++; |
|
150 |
lastGeometry = attr.getName(); |
|
151 |
// Set the default geometry attribute if it is the one |
|
152 |
// given as parameter or it is the first one, just in case. |
|
153 |
if (!firstGeometryAttrFound || lastGeometry.equals(defaultGeometryColumn)) { |
|
154 |
firstGeometryAttrFound = true; |
|
155 |
featureType.setDefaultGeometryAttributeName(lastGeometry); |
|
156 |
} |
|
157 |
} |
|
158 |
|
|
159 |
} |
|
160 |
if (defaultGeometryColumn == null && geometriesColumns == 1) { |
|
161 |
featureType.setDefaultGeometryAttributeName(lastGeometry); |
|
162 |
} |
|
163 |
|
|
148 | 164 |
if (crs != null && featureType.getDefaultGeometryAttribute() != null) { |
149 | 165 |
((EditableFeatureAttributeDescriptor) featureType.getDefaultGeometryAttribute()).setSRS(crs); |
150 | 166 |
} |
... | ... | |
271 | 287 |
} |
272 | 288 |
return pks; |
273 | 289 |
|
290 |
} catch (Exception ex) { |
|
291 |
return pks; |
|
292 |
|
|
274 | 293 |
} finally { |
275 | 294 |
JDBCUtils.closeQuietly(rs); |
276 | 295 |
JDBCUtils.closeQuietly(st); |
Also available in: Unified diff