/* * 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.geometryless; import java.io.IOException; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.PropertyResourceBundle; import junit.framework.TestCase; import org.geotools.data.DataSourceException; import org.geotools.data.DataStore; import org.geotools.data.DataStoreFactorySpi; import org.geotools.data.FeatureSource; import org.geotools.data.DataAccessFactory.Param; import org.geotools.feature.FeatureCollection; import org.geotools.feature.FeatureIterator; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.GeometryDescriptor; import com.vividsolutions.jts.geom.Point; /** * Test Params used by JDBCDataStoreFactory. * * @auther Rob Atkinson, Social Change Online * @author jgarnett, Refractions Research, Inc. * @author $Author: aaime $ (last modification) * @source $URL: * http://svn.geotools.org/geotools/trunk/gt/modules/unsupported/geometryless/src/test/java/org/geotools/data/geometryless/JDBCDataStoreFactoryTest.java $ * @version $Id: JDBCDataStoreFactoryTest.java 17707 2006-01-23 03:45:14Z * desruisseaux $ */ public class JDBCDataStoreFactoryTest extends TestCase { static JDBCDataStoreFactory factory = new JDBCDataStoreFactory(null); Map local; /* * @see TestCase#setUp() */ protected void setUp() throws Exception { local = new HashMap(); local.put("dbtype", "jdbc"); PropertyResourceBundle resource = new PropertyResourceBundle(this.getClass() .getResourceAsStream("fixture.properties")); String namespace = resource.getString("namespace"); String user = resource.getString("user"); local.put("user", user); String password = resource.getString("password"); local.put("passwd", password); String Driver = resource.getString("driver"); local.put("driver", Driver); String urlprefix = resource.getString("urlprefix"); local.put("urlprefix", urlprefix); if (namespace.equals("http://www.geotools.org/data/postgis")) { throw new IllegalStateException( "The fixture.properties file needs to be configured for your own database"); } super.setUp(); } public void testParamCHARSET() throws Throwable { Param p = JDBCDataStoreFactory.CHARSET; try { p.parse(null); fail("expected error for parse null"); } catch (Exception e) { } try { p.parse(""); fail("expected error for parse empty"); } catch (Exception e) { } assertNotNull("parse ISO-8859-1", p.parse("ISO-8859-1")); assertNull("handle null", p.handle(null)); assertNull("handle empty", p.handle("")); assertNotNull("handle ISO-8859-1", p.handle("ISO-8859-1")); Map map = new HashMap(); Charset latin1 = Charset.forName("ISO-8859-1"); map.put("charset", latin1); assertEquals(latin1, p.lookUp(map)); try { assertNotNull("handle ISO-LATIN-1", p.handle("ISO-LATIN-1")); } catch (IOException expected) { } System.out.println(latin1.toString()); System.out.println(latin1.name()); System.out.println(p.text(latin1)); assertEquals("ISO-8859-1", p.text(latin1)); try { assertEquals("ISO-8859-1", p.text("ISO-8859-1")); fail("Should not handle bare text"); } catch (ClassCastException expected) { } } public void testLocal() throws Exception { Map map = local; System.out.println("local:" + map); assertTrue("canProcess", factory.canProcess(map)); try { DataStore temp = factory.createDataStore(map); assertNotNull("created", temp); } catch (DataSourceException expected) { assertEquals("Could not get connection", expected.getMessage()); } } public void testRegisterViewsJDBCDS() throws Exception { testRegisterViews(factory); } public void testRegisterViewsLocationXY() throws Exception { Map params = new HashMap(this.local); DataStoreFactorySpi factory = new LocationsXYDataStoreFactory(); params.put(LocationsXYDataStoreFactory.DBTYPE.key, "locationsxy"); params.put(LocationsXYDataStoreFactory.XCOLUMN.key, "x"); params.put(LocationsXYDataStoreFactory.YCOLUMN.key, "y"); params.put(LocationsXYDataStoreFactory.GEOMNAME.key, "location"); assertTrue(factory.canProcess(params)); this.local = params; DataStore ds = testRegisterViews(factory); assertTrue(ds instanceof LocationsXYDataStore); FeatureSource<SimpleFeatureType, SimpleFeature> fs = ds.getFeatureSource("ViewType1"); assertNotNull(fs); SimpleFeatureType schema = fs.getSchema(); assertNotNull(schema); GeometryDescriptor defaultGeometry = (GeometryDescriptor) schema.getGeometryDescriptor(); assertNotNull("No default geometry: " + schema.toString(), defaultGeometry); assertEquals("location", defaultGeometry.getName().getLocalPart()); FeatureCollection<SimpleFeatureType, SimpleFeature> features = fs.getFeatures(); assertNotNull(features); FeatureIterator<SimpleFeature> iterator = features.features(); while(iterator.hasNext()){ SimpleFeature next = iterator.next(); assertNotNull(next); Object location = next.getAttribute("location"); assertNotNull(location); assertTrue(location instanceof Point); } features.close(iterator); } /* * public void testRegisterViewsLocationXYWaterQ()throws Exception{ Map * params = new HashMap(this.local); * * DataStoreFactorySpi factory = new LocationsXYDataStoreFactory(); * params.put(LocationsXYDataStoreFactory.DBTYPE.key, "locationsxy"); * params.put(LocationsXYDataStoreFactory.XCOLUMN.key, "x"); * params.put(LocationsXYDataStoreFactory.YCOLUMN.key, "y"); * params.put(LocationsXYDataStoreFactory.GEOMNAME.key, "location"); * * params.put("sqlView.1.typeName", "wq_derived"); * params.put("sqlView.1.sqlQuery", "SELECT station_no, station_name as * sitename,anzlic_no, " + " project_no, sample_collection_date || * determinand_code as id," + " sample_collection_date, * determinand_description, results_value," + " longitude as x, -latitude as * y FROM wq_ir_results WHERE 1=1" + " order by station_no"); * * DataStore ds = DataStoreFinder.getDataStore(params); assertNotNull(ds); * assertTrue(ds instanceof LocationsXYDataStore); * * FeatureSource<SimpleFeatureType, SimpleFeature> fs = ds.getFeatureSource("wq_derived"); assertNotNull(fs); * FeatureType schema = fs.getSchema(); assertNotNull(schema); * assertNotNull(schema.toString(), schema.getDefaultGeometry()); * assertEquals("location", * schema.getDefaultGeometry().getName().getLocalPart()); * * FeatureCollection<SimpleFeatureType, SimpleFeature> fc = fs.getFeatures(Query.ALL); assertNotNull(fc); * Iterator features = fc.features(); assertNotNull(features); * assertTrue(features.hasNext()); Feature f =(Feature) features.next(); * * Filter filter = (Filter)ExpressionBuilder.parse("station_no = * '41010901'"); features = fs.getFeatures(filter).features(); * assertNotNull(features); assertTrue(features.hasNext()); f = * (Feature)features.next(); assertEquals("41010901", * f.getAttribute("station_no")); * * Envelope bounds = fs.getBounds(); assertNotNull(bounds); * * bounds = fs.getBounds(new DefaultQuery("wq_derived", filter)); * assertNotNull(bounds); } */ private DataStore testRegisterViews(DataStoreFactorySpi dsFactory) throws IOException { String typeName1 = "ViewType1"; String typeName2 = "ViewType2"; String sqlDef1 = "select area, perimeter, gid, x, y from testset order by gid"; String sqlDef2 = "select gid, x, y from testset"; Map params = new HashMap(this.local); params.put("sqlView.1.typeName", typeName1); try { dsFactory.createDataStore(params); fail("should have failed, sql def not provided"); } catch (IllegalArgumentException e) { // ok } params.put("sqlView.1.sqlQuery", sqlDef1); params.put("sqlView.2.typeName", typeName2); params.put("sqlView.2.sqlQuery", sqlDef2); DataStore dstore = dsFactory.createDataStore(params); SimpleFeatureType ft1 = dstore.getSchema(typeName1); SimpleFeatureType ft2 = dstore.getSchema(typeName2); assertNotNull(ft1); assertNotNull(ft2); return dstore; } }