From: <svn...@os...> - 2008-12-31 19:09:06
|
Author: jdeolive Date: 2008-12-31 14:09:02 -0500 (Wed, 31 Dec 2008) New Revision: 32139 Modified: branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2Dialect.java branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectBasic.java branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectPrepared.java Log: reporting specific geometry type when creating table Modified: branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2Dialect.java =================================================================== --- branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2Dialect.java 2008-12-31 06:15:08 UTC (rev 32138) +++ branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2Dialect.java 2008-12-31 19:09:02 UTC (rev 32139) @@ -29,8 +29,10 @@ import org.geotools.jdbc.JDBCDataStore; import org.geotools.jdbc.SQLDialect; +import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.GeometryDescriptor; +import org.opengis.feature.type.PropertyDescriptor; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; @@ -157,18 +159,58 @@ if ( att instanceof GeometryDescriptor ) { //try to narrow down the type with a comment Class binding = att.getType().getBinding(); - if (Point.class.isAssignableFrom(binding) - || LineString.class.isAssignableFrom(binding) - || Polygon.class.isAssignableFrom(binding) - || MultiPoint.class.isAssignableFrom( binding ) - || MultiLineString.class.isAssignableFrom(binding) - || MultiPolygon.class.isAssignableFrom( binding )) { + if (isConcreteGeometry(binding)) { sql.append( " COMMENT '").append( binding.getSimpleName().toUpperCase() ) .append( "'"); } } } + @Override + public void postCreateTable(String schemaName, + SimpleFeatureType featureType, Connection cx) throws SQLException { + + Statement st = cx.createStatement(); + try { + //post process the feature type and set up constraints based on geometry type + for ( PropertyDescriptor ad : featureType.getDescriptors() ) { + if ( ad instanceof GeometryDescriptor ) { + Class binding = ad.getType().getBinding(); + if ( isConcreteGeometry( binding ) ) { + String propertyName = ad.getName().getLocalPart(); + StringBuffer sql = new StringBuffer(); + sql.append( "ALTER TABLE "); + encodeTableName(featureType.getTypeName(), sql); + sql.append( " ADD CONSTRAINT " ); + encodeTableName( propertyName + "GeometryType", sql ); + sql.append( " CHECK "); + encodeColumnName( propertyName, sql ); + sql.append( " IS NULL OR"); + sql.append( " GeometryType("); + encodeColumnName( propertyName, sql ); + sql.append( ") = '").append( binding.getSimpleName().toUpperCase() ) + .append( "'"); + + LOGGER.fine( sql.toString() ); + st.execute( sql.toString() ); + } + } + } + } + finally { + dataStore.closeSafe( st ); + } + } + + boolean isConcreteGeometry( Class binding ) { + return Point.class.isAssignableFrom(binding) + || LineString.class.isAssignableFrom(binding) + || Polygon.class.isAssignableFrom(binding) + || MultiPoint.class.isAssignableFrom( binding ) + || MultiLineString.class.isAssignableFrom(binding) + || MultiPolygon.class.isAssignableFrom( binding ); + } + public Integer getGeometrySRID(String schemaName, String tableName, String columnName, Connection cx) throws SQLException { //execute SELECT srid(<columnName>) FROM <tableName> LIMIT 1; Modified: branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectBasic.java =================================================================== --- branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectBasic.java 2008-12-31 06:15:08 UTC (rev 32138) +++ branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectBasic.java 2008-12-31 19:09:02 UTC (rev 32139) @@ -24,6 +24,7 @@ import org.geotools.jdbc.BasicSQLDialect; import org.geotools.jdbc.JDBCDataStore; +import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.GeometryDescriptor; @@ -88,6 +89,12 @@ } @Override + public void postCreateTable(String schemaName, + SimpleFeatureType featureType, Connection cx) throws SQLException { + delegate.postCreateTable(schemaName, featureType, cx); + } + + @Override public Integer getGeometrySRID(String schemaName, String tableName, String columnName, Connection cx) throws SQLException { return delegate.getGeometrySRID(schemaName, tableName, columnName, cx); Modified: branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectPrepared.java =================================================================== --- branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectPrepared.java 2008-12-31 06:15:08 UTC (rev 32138) +++ branches/2.5.x/modules/unsupported/jdbc-ng/jdbc-h2/src/main/java/org/geotools/data/h2/H2DialectPrepared.java 2008-12-31 19:09:02 UTC (rev 32139) @@ -27,6 +27,7 @@ import org.geotools.jdbc.JDBCDataStore; import org.geotools.jdbc.PreparedStatementSQLDialect; +import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.AttributeDescriptor; import org.opengis.feature.type.GeometryDescriptor; @@ -88,6 +89,12 @@ public void encodePostCreateTable(String tableName, StringBuffer sql) { delegate.encodePostCreateTable(tableName, sql); } + + @Override + public void postCreateTable(String schemaName, + SimpleFeatureType featureType, Connection cx) throws SQLException { + delegate.postCreateTable(schemaName, featureType, cx); + } @Override public Integer getGeometrySRID(String schemaName, String tableName, String columnName, |