Package org.geoserver.gss

Source Code of org.geoserver.gss.MergingFeatureDiffReaderTest

package org.geoserver.gss;

import static java.util.Collections.*;
import static org.geotools.data.DataUtilities.*;

import java.util.HashSet;
import java.util.Set;

import org.geotools.data.DefaultTransaction;
import org.geotools.data.FeatureDiff;
import org.geotools.data.FeatureDiffReader;
import org.geotools.data.Transaction;
import org.geotools.data.VersioningFeatureStore;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Id;

import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.io.WKTReader;

public class MergingFeatureDiffReaderTest extends GSSTestSupport {

    public void testMergeSingle() throws Exception {
        // grab the datastore
        VersioningFeatureStore restricted = (VersioningFeatureStore) synchStore
                .getFeatureSource("restricted");
        SimpleFeatureType schema = restricted.getSchema();

        // an update
        Id updateFilter = ff.id(singleton(ff
                .featureId("restricted.be7cafea-d0b7-4257-9b9c-1ed3de3f7ef4")));
        restricted.modifyFeatures(schema.getDescriptor("cat"), -48, updateFilter);
        // a delete
        Id removeFilter = ff.id(singleton(ff
                .featureId("restricted.d91fe390-bdc7-4b22-9316-2cd6c8737ef5")));
        restricted.removeFeatures(removeFilter);
        // and an insert
        WKTReader wkt = new WKTReader();
        SimpleFeature f = SimpleFeatureBuilder.build(schema, new Object[] { 123,
                wkt.read("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))") }, null);
        restricted.addFeatures(collection(f));

        // grab a diff reader
        FeatureDiffReader reader = restricted.getDifferences("FIRST", "LAST", null, null);
        FeatureDiffReader reader2 = restricted.getDifferences("FIRST", "LAST", null, null);

        // build a merging one, it should report the same resuls
        MergingFeatureDiffReader merge = new MergingFeatureDiffReader(reader2);

        int count = 0;
        Set<Integer> states = new HashSet<Integer>();
        while (reader.hasNext()) {
            assertTrue(merge.hasNext());
            FeatureDiff fd = reader.next();
            FeatureDiff fdm = merge.next();
            assertEquals(fd, fdm);
            count++;
            states.add(fd.getState());
        }
        reader.close();
        merge.close();

        assertEquals(3, count);
        assertEquals(3, states.size());
    }

    public void testDeleteReinsert() throws Exception {
        // grab the datastore
        VersioningFeatureStore restricted = (VersioningFeatureStore) synchStore
                .getFeatureSource("restricted");
        SimpleFeatureType schema = restricted.getSchema();

        // remove
        Id removeFilter = ff.id(singleton(ff
                .featureId("restricted.d91fe390-bdc7-4b22-9316-2cd6c8737ef5")));
        Transaction t = new DefaultTransaction();
        restricted.setTransaction(t);
        restricted.removeFeatures(removeFilter);
        String v1 = restricted.getVersion();
        t.commit();

        // revert
        String v2 = restricted.getVersion();
        restricted.rollback("FIRST", null, null);
        t.commit();
        t.close();
       
        restricted.setTransaction(Transaction.AUTO_COMMIT);

        // grab the two readers, separate
        FeatureDiffReader r1 = restricted.getDifferences("FIRST", v1, null, null);
        FeatureDiffReader r2 = restricted.getDifferences(v1, v2, null, null);

        // build a merging one, it should report the same resuls
        MergingFeatureDiffReader merge = new MergingFeatureDiffReader(r1, r2);
       
        assertFalse(merge.hasNext());
        merge.close();
    }
   
    public void testMergeMulti() throws Exception {
        // grab the datastore
        VersioningFeatureStore restricted = (VersioningFeatureStore) synchStore
                .getFeatureSource("restricted");
        SimpleFeatureType schema = restricted.getSchema();

        // first update
        Id updateFilter = ff.id(singleton(ff
                .featureId("restricted.be7cafea-d0b7-4257-9b9c-1ed3de3f7ef4")));
        Transaction t = new DefaultTransaction();
        restricted.setTransaction(t);
        restricted.modifyFeatures(schema.getDescriptor("cat"), -48, updateFilter);
        String v1 = restricted.getVersion();
        t.commit();
       
        // second update
        WKTReader wkt = new WKTReader();
        Geometry g = wkt.read("MULTIPOLYGON(((0 0, 0 10, 10 10, 10 0, 0 0)))");
        restricted.modifyFeatures(schema.getDescriptor("the_geom"), g, updateFilter);
        String v2 = restricted.getVersion();
        t.commit();
       
        // clean up
        t.close();
        restricted.setTransaction(Transaction.AUTO_COMMIT);

        // grab the two readers, separate
        FeatureDiffReader r1 = restricted.getDifferences("FIRST", v1, null, null);
        FeatureDiffReader r2 = restricted.getDifferences(v1, v2, null, null);

        // build a merging one, it should report the same resuls
        MergingFeatureDiffReader merge = new MergingFeatureDiffReader(r1, r2);
       
        assertTrue(merge.hasNext());
        FeatureDiff fd = merge.next();
        assertEquals(2, fd.getChangedAttributes().size());
        assertEquals(-48l, fd.getFeature().getAttribute("cat"));
        assertTrue(g.equals((Geometry) fd.getFeature().getAttribute("the_geom")));
        assertFalse(merge.hasNext());
        merge.close();
    }
}
TOP

Related Classes of org.geoserver.gss.MergingFeatureDiffReaderTest

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.