View Javadoc

1   package org.jaxen.util;
2   
3   /*
4    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/util/AncestorOrSelfAxisIterator.java,v 1.9 2005/04/08 14:22:08 elharo Exp $
5    * $Revision: 1.9 $
6    * $Date: 2005/04/08 14:22:08 $
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: AncestorOrSelfAxisIterator.java,v 1.9 2005/04/08 14:22:08 elharo Exp $
62  */
63  
64  import java.util.Iterator;
65  import java.util.NoSuchElementException;
66  
67  import org.jaxen.Navigator;
68  import org.jaxen.UnsupportedAxisException;
69  import org.jaxen.JaxenRuntimeException;
70  
71  public class AncestorOrSelfAxisIterator implements Iterator
72  {
73      private Object    contextNode;
74      private Navigator navigator;
75  
76      public AncestorOrSelfAxisIterator(Object contextNode,
77                                        Navigator navigator)
78      {
79          // XXX should we throw a NullPointerException here if contextNode is null?
80          this.contextNode = contextNode;
81          this.navigator = navigator;
82      }
83  
84      public boolean hasNext()
85      {
86          return contextNode != null;
87      }
88  
89      public Object next()
90      {
91          try
92          {
93              if (hasNext()) {
94                  Object result = contextNode;
95                  contextNode = navigator.getParentNode(contextNode);
96                  return result;
97              }
98              throw new NoSuchElementException(); // XXX provide exception message
99          }
100         catch (UnsupportedAxisException e)
101         {
102             throw new JaxenRuntimeException(e);
103         }
104     }
105 
106     public void remove()
107     {
108         throw new UnsupportedOperationException();
109     }
110 }