KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jaxen > util > DescendantAxisIterator


1 package org.jaxen.util;
2
3 /*
4  * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/util/DescendantAxisIterator.java,v 1.9 2005/01/19 13:36:27 elharo Exp $
5  * $Revision: 1.9 $
6  * $Date: 2005/01/19 13:36:27 $
7  *
8  * ====================================================================
9  *
10  * Copyright (C) 2000-2005 bob mcwhirter & James Strachan.
11  * All rights reserved.
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  *
17  * 1. Redistributions of source code must retain the above copyright
18  * notice, this list of conditions, and the following disclaimer.
19  *
20  * 2. Redistributions in binary form must reproduce the above copyright
21  * notice, this list of conditions, and the disclaimer that follows
22  * these conditions in the documentation and/or other materials
23  * provided with the distribution.
24  *
25  * 3. The name "Jaxen" must not be used to endorse or promote products
26  * derived from this software without prior written permission. For
27  * written permission, please contact license@jaxen.org.
28  *
29  * 4. Products derived from this software may not be called "Jaxen", nor
30  * may "Jaxen" appear in their name, without prior written permission
31  * from the Jaxen Project Management (pm@jaxen.org).
32  *
33  * In addition, we request (but do not require) that you include in the
34  * end-user documentation provided with the redistribution and/or in the
35  * software itself an acknowledgement equivalent to the following:
36  * "This product includes software developed by the
37  * Jaxen Project (http://www.jaxen.org/)."
38  * Alternatively, the acknowledgment may be graphical using the logos
39  * available at http://www.jaxen.org/
40  *
41  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
42  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
43  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
44  * DISCLAIMED. IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
45  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
46  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
47  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
48  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
49  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
51  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52  * SUCH DAMAGE.
53  *
54  * ====================================================================
55  * This software consists of voluntary contributions made by many
56  * individuals on behalf of the Jaxen Project and was originally
57  * created by bob mcwhirter <bob@werken.com> and
58  * James Strachan <jstrachan@apache.org>. For more information on the
59  * Jaxen Project, please see <http://www.jaxen.org/>.
60  *
61  * $Id: DescendantAxisIterator.java,v 1.9 2005/01/19 13:36:27 elharo Exp $
62 */

63
64 import org.jaxen.Navigator;
65 import org.jaxen.UnsupportedAxisException;
66 import org.jaxen.JaxenRuntimeException;
67
68 import java.util.Iterator JavaDoc;
69 import java.util.NoSuchElementException JavaDoc;
70 import java.util.Stack JavaDoc;
71
72 public class DescendantAxisIterator implements Iterator JavaDoc
73 {
74
75     private Stack JavaDoc stack = new Stack JavaDoc();
76     private Iterator JavaDoc children;
77     private Navigator navigator;
78
79     public DescendantAxisIterator(Object JavaDoc contextNode,
80                                   Navigator navigator) throws UnsupportedAxisException
81     {
82         this(navigator, navigator.getChildAxisIterator(contextNode));
83     }
84
85     public DescendantAxisIterator(Navigator navigator,
86                                   Iterator JavaDoc iterator)
87     {
88         this.navigator = navigator;
89         this.children = iterator;
90     }
91
92     public boolean hasNext()
93     {
94         while (!children.hasNext())
95         {
96             if (stack.isEmpty())
97             {
98                 return false;
99             }
100             children = (Iterator JavaDoc) stack.pop();
101         }
102         return true;
103     }
104
105     public Object JavaDoc next()
106     {
107         try
108         {
109             if (hasNext())
110             {
111                 Object JavaDoc node = children.next();
112                 stack.push(children);
113                 children = navigator.getChildAxisIterator(node);
114                 return node;
115             }
116             throw new NoSuchElementException JavaDoc();
117         }
118         catch (UnsupportedAxisException e)
119         {
120             throw new JaxenRuntimeException(e);
121         }
122     }
123
124     public void remove()
125     {
126         throw new UnsupportedOperationException JavaDoc();
127     }
128
129 }
130
Popular Tags