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

View differences:

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