Search in sources :

Example 1 with DefaultTransaction

use of org.geotools.data.DefaultTransaction in project GeoGig by boundlessgeo.

the class GeoGigFeatureStoreTest method testAddFeaturesOnASeparateBranch.

@Test
public void testAddFeaturesOnASeparateBranch() throws Exception {
    final String branchName = "addtest";
    final Ref branchRef = geogig.command(BranchCreateOp.class).setName(branchName).call();
    dataStore.setHead(branchName);
    FeatureCollection<SimpleFeatureType, SimpleFeature> collection;
    collection = DataUtilities.collection(Arrays.asList((SimpleFeature) points1, (SimpleFeature) points2, (SimpleFeature) points3));
    Transaction tx = new DefaultTransaction();
    points.setTransaction(tx);
    assertSame(tx, points.getTransaction());
    try {
        List<FeatureId> addedFeatures = points.addFeatures(collection);
        assertNotNull(addedFeatures);
        assertEquals(3, addedFeatures.size());
        // assert transaction isolation
        assertEquals(3, points.getFeatures().size());
        assertEquals(0, dataStore.getFeatureSource(pointsTypeName).getFeatures().size());
        tx.commit();
        assertEquals(3, dataStore.getFeatureSource(pointsTypeName).getFeatures().size());
    } catch (Exception e) {
        tx.rollback();
        throw e;
    } finally {
        tx.close();
    }
}
Also used : FeatureId(org.opengis.filter.identity.FeatureId) Ref(org.locationtech.geogig.api.Ref) SimpleFeatureType(org.opengis.feature.simple.SimpleFeatureType) Transaction(org.geotools.data.Transaction) DefaultTransaction(org.geotools.data.DefaultTransaction) SimpleFeature(org.opengis.feature.simple.SimpleFeature) DefaultTransaction(org.geotools.data.DefaultTransaction) Test(org.junit.Test)

Example 2 with DefaultTransaction

use of org.geotools.data.DefaultTransaction in project GeoGig by boundlessgeo.

the class GeoGigFeatureStoreTest method testUseProvidedFIDSupported.

@Test
public void testUseProvidedFIDSupported() throws Exception {
    assertTrue(points.getQueryCapabilities().isUseProvidedFIDSupported());
    FeatureCollection<SimpleFeatureType, SimpleFeature> collection;
    collection = DataUtilities.collection(Arrays.asList((SimpleFeature) points1, (SimpleFeature) points2, (SimpleFeature) points3));
    Transaction tx = new DefaultTransaction();
    points.setTransaction(tx);
    try {
        List<FeatureId> newFids = points.addFeatures(collection);
        assertNotNull(newFids);
        assertEquals(3, newFids.size());
        FeatureId fid1 = newFids.get(0);
        FeatureId fid2 = newFids.get(1);
        FeatureId fid3 = newFids.get(2);
        // new ids should have been generated...
        assertFalse(idP1.equals(fid1.getID()));
        assertFalse(idP1.equals(fid1.getID()));
        assertFalse(idP1.equals(fid1.getID()));
        // now force the use of provided feature ids
        points1.getUserData().put(Hints.USE_PROVIDED_FID, Boolean.TRUE);
        points2.getUserData().put(Hints.USE_PROVIDED_FID, Boolean.TRUE);
        points3.getUserData().put(Hints.USE_PROVIDED_FID, Boolean.TRUE);
        List<FeatureId> providedFids = points.addFeatures(collection);
        assertNotNull(providedFids);
        assertEquals(3, providedFids.size());
        FeatureId fid11 = providedFids.get(0);
        FeatureId fid21 = providedFids.get(1);
        FeatureId fid31 = providedFids.get(2);
        // ids should match provided
        assertEquals(idP1, fid11.getID());
        assertEquals(idP2, fid21.getID());
        assertEquals(idP3, fid31.getID());
        tx.commit();
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid1))).size());
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid2))).size());
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid3))).size());
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid11))).size());
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid21))).size());
        assertEquals(1, points.getFeatures(ff.id(Collections.singleton(fid31))).size());
    } catch (Exception e) {
        tx.rollback();
        throw e;
    } finally {
        tx.close();
    }
}
Also used : FeatureId(org.opengis.filter.identity.FeatureId) SimpleFeatureType(org.opengis.feature.simple.SimpleFeatureType) Transaction(org.geotools.data.Transaction) DefaultTransaction(org.geotools.data.DefaultTransaction) SimpleFeature(org.opengis.feature.simple.SimpleFeature) DefaultTransaction(org.geotools.data.DefaultTransaction) Test(org.junit.Test)

