14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file 44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information 54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file 64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License. 84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at 94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software 134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and 164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License. 174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/* 194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: DTMAxisIterator.java 468653 2006-10-28 07:07:05Z minchau $ 204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xml.dtm; 224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/** 244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * This class iterates over a single XPath Axis, and returns node handles. 254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpublic interface DTMAxisIterator extends Cloneable 274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{ 284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** Specifies the end of the iteration, and is the same as DTM.NULL. */ 304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public static final int END = DTM.NULL; 314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Get the next node in the iteration. 344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The next node handle in the iteration, or END. 364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int next(); 384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Resets the iterator to the last start node. 424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return A DTMAxisIterator, which may or may not be the same as this 444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * iterator. 454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public DTMAxisIterator reset(); 474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return the number of nodes in this iterator. This may be an expensive 504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * operation when called the first time. 514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getLast(); 534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The position of the current node in the set, as defined by XPath. 564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getPosition(); 584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Remembers the current node for the next call to gotoMark(). 614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void setMark(); 634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Restores the current node remembered by setMark(). 664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void gotoMark(); 684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Set start to END should 'close' the iterator, 714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * i.e. subsequent call to next() should return END. 724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param node Sets the root of the iteration. 744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return A DTMAxisIterator set to the start of the iteration. 764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public DTMAxisIterator setStartNode(int node); 784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Get start to END should 'close' the iterator, 814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * i.e. subsequent call to next() should return END. 824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The root node of the iteration. 844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getStartNode(); 864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return true if this iterator has a reversed axis, else false. 894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public boolean isReverse(); 914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return a deep copy of this iterator. The clone should not be reset 944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * from its current position. 954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public DTMAxisIterator cloneIterator(); 974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Set if restartable. 1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public void setRestartable(boolean isRestartable); 1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson 1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson /** 1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Return the node at the given position. 1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * 1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @param position The position 1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * @return The node at the given position. 1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */ 1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson public int getNodeByPosition(int position); 1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson} 111