| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.commons.collections.iterators; |
| |
| import java.util.Collection; |
| import java.util.Enumeration; |
| import java.util.Iterator; |
| |
| /** |
| * Adapter to make {@link Enumeration Enumeration} instances appear |
| * to be {@link Iterator Iterator} instances. |
| * |
| * @since Commons Collections 1.0 |
| * @version $Revision$ $Date$ |
| * |
| * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> |
| * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a> |
| */ |
| public class EnumerationIterator implements Iterator { |
| |
| /** The collection to remove elements from */ |
| private Collection collection; |
| /** The enumeration being converted */ |
| private Enumeration enumeration; |
| /** The last object retrieved */ |
| private Object last; |
| |
| // Constructors |
| //----------------------------------------------------------------------- |
| /** |
| * Constructs a new <code>EnumerationIterator</code> that will not |
| * function until {@link #setEnumeration(Enumeration)} is called. |
| */ |
| public EnumerationIterator() { |
| this(null, null); |
| } |
| |
| /** |
| * Constructs a new <code>EnumerationIterator</code> that provides |
| * an iterator view of the given enumeration. |
| * |
| * @param enumeration the enumeration to use |
| */ |
| public EnumerationIterator(final Enumeration enumeration) { |
| this(enumeration, null); |
| } |
| |
| /** |
| * Constructs a new <code>EnumerationIterator</code> that will remove |
| * elements from the specified collection. |
| * |
| * @param enumeration the enumeration to use |
| * @param collection the collection to remove elements form |
| */ |
| public EnumerationIterator(final Enumeration enumeration, final Collection collection) { |
| super(); |
| this.enumeration = enumeration; |
| this.collection = collection; |
| this.last = null; |
| } |
| |
| // Iterator interface |
| //----------------------------------------------------------------------- |
| /** |
| * Returns true if the underlying enumeration has more elements. |
| * |
| * @return true if the underlying enumeration has more elements |
| * @throws NullPointerException if the underlying enumeration is null |
| */ |
| public boolean hasNext() { |
| return enumeration.hasMoreElements(); |
| } |
| |
| /** |
| * Returns the next object from the enumeration. |
| * |
| * @return the next object from the enumeration |
| * @throws NullPointerException if the enumeration is null |
| */ |
| public Object next() { |
| last = enumeration.nextElement(); |
| return last; |
| } |
| |
| /** |
| * Removes the last retrieved element if a collection is attached. |
| * <p> |
| * Functions if an associated <code>Collection</code> is known. |
| * If so, the first occurrence of the last returned object from this |
| * iterator will be removed from the collection. |
| * |
| * @throws IllegalStateException <code>next()</code> not called. |
| * @throws UnsupportedOperationException if no associated collection |
| */ |
| public void remove() { |
| if (collection != null) { |
| if (last != null) { |
| collection.remove(last); |
| } else { |
| throw new IllegalStateException("next() must have been called for remove() to function"); |
| } |
| } else { |
| throw new UnsupportedOperationException("No Collection associated with this Iterator"); |
| } |
| } |
| |
| // Properties |
| //----------------------------------------------------------------------- |
| /** |
| * Returns the underlying enumeration. |
| * |
| * @return the underlying enumeration |
| */ |
| public Enumeration getEnumeration() { |
| return enumeration; |
| } |
| |
| /** |
| * Sets the underlying enumeration. |
| * |
| * @param enumeration the new underlying enumeration |
| */ |
| public void setEnumeration(final Enumeration enumeration) { |
| this.enumeration = enumeration; |
| } |
| |
| } |