// String[] typeNames = dataStore.getTypeNames();
// System.err.println(typeNames);
final SimpleFeatureStore store;
store = (SimpleFeatureStore) dataStore.getFeatureSource(typeName);
final SimpleFeatureType schema = store.getSchema();
GeometryDescriptor defaultGeometry = schema.getGeometryDescriptor();
String fid1;
String fid2;
// insert polygons p1, p2 and grab the fids for later retrieval
{
FeatureWriter<SimpleFeatureType, SimpleFeature> writer = dataStore
.getFeatureWriterAppend(typeName, Transaction.AUTO_COMMIT);
SimpleFeature feature;
try {
feature = writer.next();
// set this attribute as its the only non nillable one
feature.setAttribute("INT32_COL", Integer.valueOf(0));
// now set the geometry
feature.setAttribute(defaultGeometry.getName(), p1);
writer.write();
fid1 = feature.getID();
feature = writer.next();
// set this attribute as its the only non nillable one
feature.setAttribute("INT32_COL", Integer.valueOf(0));
// now set the geometry
feature.setAttribute(defaultGeometry.getName(), p2);
writer.write();
fid2 = feature.getID();
} finally {
writer.close();
}
}
final Transaction transaction = new DefaultTransaction("testUpdateAdjacentPolygons");
store.setTransaction(transaction);
final FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
Filter fid1Filter = ff.id(Collections.singleton(ff.featureId(fid1)));
Filter fid2Filter = ff.id(Collections.singleton(ff.featureId(fid2)));
try {
store.modifyFeatures(defaultGeometry.getName(), modif2, fid2Filter);
store.modifyFeatures(defaultGeometry.getName(), modif1, fid1Filter);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
throw e;
} finally {
transaction.close();
}
store.setTransaction(Transaction.AUTO_COMMIT);
try {
SimpleFeatureCollection features;
SimpleFeatureIterator iterator;
features = store.getFeatures(fid1Filter);
iterator = features.features();
final SimpleFeature feature1 = iterator.next();
iterator.close();
features = store.getFeatures(fid2Filter);
iterator = features.features();
final SimpleFeature feature2 = iterator.next();
iterator.close();
// Note that for tables that are ambiguous about what types of geometries
// they store (as this table is), ArcSDE will "compress" a stored geometry
// to it's simplest representation. So in case the defaultGeometry.getBinding()
// returns "Geometry", do instanceof checks to verify what kind of geometry
// you're getting back
Geometry actual1 = (Geometry) feature1.getAttribute(defaultGeometry.getLocalName());
Geometry actual2 = (Geometry) feature2.getAttribute(defaultGeometry.getLocalName());
System.out.println(actual1);
System.out.println(modif1);
// there's some rounding that goes on inside SDE. Need to do some simple buffering to
// make sure