Package org.geotools.data.gen

Source Code of org.geotools.data.gen.AbstractPreGeneralizedFeatureSourceTest

/*
*    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.gen;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import org.geotools.data.DefaultQuery;
import org.geotools.data.FeatureReader;
import org.geotools.data.Query;
import org.geotools.data.Repository;
import org.geotools.data.Transaction;
import org.geotools.data.gen.info.GeneralizationInfos;
import org.geotools.data.gen.info.GeneralizationInfosProvider;
import org.geotools.data.gen.info.GeneralizationInfosProviderImpl;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.factory.Hints;
import org.geotools.filter.AttributeExpressionImpl;
import org.geotools.filter.SortByImpl;
import org.geotools.filter.text.cql2.CQL;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.junit.Assert;
import org.opengis.feature.Feature;
import org.opengis.feature.FeatureVisitor;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
import org.opengis.filter.expression.Expression;
import org.opengis.filter.expression.ExpressionVisitor;
import org.opengis.filter.expression.PropertyName;
import org.opengis.filter.sort.SortBy;
import org.opengis.filter.sort.SortOrder;
import org.xml.sax.helpers.NamespaceSupport;

import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;

/**
*
*
* @source $URL$
*/
public abstract class AbstractPreGeneralizedFeatureSourceTest extends TestCase {

