/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.oracle; import java.sql.Date; import java.util.List; import org.geotools.data.DataUtilities; import org.geotools.data.DefaultTransaction; import org.geotools.data.Transaction; import org.geotools.data.simple.SimpleFeatureCollection; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.data.simple.SimpleFeatureStore; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.jdbc.JDBCDataStoreOnlineTest; import org.geotools.jdbc.JDBCTestSetup; import org.geotools.referencing.CRS; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.identity.FeatureId; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.vividsolutions.jts.geom.Geometry; /** * * * @source $URL$ */ public class OracleDataStoreOnlineTest extends JDBCDataStoreOnlineTest { private OracleTestSetup oracleTestSetup; @Override protected JDBCTestSetup createTestSetup() { oracleTestSetup = new OracleTestSetup(); return oracleTestSetup; } public void testCreateSchemaOSGBCrs() throws Exception { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("ft2")); builder.setNamespaceURI(dataStore.getNamespaceURI()); CoordinateReferenceSystem crs = CRS.decode("EPSG:27700"); builder.setCRS(crs); builder.add(aname("geometry"), Geometry.class); builder.add(aname("intProperty"), Integer.class); builder.add(aname("dateProperty"), Date.class); SimpleFeatureType featureType = builder.buildFeatureType(); // used to fail here - with index creation error dataStore.createSchema(featureType); } public void testCreateSchemaWktCrs() throws Exception { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("ft2")); builder.setNamespaceURI(dataStore.getNamespaceURI()); CoordinateReferenceSystem crs = CRS.parseWKT("GEOGCS[\"NAD83\", \n" + " DATUM[\"North American Datum 1983\", \n" + " SPHEROID[\"GRS 1980\", 6378137.0, 298.257222101, AUTHORITY[\"EPSG\",\"7019\"]], \n" + " TOWGS84[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], \n" + " AUTHORITY[\"EPSG\",\"6269\"]], \n" + " PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]], \n" + " UNIT[\"degree\", 0.017453292519943295], \n" + " AXIS[\"Geodetic longitude\", EAST], \n" + " AXIS[\"Geodetic latitude\", NORTH], \n" + " AUTHORITY[\"EPSG\",\"4269\"]]"); builder.setCRS(crs); builder.add(aname("geometry"), Geometry.class); builder.add(aname("intProperty"), Integer.class); builder.add(aname("dateProperty"), Date.class); SimpleFeatureType featureType = builder.buildFeatureType(); // used to fail here dataStore.createSchema(featureType); } public void testCreateSpatialIndexNameTooLong() throws Exception { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("ft2")); builder.setNamespaceURI(dataStore.getNamespaceURI()); builder.setCRS(DefaultGeographicCRS.WGS84); builder.add(aname("geometry_one_two_three_four"), Geometry.class); builder.add(aname("intProperty"), Integer.class); builder.add(aname("dateProperty"), Date.class); SimpleFeatureType featureType = builder.buildFeatureType(); // used to fail here dataStore.createSchema(featureType); } public void testCreateLongVarChar() throws Exception { SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setName(tname("longvar")); builder.setNamespaceURI(dataStore.getNamespaceURI()); builder.setCRS(DefaultGeographicCRS.WGS84); builder.add(aname("geometry_one_two_three_four"), Geometry.class); builder.add(aname("longvar"), String.class); SimpleFeatureType featureType = builder.buildFeatureType(); dataStore.createSchema(featureType); SimpleFeatureBuilder fBuilder = new SimpleFeatureBuilder(featureType); fBuilder.add(null); StringBuffer vBuffer = new StringBuffer(4000); // to be honest I can't tell from the oracle docs if 4000 or 3999 is the // actual limit but anything over 255 used to fail for (int i = 0; i < 3999; i++) { vBuffer.append("x"); } fBuilder.add(vBuffer.toString()); SimpleFeature f = fBuilder.buildFeature(null); // used to fail here Transaction transaction = new DefaultTransaction("create"); SimpleFeatureSource featureSource = dataStore.getFeatureSource(featureType.getName().getLocalPart()); SimpleFeatureCollection collection = DataUtilities.collection(f); SimpleFeatureStore outStore = (SimpleFeatureStore) featureSource; outStore.setTransaction(transaction); try { List<FeatureId> ids = outStore.addFeatures(collection); transaction.commit(); } catch (Exception problem) { problem.printStackTrace(); transaction.rollback(); } finally { transaction.close(); dataStore.removeSchema(tname("longvar")); } } @Override protected void tearDownInternal() throws Exception { super.tearDownInternal(); oracleTestSetup.deleteSpatialTable(tname("longvar")); } }