+
+ public static FilterFactory2 ff() {
+ return filterFactory;
+ }
+
+ public static SimpleFeature querySingleFeature(
+ FeatureSource<SimpleFeatureType, SimpleFeature> featureSource,
+ String featureId) {
+ Set<FeatureId> ids = new HashSet<FeatureId>();
+ ids.add(ff().featureId(featureId));
+ Filter filter = ff().id(ids);
+ FeatureIterator<SimpleFeature> it = null;
+ try {
+ it = featureSource.getFeatures(filter).features();
+ if (!it.hasNext())
+ return null;
+ else {
+ SimpleFeature feature = it.next();
+ if (it.hasNext())
+ log.warn("More than one feature for feature id "
+ + featureId + " in feature source "
+ + featureSource.getName());
+ return feature;
+ }
+ } catch (Exception e) {
+ throw new ArgeoException("Cannot extract single feature "
+ + featureId + " from feature source "
+ + featureSource.getName(), e);
+ } finally {
+ closeQuietly(it);
+ }
+ }
+
+ public static void closeQuietly(FeatureIterator<?> featureIterator) {
+ if (featureIterator != null)
+ try {
+ featureIterator.close();
+ } catch (Exception e) {
+ // silent
+ }
+ }