1 /* 2 * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. 3 * 4 * This software is open source. 5 * See the bottom of this file for the licence. 6 */ 7 8 package org.dom4j.tree; 9 10 import java.util.Iterator; 11 import java.util.NoSuchElementException; 12 13 /*** 14 * <p> 15 * <code>FilterIterator</code> is an abstract base class which is useful for 16 * implementors of {@link Iterator}which filter an existing iterator. 17 * </p> 18 * 19 * @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a> 20 * @version $Revision: 1.10 $ 21 * 22 * @deprecated THIS CLASS WILL BE REMOVED IN dom4j-1.6 !! 23 */ 24 public abstract class FilterIterator implements Iterator { 25 protected Iterator proxy; 26 27 private Object next; 28 29 private boolean first = true; 30 31 public FilterIterator(Iterator proxy) { 32 this.proxy = proxy; 33 } 34 35 public boolean hasNext() { 36 if (first) { 37 next = findNext(); 38 first = false; 39 } 40 41 return next != null; 42 } 43 44 public Object next() throws NoSuchElementException { 45 if (!hasNext()) { 46 throw new NoSuchElementException(); 47 } 48 49 Object answer = this.next; 50 this.next = findNext(); 51 52 return answer; 53 } 54 55 /*** 56 * Always throws UnsupportedOperationException as this class does look-ahead 57 * with its internal iterator. 58 * 59 * @throws UnsupportedOperationException 60 * always 61 */ 62 public void remove() { 63 throw new UnsupportedOperationException(); 64 } 65 66 /*** 67 * Filter method to perform some matching on the given element. 68 * 69 * @param element 70 * DOCUMENT ME! 71 * 72 * @return true if the given element matches the filter and should be appear 73 * in the iteration 74 */ 75 protected abstract boolean matches(Object element); 76 77 protected Object findNext() { 78 if (proxy != null) { 79 while (proxy.hasNext()) { 80 Object nextObject = proxy.next(); 81 82 if ((nextObject != null) && matches(nextObject)) { 83 return nextObject; 84 } 85 } 86 87 proxy = null; 88 } 89 90 return null; 91 } 92 } 93 94 /* 95 * Redistribution and use of this software and associated documentation 96 * ("Software"), with or without modification, are permitted provided that the 97 * following conditions are met: 98 * 99 * 1. Redistributions of source code must retain copyright statements and 100 * notices. Redistributions must also contain a copy of this document. 101 * 102 * 2. Redistributions in binary form must reproduce the above copyright notice, 103 * this list of conditions and the following disclaimer in the documentation 104 * and/or other materials provided with the distribution. 105 * 106 * 3. The name "DOM4J" must not be used to endorse or promote products derived 107 * from this Software without prior written permission of MetaStuff, Ltd. For 108 * written permission, please contact dom4j-info@metastuff.com. 109 * 110 * 4. Products derived from this Software may not be called "DOM4J" nor may 111 * "DOM4J" appear in their names without prior written permission of MetaStuff, 112 * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd. 113 * 114 * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org 115 * 116 * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND 117 * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 118 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 119 * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE 120 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 121 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 122 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 123 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 124 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 125 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 126 * POSSIBILITY OF SUCH DAMAGE. 127 * 128 * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved. 129 */