001    /*
002     * Copyright 2005 John G. Wilson
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     *
016     */
017    
018    package groovy.util.slurpersupport;
019    
020    import java.util.Iterator;
021    
022    /**
023     * @author John Wilson
024     *
025     */
026    
027    public abstract class NodeIterator implements Iterator {
028    private final Iterator iter;
029    private Object nextNode;
030    
031      public NodeIterator(final Iterator iter) {
032        this.iter = iter;
033        this.nextNode = getNextNode(iter);
034      }
035      
036      public boolean hasNext() {
037        return this.nextNode != null;
038      }
039      
040      public Object next() {
041        try {
042          return this.nextNode;
043        } finally {
044          this.nextNode = getNextNode(this.iter);
045        }
046      }
047      
048      public void remove() {
049        throw new UnsupportedOperationException();
050      }
051      
052      protected abstract Object getNextNode(final Iterator iter);
053    }