    static Map<String, PreGeneralizedDataStore> DSMap = new HashMap<String, PreGeneralizedDataStore>();

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        TestSetup.initialize();
    }

    protected PreGeneralizedDataStore getDataStore(String configName) throws IOException {

        PreGeneralizedDataStore ds = DSMap.get(configName);
        if (ds != null)
            return ds;

        GeneralizationInfosProvider provider = new GeneralizationInfosProviderImpl();
        GeneralizationInfos ginfos = null;
        ginfos = provider.getGeneralizationInfos(configName);
        ds = new PreGeneralizedDataStore(ginfos, getRepository());
        DSMap.put(configName, ds);
        return ds;
    }

    protected Repository getRepository() {
        return TestSetup.REPOSITORY;
    }

    protected void testGetCount(String configName) {

        try {

            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            Filter filter = CQL.toFilter("CAT_ID = 2");

            DefaultQuery[] queries = new DefaultQuery[2];
            queries[0] = new DefaultQuery("GenStreams");
            queries[1] = new DefaultQuery("GenStreams", filter);

            for (DefaultQuery q : queries) {

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 1.0);
                int count = fs.getCount(q);

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 5.0);
                assertTrue(count == fs.getCount(q));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 10.0);
                assertTrue(count == fs.getCount(q));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 20.0);
                assertTrue(count == fs.getCount(q));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 25.0);
                assertTrue(count == fs.getCount(q));
            }
        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }
    }

    protected void testGetBounds(String configName) {

        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            Filter filter = CQL.toFilter("CAT_ID = 2");

            DefaultQuery[] queries = new DefaultQuery[2];
            queries[0] = new DefaultQuery("GenStreams");
            queries[1] = new DefaultQuery("GenStreams", filter);

            ReferencedEnvelope env = null;
            ReferencedEnvelope envOrig = fs.getBounds();
            assertTrue(envOrig.isEmpty() == false);

            for (DefaultQuery q : queries) {

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 1.0);
                env = fs.getBounds(q);
                if (env != null)
                    assertTrue(envOrig.intersects((Envelope) env));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 5.0);
                env = fs.getBounds(q);
                if (env != null)
                    assertTrue(envOrig.intersects((Envelope) env));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 10.0);
                env = fs.getBounds(q);
                if (env != null)
                    assertTrue(envOrig.intersects((Envelope) env));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 20.0);
                env = fs.getBounds(q);
                if (env != null)
                    assertTrue(envOrig.intersects((Envelope) env));

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 25.0);
                env = fs.getBounds(q);
                if (env != null)
                    assertTrue(envOrig.intersects((Envelope) env));
            }
        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }
    }

    protected void testFeatureReader(String configName) {

        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            Filter filter = CQL.toFilter("CAT_ID = 2");

            DefaultQuery[] queries = new DefaultQuery[2];
            queries[0] = new DefaultQuery("GenStreams");
            queries[1] = new DefaultQuery("GenStreams", filter,
                    new String[] { "the_geom", "CAT_ID" });

            for (DefaultQuery q : queries) {

                FeatureReader<SimpleFeatureType, SimpleFeature> reader;
                String typeName;

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 1.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(reader.getFeatureType().getGeometryDescriptor()
                        .getLocalName()));
                while (reader.hasNext()) {
                    SimpleFeature f = reader.next();
                    checkPoints(f, 0.0);
                }
                reader.close();

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 5.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(reader.getFeatureType().getGeometryDescriptor()
                        .getLocalName()));
                while (reader.hasNext()) {
                    SimpleFeature f = reader.next();
                    checkPoints(f, 5.0);
                }
                reader.close();

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 10.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(reader.getFeatureType().getGeometryDescriptor()
                        .getLocalName()));
                while (reader.hasNext()) {
                    SimpleFeature f = reader.next();
                    checkPoints(f, 10.0);
                }
                reader.close();

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 20.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(reader.getFeatureType().getGeometryDescriptor()
                        .getLocalName()));
                while (reader.hasNext()) {
                    SimpleFeature f = reader.next();
                    checkPoints(f, 20.0);
                }
                reader.close();

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 50.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(reader.getFeatureType().getGeometryDescriptor()
                        .getLocalName()));
                while (reader.hasNext()) {
                    SimpleFeature f = reader.next();
                    checkPoints(f, 50.0);
                }
                reader.close();

            }
        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }
    }

    protected void testFeatureReaderWithoutGeom(String configName) {

        try {

            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            Filter filter = CQL.toFilter("CAT_ID = 2");

            Query q = new DefaultQuery("GenStreams", filter, new String[] { "CAT_ID" });

            for (Double distance : new Double[] { 1.0, 5.0, 10.0, 20.0, 50.0 }) {
                FeatureReader<SimpleFeatureType, SimpleFeature> reader;
                String typeName;

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 1.0);
                reader = ds.getFeatureReader(q, Transaction.AUTO_COMMIT);
                typeName = reader.getFeatureType().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                reader.close();
            }

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }
    }

    protected void testGetFeatures(String configName) {

        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            Filter filter = CQL.toFilter("CAT_ID = 2");

            DefaultQuery[] queries = new DefaultQuery[2];
            queries[0] = new DefaultQuery("GenStreams");
            queries[1] = new DefaultQuery("GenStreams", filter,
                    new String[] { "the_geom", "CAT_ID" });

            for (DefaultQuery q : queries) {

                SimpleFeatureCollection fCollection;
                String typeName;

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 1.0);
                fCollection = fs.getFeatures(q);
                typeName = fCollection.getSchema().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(fCollection.getSchema().getGeometryDescriptor()
                        .getLocalName()));
                SimpleFeatureIterator iterator = fCollection.features();
                try {
                    while (iterator.hasNext()) {
                        SimpleFeature f = iterator.next();
                        checkPoints(f, 0.0);
                    }
                }
                finally {
                    iterator.close();
                }

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 5.0);
                fCollection = fs.getFeatures(q);
                typeName = fCollection.getSchema().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(fCollection.getSchema().getGeometryDescriptor()
                        .getLocalName()));
                iterator = fCollection.features();
                try {
                    while (iterator.hasNext()) {
                        SimpleFeature f = iterator.next();
                        checkPoints(f, 5.0);
                    }
                }
                finally {
                    iterator.close();
                }

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 10.0);
                fCollection = fs.getFeatures(q);
                typeName = fCollection.getSchema().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(fCollection.getSchema().getGeometryDescriptor()
                        .getLocalName()));
                iterator = fCollection.features();
                try {
                    while (iterator.hasNext()) {
                        SimpleFeature f = iterator.next();
                        checkPoints(f, 10.0);
                    }
                }
                finally {
                    iterator.close();
                }

                q.getHints().put(Hints.GEOMETRY_DISTANCE, 20.0);
                fCollection = fs.getFeatures(q);
                typeName = fCollection.getSchema().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(fCollection.getSchema().getGeometryDescriptor()
                        .getLocalName()));
                iterator = fCollection.features();
                try {
                    while (iterator.hasNext()) {
                        SimpleFeature f = iterator.next();
                        checkPoints(f, 20.0);
                    }
                }
                finally {
                    iterator.close();
                }
                q.getHints().put(Hints.GEOMETRY_DISTANCE, 50.0);
                fCollection = fs.getFeatures(q);
                typeName = fCollection.getSchema().getTypeName();
                assertTrue("GenStreams".equals(typeName));
                assertTrue("the_geom".equals(fCollection.getSchema().getGeometryDescriptor()
                        .getLocalName()));
                iterator = fCollection.features();
                try {
                    while (iterator.hasNext()) {
                        SimpleFeature f = iterator.next();
                        checkPoints(f, 0.0);
                    }
                }
                finally {
                    iterator.close();
                }
            }
        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }
    }

    protected void testGetDataStore(String configName) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);
            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(ds == fs.getDataStore());
        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected void testGetFeatures2(String configName) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            SimpleFeatureCollection fCollection;
            String typeName;

            fCollection = fs.getFeatures();
            typeName = fCollection.getSchema().getTypeName();
            assertTrue("GenStreams".equals(typeName));
            assertTrue(fCollection.size() > 0);
            assertFalse(fCollection.isEmpty());
            SimpleFeatureIterator iterator = fCollection.features();
            try {
                while (iterator.hasNext()) {
                    SimpleFeature f = iterator.next();
                    checkPoints(f, 0.0);
                }
            }
            finally {
                iterator.close();
            }
            fCollection = fs.getFeatures(Filter.INCLUDE);
            typeName = fCollection.getSchema().getTypeName();
            assertTrue("GenStreams".equals(typeName));
            assertTrue(fCollection.size() > 0);
            assertFalse(fCollection.isEmpty());
            iterator = fCollection.features();
            try {
                while (iterator.hasNext()) {
               
                    SimpleFeature f = iterator.next();
                    checkPoints(f, 0.0);
                }
                // iterator.remove() no longer provided
            }
            finally {
                iterator.close();
            }
            ds.dispose();

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected void testGetFeatures3(String configName) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue(fs.getSupportedHints().contains(Hints.GEOMETRY_DISTANCE));

            SimpleFeatureCollection fCollection;
            String typeName;

            fCollection = fs.getFeatures();
            typeName = fCollection.getSchema().getTypeName();
            assertTrue("GenStreams".equals(typeName));
            assertTrue(fCollection.size() > 0);
            assertFalse(fCollection.isEmpty());

            Object[] array = fCollection.toArray();
            assertTrue(array.length == fCollection.size());
            assertNotNull(array[0]);
            assertTrue(array[0] instanceof PreGeneralizedSimpleFeature);

            array = fCollection.toArray(new Object[fCollection.size()]);
            assertTrue(array.length == fCollection.size());
            assertNotNull(array[0]);
            assertTrue(array[0] instanceof PreGeneralizedSimpleFeature);

            assertTrue(fCollection.getBounds().equals(fs.getBounds()));
            assertTrue(fCollection.contains(array[0]));

            List<Object> list = new ArrayList<Object>();
            list.add(array[0]);
            list.add(array[1]);
            assertTrue(fCollection.containsAll(list));

            SimpleFeatureCollection subCollection = fCollection
                    .subCollection(Filter.INCLUDE);
            typeName = subCollection.getSchema().getTypeName();
            assertTrue("GenStreams".equals(typeName));
            assertTrue(fCollection.size() == subCollection.size());
            assertTrue(subCollection.contains(array[0]));

            // subCollection = fCollection.subCollection(Filter.EXCLUDE);
            // typeName=subCollection.getSchema().getTypeName();
            // assertTrue("GenStreams".equals(typeName));
            // assertTrue(subCollection.size()==0);
            // assertFalse(subCollection.contains(array[0]));

            // SortBy2 sortBy = new SortByImpl(new
            // AttributeExpressionImpl("CAT_ID"),SortOrder.ASCENDING);
            SortBy sortBy = new SortBy() {
                public PropertyName getPropertyName() {
                    return new AttributeExpressionImpl("CAT_ID");
                }
                public SortOrder getSortOrder() {
                    return SortOrder.ASCENDING;
                }
            };
            SimpleFeatureCollection sortedCollection = fCollection
                    .sort(sortBy);
            // null here

            // /typeName=sortedCollection.getSchema().getTypeName();
            // assertTrue("GenStreams".equals(typeName))
            // assertTrue(fCollection.size()==sortedCollection.size());

            final List<Long> catIds = new ArrayList<Long>();

            FeatureVisitor checkSortVisitor = new FeatureVisitor() {

                public void visit(Feature feature) {
                    SimpleFeature sf = (SimpleFeature) feature;
                    assertTrue(feature instanceof PreGeneralizedSimpleFeature);
                    long catid = (Long) sf.getAttribute("CAT_ID");
                    catIds.add(catid);
                }
            };

            try {
                fCollection.accepts(checkSortVisitor, null);
            } catch (Throwable e) {
                Assert.fail();
            }
            assertTrue(catIds.size() == fCollection.size());
            ds.dispose();

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected void testNameAndInfo(String configName) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue("GenStreams".equals(fs.getInfo().getName()));
            assertTrue("GenStreams".equals(fs.getName().getLocalPart()));
            assertNull(fs.getName().getNamespaceURI());
            ds.dispose();

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected void testQueryCapabilities(String configName, boolean pureShapefile) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertEquals(pureShapefile, fs.getQueryCapabilities().isOffsetSupported());
            assertTrue(fs.getQueryCapabilities().isReliableFIDSupported());

            PropertyName propertyName = new PropertyName() {
                public String getPropertyName() {
                    return "CAT_ID";
                }

                public Object accept(ExpressionVisitor arg0, Object arg1) {
                    return true;
                }

                public Object evaluate(Object arg0) {
                    return arg0;
                }

                public <T> T evaluate(Object arg0, Class<T> arg1) {
                    return null;
                }

                public NamespaceSupport getNamespaceContext() {
                    return null;
                }

            };

            SortOrder so = SortOrder.valueOf("CAT_ID");
            assertEquals(pureShapefile, fs.getQueryCapabilities().supportsSorting(
                    new SortBy[] { new SortByImpl(propertyName, so) }));

            ds.dispose();

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected void testGetSchema(String configName) {
        try {
            PreGeneralizedDataStore ds = getDataStore(configName);

            SimpleFeatureSource fs = ds.getFeatureSource("GenStreams");
            assertTrue("GenStreams".equals(fs.getSchema().getTypeName()));
            assertTrue(fs.getSchema().getAttributeCount() == 4);
            assertTrue("the_geom".equals(fs.getSchema().getGeometryDescriptor().getLocalName()));
            assertNotNull(fs.getSchema().getDescriptor("CAT_ID") != null);
            assertNotNull(fs.getSchema().getDescriptor("the_geom") != null);
            assertNotNull(fs.getSchema().getDescriptor("CAT_DESC") != null);
            assertNotNull(fs.getSchema().getDescriptor("ID") != null);
            ds.dispose();

        } catch (Exception ex) {
            Assert.fail(ex.getMessage());
        }

    }

    protected boolean checkPoints(SimpleFeature f, double distance) {
        int geomIndex = -1;
        for (int i = 0; i < f.getFeatureType().getAttributeDescriptors().size(); i++) {
            if ("the_geom".equals(f.getFeatureType().getAttributeDescriptors().get(i)
                    .getLocalName())) {
                geomIndex = i;
                break;
            }
        }
        assertTrue(geomIndex >= 0);
        // TODO, Test not possible because of MemoryDS impl.
        // assertTrue(f.getAttribute(geomIndex)==f.getDefaultGeometry());
        assertTrue(f.getAttribute("the_geom") == f.getDefaultGeometry());
        Integer numPoints = TestSetup.POINTMAP.get(distance).get(f.getID());
        return numPoints == ((Geometry) f.getDefaultGeometry()).getNumPoints();
    }

}
TOP

Related Classes of org.geotools.data.gen.AbstractPreGeneralizedFeatureSourceTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.