package org.geotools.data;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.geotools.data.collection.ListFeatureCollection;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureStore;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.factory.GeoTools;
import org.geotools.feature.FeatureCollections;
import org.geotools.feature.simple.SimpleFeatureBuilder;
import org.geotools.geometry.jts.GeometryBuilder;
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.FilterFactory;
import org.opengis.filter.identity.FeatureId;
@SuppressWarnings("unused")
public class SimpleFeatureStoreExamples {
DataStore dataStore = null;
String typeName;
private void addFeaturesExample() throws Exception {
// addExample start
SimpleFeatureStore store = (SimpleFeatureStore) dataStore.getFeatureSource( typeName );
SimpleFeatureType featureType = store.getSchema();
SimpleFeatureBuilder build = new SimpleFeatureBuilder(featureType);
GeometryBuilder geom = new GeometryBuilder();
List<SimpleFeature> list = new ArrayList<>();
list.add( build.buildFeature("fid1", new Object[]{ geom.point(1,1), "hello" } ) );
list.add( build.buildFeature("fid2", new Object[]{ geom.point(2,3), "martin" } ) );
SimpleFeatureCollection collection = new ListFeatureCollection(featureType, list);
Transaction transaction = new DefaultTransaction("Add Example");
store.setTransaction( transaction );
try {
store.addFeatures( collection );
transaction.commit(); // actually writes out the features in one go
}
catch( Exception eek){
transaction.rollback();
}
// addExample end
}
private void addFeatureIdExample(SimpleFeatureCollection collection ) throws Exception {
// addFeatureIdExample start
Transaction transaction = new DefaultTransaction("Add Example");
SimpleFeatureStore store = (SimpleFeatureStore) dataStore.getFeatureSource(typeName);
store.setTransaction(transaction);
try {
List<FeatureId> added = store.addFeatures( collection );
System.out.println( added ); // prints out the temporary feature ids
transaction.commit();
System.out.println( added ); // prints out the final feature ids
Set<FeatureId> selection = new HashSet<>(added);
FilterFactory ff = CommonFactoryFinder.getFilterFactory();
Filter selected = ff.id( selection ); // filter selecting all the features just added
}
catch( Exception problem){
transaction.rollback();
throw problem;
}
// addFeatureIdExample end
}
private void addFeaturesEvents(SimpleFeatureCollection collection ) throws Exception {
// addEvents start
Transaction transaction = new DefaultTransaction("Add Example");
SimpleFeatureStore store = (SimpleFeatureStore) dataStore.getFeatureSource(typeName);
store.setTransaction(transaction);
class CommitListener implements FeatureListener {
public void changed(FeatureEvent featureEvent) {
if (featureEvent instanceof BatchFeatureEvent ){
BatchFeatureEvent batchEvent = (BatchFeatureEvent) featureEvent;
System.out.println( "area changed:" + batchEvent.getBounds() );
System.out.println( "created fids:" + batchEvent.fids );
}
else {
System.out.println( "bounds:" + featureEvent.getBounds() );
System.out.println( "change:" + featureEvent.filter );
}
}
}
CommitListener listener = new CommitListener();
store.addFeatureListener( listener );
try {
List<FeatureId> added = store.addFeatures( collection );
transaction.commit();
}
catch( Exception problem){
transaction.rollback();
throw problem;
}
// addEvents end
}
private void removeExample() throws Exception {
// removeExample start
Transaction transaction = new DefaultTransaction("removeExample");
SimpleFeatureStore store = (SimpleFeatureStore) dataStore.getFeatureSource(typeName);
store.setTransaction(transaction);
FilterFactory ff = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
Filter filter = ff.id(Collections.singleton(ff.featureId("fred")));
try {
store.removeFeatures(filter);
transaction.commit();
} catch (Exception eek) {
transaction.rollback();
}
// removeExample end
}
private void removeExample2() throws Exception {
// removeExample2 start
Transaction transaction = new DefaultTransaction("removeExample");
SimpleFeatureStore store = (SimpleFeatureStore) dataStore.getFeatureSource(typeName);
store.setTransaction(transaction);
FilterFactory ff = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
Filter filter = ff.id(Collections.singleton(ff.featureId("fred")));
try {
final Set<FeatureId> removed = new HashSet<>();
SimpleFeatureCollection collection = store.getFeatures( new Query( typeName, filter, Query.NO_NAMES ));
collection.accepts( new FeatureVisitor(){
public void visit(Feature feature) {
removed.add( feature.getIdentifier() );
}
}, null );
store.removeFeatures(filter);
transaction.commit();
} catch (Exception eek) {
transaction.rollback();
}
// removeExample2 end
}
}