KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > xml > catalog > lib > IteratorIterator


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19 package org.netbeans.modules.xml.catalog.lib;
20
21 import java.util.*;
22
23 /**
24  * Let a list of iterators behave as a single iterator.
25  *
26  * @author Petr Kuzel
27  */

28 public final class IteratorIterator implements Iterator {
29
30     private Vector iterators = new Vector();
31
32     private Iterator current = null; //current iterator;
33
private Iterator it = null; //iterators.iterator();
34

35     /*
36      * It is set by hasNext() and cleared by next() call.
37      */

38     private Object JavaDoc next = null; //current element
39

40     /**
41      * New iterators can be added while hasNext() or prior its first call.
42      * @param it iterator, never <codE>null</null>.
43      */

44     public void add(Iterator it) {
45         assert it != null;
46         iterators.add(it);
47     }
48
49     /**
50      * Unsupported operation.
51      */

52     public void remove() {
53         throw new UnsupportedOperationException JavaDoc();
54     }
55
56     public Object JavaDoc next() {
57        if (hasNext()) {
58            Object JavaDoc tmp = next;
59            next = null;
60            return tmp;
61        } else {
62            throw new NoSuchElementException();
63        }
64     }
65
66     public boolean hasNext() {
67         if (next != null) return true;
68         
69         if (it == null) it = iterators.iterator();
70         while (current == null) {
71             if (it.hasNext()) {
72                 current = (Iterator) it.next();
73             } else {
74                 return false;
75             }
76         }
77         
78         while (current.hasNext() || it.hasNext()) {
79             
80             // fetch next iterator if necessary
81
if (current.hasNext() == false) {
82                 current = (Iterator) it.next();
83                 continue;
84             } else {
85                 next = current.next();
86                 return true;
87             }
88         }
89         next = null;
90         return false;
91     }
92 }
93
Popular Tags