/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-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.data.store; import java.util.Iterator; import java.util.NoSuchElementException; import org.opengis.feature.simple.SimpleFeature; /** * This iterator is used to indicate that contents could not be aquired. * <p> * The normal Collection.iterator() method does not let us return an error * (we always have to return an iterator). However Iterator.next() can * be used to return an NoSuchElementException. * </p> * <p> * So we are basically going to lie, we are going to pretend their is content * *once*, and when they ask for it we are going to hit them with * a NoSuchElementExcetion. This is a mean trick, but it does convey the idea * of asking for content that is supposed to be there and failing to aquire it. * </p> * @author jgarnett * @since 2.1.RC0 * * @source $URL$ */ public class NoContentIterator implements Iterator<SimpleFeature> { Throwable origionalProblem; public NoContentIterator( Throwable t ){ origionalProblem = t; } public boolean hasNext() { return origionalProblem != null; } public SimpleFeature next() { if( origionalProblem == null ){ // you only get the real error on the first offense // (after that you are just silly) // throw new NoSuchElementException(); } NoSuchElementException cantFind = new NoSuchElementException( "Could not aquire feature:" + origionalProblem ); cantFind.initCause( origionalProblem ); origionalProblem = null; throw cantFind; } public void remove() { if( origionalProblem == null ){ // user did not call next first throw new UnsupportedOperationException(); } // User did not call next first throw new IllegalStateException(); } }