Author: aaime Date: 2007-07-30 08:33:42 -0700 (Mon, 30 Jul 2007) New Revision: 26365 Modified: geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/main/java/org/geotools/data/oracle/attributeio/SDOAttributeIO.java geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/test/java/org/geotools/data/oracle/OracleDataStoreOnlineTest.java Log: Fix for GEOT-1415, handle mixed types better Modified: geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/main/java/org/geotools/data/oracle/attributeio/SDOAttributeIO.java =================================================================== --- geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/main/java/org/geotools/data/oracle/attributeio/SDOAttributeIO.java 2007-07-30 15:21:42 UTC (rev 26364) +++ geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/main/java/org/geotools/data/oracle/attributeio/SDOAttributeIO.java 2007-07-30 15:33:42 UTC (rev 26365) @@ -35,7 +35,14 @@ import org.geotools.feature.AttributeType; import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.GeometryFactory; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.MultiLineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.MultiPolygon; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.geom.PrecisionModel; /** @@ -56,15 +63,18 @@ // private AdapterSDO adapterSDO; GeometryConverter converter; private QueryData queryData; + private Class targetClazz; + private GeometryFactory geometryFactory; public SDOAttributeIO(AttributeType attributeType, QueryData queryData) throws DataSourceException { this.queryData = queryData; - GeometryFactory geometryFactory = null; + geometryFactory = null; try { String tableName = queryData.getFeatureTypeInfo() .getFeatureTypeName(); String columnName = attributeType.getName(); + targetClazz = attributeType.getType(); LOGGER.fine("About to create Geometry convertor for " + tableName + "." + columnName); @@ -123,6 +133,16 @@ // geom = adapterJTS.exportGeometry(Geometry.class, sdoGeom); geom = converter.asGeometry( (STRUCT) struct ); + // in Oracle you can have polygons in a column declared to be multipolygon, and so on... + // so we better convert geometries, since our feature model is not so lenient + if(targetClazz.equals(MultiPolygon.class) && geom instanceof Polygon) + return geometryFactory.createMultiPolygon(new Polygon[] {(Polygon) geom}); + else if(targetClazz.equals(MultiPoint.class) && geom instanceof Point) + return geometryFactory.createMultiPoint(new Point[] {(Point) geom}); + else if(targetClazz.equals(MultiLineString.class) && geom instanceof LineString) + return geometryFactory.createMultiLineString(new LineString[] {(LineString) geom}); + else if(targetClazz.equals(GeometryCollection.class)) + return geometryFactory.createGeometryCollection(new Geometry[] {geom}); return geom; } catch (SQLException e) { String msg = "SQL Exception reading geometry column"; Modified: geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/test/java/org/geotools/data/oracle/OracleDataStoreOnlineTest.java =================================================================== --- geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/test/java/org/geotools/data/oracle/OracleDataStoreOnlineTest.java 2007-07-30 15:21:42 UTC (rev 26364) +++ geotools/branches/2.4.x/modules/unsupported/oracle-spatial/src/test/java/org/geotools/data/oracle/OracleDataStoreOnlineTest.java 2007-07-30 15:33:42 UTC (rev 26365) @@ -95,6 +95,7 @@ properties = new Properties(); properties.load(this.getClass().getResourceAsStream("remote.properties")); schemaName = properties.getProperty("schema"); + properties.put("dbtype", "oracle"); dstore = (OracleDataStore) DataStoreFinder.getDataStore(properties); conn = dstore.getConnection(Transaction.AUTO_COMMIT); |