[Schmitzm-commits] r371 - branches/1.0-gt2-2.6/src/org/geotools/feature/collection
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Sep 3 20:24:42 CEST 2009
Author: alfonx
Date: 2009-09-03 20:24:41 +0200 (Thu, 03 Sep 2009)
New Revision: 371
Added:
branches/1.0-gt2-2.6/src/org/geotools/feature/collection/SubFeatureCollection.java
Log:
Copied from 2.6-m2. Added by SK on 2009-09-03 because the 2.6-M2
SubFeatureCollection had forgotten to overwrite getBounds() and
threw an UnsupportedOperationException.
It has been reported as http://jira.codehaus.org/browse/GEOT-2693
Added: branches/1.0-gt2-2.6/src/org/geotools/feature/collection/SubFeatureCollection.java
===================================================================
--- branches/1.0-gt2-2.6/src/org/geotools/feature/collection/SubFeatureCollection.java 2009-09-03 18:02:08 UTC (rev 370)
+++ branches/1.0-gt2-2.6/src/org/geotools/feature/collection/SubFeatureCollection.java 2009-09-03 18:24:41 UTC (rev 371)
@@ -0,0 +1,227 @@
+/*
+ * GeoTools - The Open Source Java GIS Toolkit
+ * http://geotools.org
+ *
+ * (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ */
+package org.geotools.feature.collection;
+
+/*******************
+ * This copied from 2.6-m2. Added by SK on 2009-09-03 because the 2.6-M2
+ * SubFeatureCollection had forgotten to overwrite getBounds() and
+ * threw an UnsupportedOperationException.
+ * It has been reported as http://jira.codehaus.org/browse/GEOT-2693
+ *******************/
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.geotools.data.DataUtilities;
+import org.geotools.data.FeatureReader;
+import org.geotools.data.collection.DelegateFeatureReader;
+import org.geotools.factory.CommonFactoryFinder;
+import org.geotools.feature.CollectionListener;
+import org.geotools.feature.FeatureCollection;
+import org.geotools.feature.FeatureIterator;
+import org.geotools.feature.visitor.FeatureVisitor;
+import org.geotools.geometry.jts.ReferencedEnvelope;
+import org.geotools.util.ProgressListener;
+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.sort.SortBy;
+
+/**
+ * Used as a reasonable default implementation for subCollection.
+ * <p>
+ * Note: to implementors, this is not optimal, please do your own
+ * thing - your users will thank you.
+ * </p>
+ *
+ * @author Jody Garnett, Refractions Research, Inc.
+ *
+ * @source $URL: http://svn.osgeo.org/geotools/tags/2.6-M2/modules/library/main/src/main/java/org/geotools/feature/collection/SubFeatureCollection.java $
+ */
+public class SubFeatureCollection extends AbstractFeatureCollection {
+
+ /** Filter */
+ protected Filter filter;
+
+ /** Original Collection */
+ protected FeatureCollection<SimpleFeatureType, SimpleFeature> collection;
+
+ protected FilterFactory ff = CommonFactoryFinder.getFilterFactory( null );
+
+ public SubFeatureCollection(FeatureCollection<SimpleFeatureType, SimpleFeature> collection ) {
+ this( collection, Filter.INCLUDE );
+ }
+ public SubFeatureCollection(FeatureCollection<SimpleFeatureType, SimpleFeature> collection, Filter subfilter ){
+ super( collection.getSchema() );
+ if (subfilter == null ) subfilter = Filter.INCLUDE;
+ if (subfilter.equals(Filter.EXCLUDE)) {
+ throw new IllegalArgumentException("A subcollection with Filter.EXCLUDE would be empty");
+ }
+ if( collection instanceof SubFeatureCollection){
+ SubFeatureCollection filtered = (SubFeatureCollection) collection;
+ if( subfilter.equals(Filter.INCLUDE)){
+ this.collection = filtered.collection;
+ this.filter = filtered.filter();
+ }
+ else {
+ this.collection = filtered.collection;
+ this.filter = ff.and( filtered.filter(), subfilter );
+ }
+ } else {
+ this.collection = collection;
+ this.filter = subfilter;
+ }
+ }
+
+ public Iterator openIterator() {
+ return new FilteredIterator<SimpleFeature>( collection, filter() );
+ }
+
+ public void closeIterator(Iterator iterator) {
+ if( iterator == null ) return;
+
+ if( iterator instanceof FilteredIterator){
+ FilteredIterator filtered = (FilteredIterator) iterator;
+ filtered.close();
+ }
+ }
+
+ public int size() {
+ int count = 0;
+ Iterator i = null;
+ try {
+ for( i = iterator(); i.hasNext(); count++) i.next();
+ }
+ finally {
+ close( i );
+ }
+ return count;
+ }
+
+ protected Filter filter(){
+ if( filter == null ){
+ filter = createFilter();
+ }
+ return filter;
+ }
+
+ /** Override to implement subsetting */
+ protected Filter createFilter(){
+ return Filter.INCLUDE;
+ }
+
+ public FeatureIterator<SimpleFeature> features() {
+ return new DelegateFeatureIterator<SimpleFeature>( this, iterator() );
+ }
+
+
+ public void close(FeatureIterator<SimpleFeature> close) {
+ if( close != null ) close.close();
+ }
+
+ //
+ //
+ //
+ public FeatureCollection<SimpleFeatureType, SimpleFeature> subCollection(Filter filter) {
+ if (filter.equals(Filter.INCLUDE)) {
+ return this;
+ }
+ if (filter.equals(Filter.EXCLUDE)) {
+ // TODO implement EmptyFeatureCollection( schema )
+ }
+ return new SubFeatureCollection(this, filter);
+ }
+
+
+ public boolean isEmpty() {
+ Iterator iterator = iterator();
+ try {
+ return !iterator.hasNext();
+ }
+ finally {
+ close( iterator );
+ }
+ }
+
+ public void accepts(org.opengis.feature.FeatureVisitor visitor, org.opengis.util.ProgressListener progress) {
+ Iterator iterator = null;
+ // if( progress == null ) progress = new NullProgressListener();
+ try{
+ float size = size();
+ float position = 0;
+ progress.started();
+ for( iterator = iterator(); !progress.isCanceled() && iterator.hasNext(); progress.progress( position++/size )){
+ try {
+ SimpleFeature feature = (SimpleFeature) iterator.next();
+ visitor.visit(feature);
+ }
+ catch( Exception erp ){
+ progress.exceptionOccurred( erp );
+ }
+ }
+ }
+ finally {
+ progress.complete();
+ close( iterator );
+ }
+ }
+
+ public FeatureCollection<SimpleFeatureType, SimpleFeature> sort(SortBy order) {
+ return new SubFeatureList( collection, filter, order );
+ }
+
+ public boolean add(SimpleFeature o) {
+ return collection.add(o);
+ }
+
+ public void clear() {
+ List toDelete = DataUtilities.list( this );
+ removeAll( toDelete );
+ }
+
+ public boolean remove(Object o) {
+ return collection.remove( o );
+ }
+
+ public String getID() {
+ return collection.getID();
+ }
+
+ // extra methods
+ public FeatureReader<SimpleFeatureType, SimpleFeature> reader() throws IOException {
+ return new DelegateFeatureReader<SimpleFeatureType, SimpleFeature>( getSchema(), features() );
+ }
+
+ public int getCount() throws IOException {
+ return size();
+ }
+
+ public FeatureCollection<SimpleFeatureType, SimpleFeature> collection() throws IOException {
+ return this;
+ }
+
+ @Override
+ public ReferencedEnvelope getBounds() {
+ return collection.getBounds();
+ }
+
+}
Property changes on: branches/1.0-gt2-2.6/src/org/geotools/feature/collection/SubFeatureCollection.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
More information about the Schmitzm-commits
mailing list