/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2011, 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.sfs;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Set;
import org.geotools.data.FeatureReader;
import org.geotools.data.Query;
import org.geotools.data.Transaction;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
public class SFSFeatureSourceTest extends OnlineTest {
/* layerName for mock service*/
private static final String FEATURESOURCE = "layerAsia";
public SFSFeatureSourceTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testGetFeatureSource() throws MalformedURLException, IOException, NoSuchAuthorityCodeException, FactoryException {
if (super.onlineTest("testGetFeatureSource")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
SFSFeatureSource odsfs = (SFSFeatureSource) ods.getFeatureSource(FEATURESOURCE);
assertNotNull(odsfs);
}
}
public void testGetSchema() throws MalformedURLException, IOException, NoSuchAuthorityCodeException, FactoryException {
if (super.onlineTest("testGetSchema")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
SFSFeatureSource odsfs = (SFSFeatureSource) ods.getFeatureSource(FEATURESOURCE);
SimpleFeatureType type = odsfs.getSchema();
assertEquals(NAMESPACE, type.getName().getNamespaceURI());
assertEquals(3, type.getAttributeCount());
Set<String> attributes = new HashSet<String>();
for (AttributeDescriptor ad : type.getAttributeDescriptors()) {
attributes.add(ad.getLocalName());
}
assertEquals(3, attributes.size());
assertTrue(attributes.contains("NAME"));
assertTrue(attributes.contains("the_geom"));
assertTrue(attributes.contains("CFCC"));
}
}
public void testCountFeatures() throws MalformedURLException, IOException, NoSuchAuthorityCodeException, FactoryException {
if (super.onlineTest("testCountFeatures")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
SFSFeatureSource odsfs = (SFSFeatureSource) ods.getFeatureSource(FEATURESOURCE);
int count = odsfs.getCount(new Query(FEATURESOURCE, Filter.INCLUDE));
assertEquals(2, count);
}
}
public void testFeatureBounds() throws MalformedURLException, IOException, NoSuchAuthorityCodeException, FactoryException {
if (super.onlineTest("testFeatureBounds")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
SFSFeatureSource odsfs = (SFSFeatureSource) ods.getFeatureSource(FEATURESOURCE);
ReferencedEnvelope env = odsfs.getBoundsInternal(new Query(FEATURESOURCE, Filter.INCLUDE));
/* Remember the axis order is flipped so this also test if flipaxis is working or not*/
assertEquals(-40.0, env.getMinX());
assertEquals(-10.0, env.getMinY());
assertEquals(80.0, env.getMaxX());
assertEquals(30.0, env.getMaxY());
}
}
public void testGetFeatureReader() throws Exception {
if (super.onlineTest("testGetFeatureReader")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
FeatureReader<SimpleFeatureType, SimpleFeature> r = ods.getFeatureReader(new Query(FEATURESOURCE), Transaction.AUTO_COMMIT);
assertNotNull(r);
assertTrue(r.hasNext());
}
}
public void testGetFeatureReaderWithOrFilter() throws Exception {
if (super.onlineTest("testGetFeatureReader")) {
SFSDataStoreFactory factory = new SFSDataStoreFactory();
SFSDataStore ods = (SFSDataStore) factory.createDataStore(createParams());
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Filter f1 = ff.equals(ff.property("CFCC"), ff.literal("A41"));
Filter f2 = ff.equals(ff.property("CFCC"), ff.literal("A42"));
Filter ored = ff.or(f1, f2);
FeatureReader<SimpleFeatureType, SimpleFeature> r = ods.getFeatureReader(new Query(FEATURESOURCE, ored), Transaction.AUTO_COMMIT);
assertNotNull(r);
assertTrue(r.hasNext());
r.next();
assertTrue(r.hasNext());
r.close();
}
}
public void testOfflineGetFeatureSource() throws Exception {
String _jsonText = "[{"
+ " \"name\": \"layerAsia\","
+ " \"bbox\": [-10,-40,30,80],"
+ " \"crs\": \"urn:ogc:def:crs:EPSG:4326\","
+ " \"axisorder\": \"yx\"},"
+ "{"
+ " \"name\": \"layerAmerica\","
+ " \"crs\": \"urn:ogc:def:crs:EPSG:32632\" ,"
+ " \"axisorder\": \"xy\" },"
+ "{"
+ " \"name\": \"layerEurope\","
+ " \"bbox\": [15000000,49000000,18000000,52000000],"
+ " \"crs\": \"urn:ogc:def:crs:EPSG:32632\" "
+ " }]";
SFSDataStore ods = new SFSDataStore(_jsonText, null);
SFSFeatureSource odsfs = (SFSFeatureSource) ods.getFeatureSource(FEATURESOURCE);
assertNotNull(odsfs);
}
}