001    /*
002     * Copyright (c) 2005 Peter Palotas, Fredrik Johansson, Einar Pehrson,
003     * Sebastian Kekkonen, Lars Magnus Lång, Malin Johansson and Sofia Nilsson
004     *
005     * This file is part of
006     * CleanSheets Extension for Assertions
007     *
008     * CleanSheets Extension for Assertions is free software; you can
009     * redistribute it and/or modify it under the terms of the GNU General Public
010     * License as published by the Free Software Foundation; either version 2 of
011     * the License, or (at your option) any later version.
012     *
013     * CleanSheets Extension for Assertions is distributed in the hope that
014     * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015     * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with CleanSheets Extension for Assertions; if not, write to the
020     * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021     * Boston, MA  02111-1307  USA
022     */
023    package csheets.ext.assertion;
024    
025    import java.util.Iterator;
026    import java.util.NoSuchElementException;
027    
028    /** An iterator wrapper used by MultiInterval to be able to expose
029        the intervals contained in the MultiInterval without
030        allowing the user to modify the underlying collection
031        directly.
032        @author Peter Palotas */
033    public class ConstMultiIntervalIterator implements Iterator<Interval> {
034    
035            private Iterator<Interval> iter;
036    
037            /** Creates a new "const"-iterator using the iterator specified
038                for all operations except remove.
039                @param iter the iterator to use for iteration. */
040            protected ConstMultiIntervalIterator(Iterator<Interval> iter) {
041                    this.iter = iter;
042            }
043    
044            /** Returns <code>true</code> if the iteration has more elements.
045                    (In other words, returns <code>true</code> if <code>next</code> would return
046                    an element rather than throwing an exception.)
047                    @return true if the iterator has more elements, <code>false</code> otherwise. */
048            public boolean hasNext() {
049                    return iter.hasNext();
050            }
051    
052            /** Returns the next element in the iteration. Calling this method repeatedly until the
053                    <code>hasNext()</code> method returns <code>false</code> will return each element
054                    in the underlying collection exactly once.
055                    @return the next element in the iteration.
056                    @exception NoSuchElementException iteration has no more elements. */
057            public Interval next() {
058                    return iter.next();
059            }
060    
061            /** Throws UnsupportedOperationException since this iterator does not allow modification
062                    of the unerlying collection.
063                    @exception UnsupportedOperationException whenever called. */
064            public void remove() {
065                    throw new UnsupportedOperationException("Cannot modify a MultiInterval through its iterator");
066            }
067    };