Package org.geotools.data.transform

Source Code of org.geotools.data.transform.TransformFeatureStoreTest

package org.geotools.data.transform;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.geotools.data.CollectionFeatureReader;
import org.geotools.data.DataUtilities;
import org.geotools.data.Query;
import org.geotools.data.property.PropertyDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.geotools.data.simple.SimpleFeatureSource;
import org.geotools.data.simple.SimpleFeatureStore;
import org.geotools.data.transform.Definition;
import org.geotools.data.transform.TransformFactory;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.filter.text.cql2.CQL;
import org.geotools.filter.text.ecql.ECQL;
import org.junit.Before;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.filter.Filter;

import com.vividsolutions.jts.io.WKTReader;

public class TransformFeatureStoreTest extends AbstractTransformTest {
   
    WKTReader wkt = new WKTReader();
   
    @Before
    public void setupWriteTest() throws IOException {
        // clone the file to avoid issues with write tests
        new File("./target/ ").mkdirs();
        File source = new File("./src/test/resources/org/geotools/data/transform/states.properties");
        File target = new File("./target/transform/states.properties");
        target.delete();
        FileUtils.copyFile(source, target);

        PropertyDataStore pds = new PropertyDataStore(new File("./target/transform"));
        STATES = pds.getFeatureSource("states");
    }

    SimpleFeatureSource transformWithPartialTransform() throws Exception {
        List<Definition> definitions = new ArrayList<Definition>();
        definitions.add(new Definition("geom", ECQL.toExpression("buffer(the_geom, 1)")));
        definitions.add(new Definition("name", ECQL.toExpression("strToLowercase(state_name)")));
        definitions.add(new Definition("total", ECQL.toExpression("male + female")));
        definitions.add(new Definition("people", ECQL.toExpression("persons")));

        SimpleFeatureSource transformed = TransformFactory.transform(STATES, "bstates", definitions);
        return transformed;
    }

    @Test
    public void testFeatureStore() throws Exception {
        // these are easy, selection and renaming, they can be inverted
        assertTrue(transformWithSelection() instanceof SimpleFeatureStore);
        assertTrue(transformWithRename() instanceof SimpleFeatureStore);
        assertTrue(transformWithPartialTransform() instanceof SimpleFeatureStore);
        // this one does not have any definition that can be inverted
        assertTrue(transformWithExpressions() instanceof SimpleFeatureSource);
    }

    @Test
    public void testDeleteOnSelection() throws Exception {
        Filter f = CQL.toFilter("state_name = 'Delaware'");
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithSelection();
        transformed.removeFeatures(f);

        // check it has been deleted
        int size = STATES.getCount(Query.ALL);
        assertEquals(9, size);

        // check it's not possible to get at it anymore
        assertEquals(0, STATES.getFeatures(f).size());
        assertEquals(0, transformed.getFeatures(f).size());
    }

    @Test
    public void testDeleteOnRename() throws Exception {
        Filter f = CQL.toFilter("name = 'Delaware'");
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithRename();
        transformed.removeFeatures(f);

        // check it has been deleted
        int size = STATES.getCount(Query.ALL);
        assertEquals(9, size);

        // check it's not possible to get at it anymore
        assertEquals(0, STATES.getFeatures(f).size());
        assertEquals(0, transformed.getFeatures(f).size());
    }

    @Test
    public void testDeleteOnTransform() throws Exception {
        Filter f = CQL.toFilter("name = 'delaware'");
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithPartialTransform();
        transformed.removeFeatures(f);

        // check it has been deleted
        int size = STATES.getCount(Query.ALL);
        assertEquals(9, size);

        // check it's not possible to get at it anymore
        assertEquals(0, STATES.getFeatures(f).size());
        assertEquals(0, transformed.getFeatures(f).size());
       
        // now remove everything else
        f = CQL.toFilter("people = total");
        transformed.removeFeatures(f);
        assertEquals(0, STATES.getFeatures(Query.ALL).size());
        assertEquals(0, transformed.getFeatures(Query.ALL).size());
    }
   
    @Test
    public void testInsertOnSelection() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithSelection();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // add the feature
        transformed.addFeatures(DataUtilities.collection(sf));
       
