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 }