Example 3 with DefaultTransaction

use of org.geotools.data.DefaultTransaction in project GeoGig by boundlessgeo.

the class GeoGigFeatureStoreTest method testTransactionCommitMessage.

@Test
public void testTransactionCommitMessage() throws Exception {
    FeatureCollection<SimpleFeatureType, SimpleFeature> collection;
    collection = DataUtilities.collection(Arrays.asList((SimpleFeature) points1, (SimpleFeature) points2, (SimpleFeature) points3));
    DefaultTransaction tx = new DefaultTransaction();
    points.setTransaction(tx);
    assertSame(tx, points.getTransaction());
    try {
        points.addFeatures(collection);
        tx.putProperty(GeogigTransactionState.VERSIONING_COMMIT_AUTHOR, "John Doe");
        tx.putProperty(GeogigTransactionState.VERSIONING_COMMIT_MESSAGE, "test message");
        tx.commit();
        assertEquals(3, dataStore.getFeatureSource(pointsTypeName).getFeatures().size());
    } catch (Exception e) {
        tx.rollback();
        throw e;
    } finally {
        tx.close();
    }
    List<RevCommit> commits = toList(geogig.command(LogOp.class).call());
    assertFalse(commits.isEmpty());
    assertTrue(commits.get(0).getAuthor().getName().isPresent());
    assertEquals("John Doe", commits.get(0).getAuthor().getName().get());
    assertEquals("test message", commits.get(0).getMessage());
}
Also used : SimpleFeatureType(org.opengis.feature.simple.SimpleFeatureType) SimpleFeature(org.opengis.feature.simple.SimpleFeature) DefaultTransaction(org.geotools.data.DefaultTransaction) RevCommit(org.locationtech.geogig.api.RevCommit) Test(org.junit.Test)

Example 4 with DefaultTransaction

use of org.geotools.data.DefaultTransaction in project GeoGig by boundlessgeo.

the class GeoGigFeatureStoreTest method testModifyFeatures.

@Test
public void testModifyFeatures() throws Exception {
    // add features circumventing FeatureStore.addFeatures to keep the test
    // independent of the addFeatures functionality
    insertAndAdd(lines1, lines2, lines3, points1, points2, points3);
    geogig.command(CommitOp.class).call();
    Id filter = ff.id(Collections.singleton(ff.featureId(idP1)));
    Transaction tx = new DefaultTransaction();
    points.setTransaction(tx);
    try {
        // initial value
        SimpleFeature initial = points.getFeatures(filter).features().next();
        assertEquals("StringProp1_1", initial.getAttribute("sp"));
        // modify
        points.modifyFeatures("sp", "modified", filter);
        // modified value before commit
        SimpleFeature modified = points.getFeatures(filter).features().next();
        assertEquals("modified", modified.getAttribute("sp"));
        // unmodified value before commit on another store instance (tx isolation)
        assertEquals("StringProp1_1", dataStore.getFeatureSource(pointsTypeName).getFeatures(filter).features().next().getAttribute("sp"));
        tx.commit();
        // modified value after commit on another store instance
        assertEquals("modified", dataStore.getFeatureSource(pointsTypeName).getFeatures(filter).features().next().getAttribute("sp"));
    } catch (Exception e) {
        tx.rollback();
        throw e;
    } finally {
        tx.close();
    }
    points.setTransaction(Transaction.AUTO_COMMIT);
    SimpleFeature modified = points.getFeatures(filter).features().next();
    assertEquals("modified", modified.getAttribute("sp"));
}
Also used : Transaction(org.geotools.data.Transaction) DefaultTransaction(org.geotools.data.DefaultTransaction) ResourceId(org.opengis.filter.identity.ResourceId) ObjectId(org.locationtech.geogig.api.ObjectId) Id(org.opengis.filter.Id) FeatureId(org.opengis.filter.identity.FeatureId) CommitOp(org.locationtech.geogig.api.porcelain.CommitOp) DefaultTransaction(org.geotools.data.DefaultTransaction) SimpleFeature(org.opengis.feature.simple.SimpleFeature) Test(org.junit.Test)