        // check it's there
        int size = STATES.getCount(Query.ALL);
        assertEquals(11, size);
       
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
    }
   
    @Test
    public void testInsertOnRename() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithRename();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // add the feature
        transformed.addFeatures(DataUtilities.collection(sf));
       
        // check it's there
        int size = STATES.getCount(Query.ALL);
        assertEquals(11, size);
       
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("name = 'baloon'"))).size());
    }
   
    @Test
    public void testInsertOnTransform() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithPartialTransform();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // add the feature
        transformed.addFeatures(DataUtilities.collection(sf));
       
        // check it's there
        int size = STATES.getCount(Query.ALL);
        assertEquals(11, size);
       
        // the name won't be preserved since it's transformed, we use the population instead
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("persons = 1"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("people = 1"))).size());
    }
   
    @Test
    public void testSetOnSelection() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithSelection();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // set the feature
        transformed.setFeatures(new CollectionFeatureReader(new SimpleFeature[] {sf}));
       
        // check it's there and it's the only one
        int size = STATES.getCount(Query.ALL);
        assertEquals(1, size);
       
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
    }
   
    @Test
    public void testSetOnRename() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithRename();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // set the feature
        transformed.setFeatures(new CollectionFeatureReader(new SimpleFeature[] {sf}));
       
        // check it's there
        int size = STATES.getCount(Query.ALL);
        assertEquals(1, size);
       
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("state_name = 'baloon'"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("name = 'baloon'"))).size());
    }
   
    @Test
    public void testSetOnTransform() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithPartialTransform();
        SimpleFeatureBuilder fb = new SimpleFeatureBuilder(transformed.getSchema());
        fb.add(wkt.read("POINT (-120 40)").buffer(3));
        fb.add("baloon");
        fb.add(1);
        fb.add(1);
        SimpleFeature sf = fb.buildFeature("states_mini.11");
       
        // set the feature
        transformed.setFeatures(new CollectionFeatureReader(new SimpleFeature[] {sf}));
       
        // check it's there
        int size = STATES.getCount(Query.ALL);
        assertEquals(1, size);
       
        // the name won't be preserved since it's transformed, we use the population instead
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("persons = 1"))).size());
        assertEquals(1, transformed.getFeatures(new Query(null, CQL.toFilter("people = 1"))).size());
    }
   
    @Test
    public void testUpdateOnSelection() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithSelection();
       
        // modify the feature
        transformed.modifyFeatures("persons", 0, CQL.toFilter("state_name = 'Illinois'"));
       
        // check it has been modified
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("persons = 0"))).size());
        SimpleFeatureCollection rfc = transformed.getFeatures(new Query(null, CQL.toFilter("persons = 0")));
        assertEquals(1, rfc.size());
       
        // double check the features themselves
        SimpleFeatureIterator fi = rfc.features();
        try {
            assertTrue(fi.hasNext());
            SimpleFeature sf = fi.next();
            assertEquals("Illinois", sf.getAttribute("state_name"));
        } finally {
            fi.close();
        }
    }
   
    @Test
    public void testUpdateOnRename() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithRename();
       
        // modify the feature
        transformed.modifyFeatures("people", 0, CQL.toFilter("name = 'Illinois'"));
       
        // check it has been modified
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("persons = 0"))).size());
        SimpleFeatureCollection rfc = transformed.getFeatures(new Query(null, CQL.toFilter("people = 0")));
        assertEquals(1, rfc.size());
       
        // double check the features themselves
        SimpleFeatureIterator fi = rfc.features();
        try {
            assertTrue(fi.hasNext());
            SimpleFeature sf = fi.next();
            assertEquals("Illinois", sf.getAttribute("name"));
        } finally {
            fi.close();
        }
    }
   
    @Test
    public void testUpdateOnTransform() throws Exception {
        SimpleFeatureStore transformed = (SimpleFeatureStore) transformWithPartialTransform();
       
        // modify the feature
        transformed.modifyFeatures("people", 0, CQL.toFilter("name = 'illinois'"));
       
        // check it has been modified
        assertEquals(1, STATES.getFeatures(new Query(null, CQL.toFilter("persons = 0"))).size());
        SimpleFeatureCollection rfc = transformed.getFeatures(new Query(null, CQL.toFilter("people = 0")));
        assertEquals(1, rfc.size());
       
        // double check the features themselves
        SimpleFeatureIterator fi = rfc.features();
        try {
            assertTrue(fi.hasNext());
            SimpleFeature sf = fi.next();
            assertEquals("illinois", sf.getAttribute("name"));
        } finally {
            fi.close();
        }
    }
   
}
TOP

Related Classes of org.geotools.data.transform.TransformFeatureStoreTest

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.