KickJava   Java API By Example, From Geeks To Geeks.

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


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

61
62
63
64 package org.jaxen.util;
65
66 import java.util.Iterator JavaDoc;
67 import java.util.LinkedList JavaDoc;
68 import java.util.NoSuchElementException JavaDoc;
69
70 import org.jaxen.JaxenConstants;
71 import org.jaxen.Navigator;
72 import org.jaxen.UnsupportedAxisException;
73
74 public class PrecedingSiblingAxisIterator implements Iterator JavaDoc
75 {
76     private Object JavaDoc contextNode;
77     private Navigator navigator;
78
79     private Iterator JavaDoc siblingIter;
80     private Object JavaDoc nextObj;
81
82     public PrecedingSiblingAxisIterator(Object JavaDoc contextNode,
83                                         Navigator navigator) throws UnsupportedAxisException
84     {
85         this.contextNode = contextNode;
86         this.navigator = navigator;
87
88         init();
89         if ( siblingIter.hasNext() )
90         {
91             this.nextObj = siblingIter.next();
92         }
93     }
94
95     private void init() throws UnsupportedAxisException
96     {
97         
98         Object JavaDoc parent = this.navigator.getParentNode( this.contextNode );
99
100         if ( parent != null )
101         {
102             Iterator JavaDoc childIter = this.navigator.getChildAxisIterator( parent );
103             LinkedList JavaDoc siblings = new LinkedList JavaDoc();
104             
105             while ( childIter.hasNext() )
106             {
107                 Object JavaDoc eachChild = childIter.next();
108                 if ( eachChild.equals(this.contextNode) )
109                 {
110                     break;
111                 }
112                 siblings.addFirst( eachChild );
113             }
114             
115             this.siblingIter = siblings.iterator();
116             
117         }
118         else {
119             this.siblingIter = JaxenConstants.EMPTY_ITERATOR;
120         }
121         
122     }
123
124     public boolean hasNext()
125     {
126         return ( this.nextObj != null );
127     }
128
129     public Object JavaDoc next() throws NoSuchElementException JavaDoc
130     {
131         if ( ! hasNext() )
132         {
133             throw new NoSuchElementException JavaDoc();
134         }
135
136         Object JavaDoc obj = this.nextObj;
137         if ( siblingIter.hasNext() )
138         {
139             this.nextObj = siblingIter.next();
140         }
141         else {
142             this.nextObj = null;
143         }
144         return obj;
145     }
146
147     public void remove() throws UnsupportedOperationException JavaDoc
148     {
149         throw new UnsupportedOperationException JavaDoc();
150     }
151
152 }
153
Popular Tags