Example 5 with DefaultTransaction

use of org.geotools.data.DefaultTransaction in project GeoGig by boundlessgeo.

the class GeoGigFeatureStoreTest method testAddFeatures.

@Test
public void testAddFeatures() throws Exception {
    FeatureCollection<SimpleFeatureType, SimpleFeature> collection;
    collection = DataUtilities.collection(Arrays.asList((SimpleFeature) points1, (SimpleFeature) points2, (SimpleFeature) points3));
    try {
        points.addFeatures(collection);
        fail("Expected UnsupportedOperationException on AUTO_COMMIT");
    } catch (UnsupportedOperationException e) {
        assertTrue(e.getMessage().contains("AUTO_COMMIT"));
    }
    Transaction tx = new DefaultTransaction();
    points.setTransaction(tx);
    assertSame(tx, points.getTransaction());
    try {
        List<FeatureId> addedFeatures = points.addFeatures(collection);
        assertNotNull(addedFeatures);
        assertEquals(3, addedFeatures.size());
        for (FeatureId id : addedFeatures) {
            assertFalse(id instanceof ResourceId);
            assertNotNull(id.getFeatureVersion());
        }
        // assert transaction isolation
        assertEquals(3, points.getFeatures().size());
        assertEquals(0, dataStore.getFeatureSource(pointsTypeName).getFeatures().size());
        tx.commit();
        assertEquals(3, dataStore.getFeatureSource(pointsTypeName).getFeatures().size());
    } catch (Exception e) {
        tx.rollback();
        throw e;
    } finally {
        tx.close();
    }
}
Also used : FeatureId(org.opengis.filter.identity.FeatureId) SimpleFeatureType(org.opengis.feature.simple.SimpleFeatureType) Transaction(org.geotools.data.Transaction) DefaultTransaction(org.geotools.data.DefaultTransaction) ResourceId(org.opengis.filter.identity.ResourceId) SimpleFeature(org.opengis.feature.simple.SimpleFeature) DefaultTransaction(org.geotools.data.DefaultTransaction) Test(org.junit.Test)

Aggregations

DefaultTransaction (org.geotools.data.DefaultTransaction)20 Transaction (org.geotools.data.Transaction)17 SimpleFeature (org.opengis.feature.simple.SimpleFeature)15 SimpleFeatureType (org.opengis.feature.simple.SimpleFeatureType)14 Test (org.junit.Test)12 SimpleFeatureStore (org.geotools.data.simple.SimpleFeatureStore)9 ShapefileDataStore (org.geotools.data.shapefile.ShapefileDataStore)6 FeatureId (org.opengis.filter.identity.FeatureId)6 HashMap (java.util.HashMap)5 Map (java.util.Map)5 Query (org.geotools.data.Query)5 ObjectId (org.locationtech.geogig.api.ObjectId)5 IOException (java.io.IOException)4 FileDataStoreFactorySpi (org.geotools.data.FileDataStoreFactorySpi)4 SimpleFeatureCollection (org.geotools.data.simple.SimpleFeatureCollection)4 SimpleFeatureIterator (org.geotools.data.simple.SimpleFeatureIterator)4 SimpleFeatureBuilder (org.geotools.feature.simple.SimpleFeatureBuilder)4 AttributeDescriptor (org.opengis.feature.type.AttributeDescriptor)4 SimpleFeatureSource (org.geotools.data.simple.SimpleFeatureSource)3 Ignore (org.junit.Ignore)3