org.apache.xpath.axes
Class AxesWalker

java.lang.Object
  extended byorg.apache.xpath.Expression
      extended byorg.apache.xpath.patterns.NodeTest
          extended byorg.apache.xpath.axes.PredicatedNodeTest
              extended byorg.apache.xpath.axes.AxesWalker
All Implemented Interfaces:
Cloneable, ExpressionNode, ExpressionOwner, PathComponent, Serializable, javax.xml.transform.SourceLocator, SubContextList, XPathVisitable
Direct Known Subclasses:
FilterExprWalker, ReverseAxesWalker

public class AxesWalker
extends PredicatedNodeTest
implements Cloneable, PathComponent, ExpressionOwner

Serves as common interface for axes Walkers, and stores common state variables.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class org.apache.xpath.axes.PredicatedNodeTest
PredicatedNodeTest.PredOwner
 
Field Summary
protected  int m_axis
          The traversal axis from where the nodes will be filtered.
private  int m_currentNode
          The node at which the TreeWalker is currently positioned.
private  DTM m_dtm
          The DTM for the root.
(package private)  boolean m_isFresh
          True if an itteration has not begun.
protected  AxesWalker m_nextWalker
          The next walker in the location step chain.
(package private)  AxesWalker m_prevWalker
          The previous walker in the location step chain, or null.
(package private)  int m_root
          The root node of the TreeWalker, as specified when it was created.
protected  DTMAxisTraverser m_traverser
          The DTM inner traversal class, that corresponds to the super axis.
 
Fields inherited from class org.apache.xpath.axes.PredicatedNodeTest
DEBUG_PREDICATECOUNTING, m_foundLast, m_lpi, m_predCount, m_predicateIndex, m_proximityPositions
 
Fields inherited from class org.apache.xpath.patterns.NodeTest
m_name, m_whatToShow, SCORE_NODETEST, SCORE_NONE, SCORE_NSWILD, SCORE_OTHER, SCORE_QNAME, SHOW_BYFUNCTION, SUPPORTS_PRE_STRIPPING, WILD
 
Fields inherited from class org.apache.xpath.Expression
 
Constructor Summary
AxesWalker(LocPathIterator locPathIterator, int axis)
          Construct an AxesWalker using a LocPathIterator.
 
Method Summary
 void callVisitors(ExpressionOwner owner, XPathVisitor visitor)
          This will traverse the heararchy, calling the visitor for each member.
 Object clone()
          Get a cloned AxesWalker.
(package private)  AxesWalker cloneDeep(WalkingIterator cloneOwner, Vector cloneList)
          Do a deep clone of this walker, including next and previous walkers.
 boolean deepEquals(Expression expr)
          Compare this object with another object and see if they are equal, include the sub heararchy.
 void detach()
          Detaches the walker from the set which it iterated over, releasing any computational resources and placing the iterator in the INVALID state.
(package private) static AxesWalker findClone(AxesWalker key, Vector cloneList)
          Find a clone that corresponds to the key argument.
 int getAnalysisBits()
          Get the analysis bits for this walker, as defined in the WalkerFactory.
 int getAxis()
          Returns the axis being iterated, if it is known.
 int getCurrentNode()
          The node at which the TreeWalker is currently positioned.
 DTM getDTM(int node)
          Get the DTM for this walker.
 Expression getExpression()
          Get the raw Expression object that this class wraps.
 int getLastPos(XPathContext xctxt)
          Get the index of the last node that can be itterated to.
protected  int getNextNode()
          Get the next node in document order on the axes.
 AxesWalker getNextWalker()
          Get the next walker in the location step chain.
 AxesWalker getPrevWalker()
          Get the previous walker reference in the location step chain.
 int getRoot()
          The root node of the TreeWalker, as specified in setRoot(int root).
 void init(Compiler compiler, int opPos, int stepType)
          Initialize an AxesWalker during the parse of the XPath expression.
 boolean isDocOrdered()
          Returns true if all the nodes in the iteration well be returned in document order.
 int nextNode()
          Moves the TreeWalker to the next visible node in document order relative to the current node, and returns the new node.
private  int returnNextNode(int n)
          This is simply a way to bottle-neck the return of the next node, for diagnostic purposes.
 void setDefaultDTM(DTM dtm)
          Set the DTM for this walker.
 void setExpression(Expression exp)
          Set the raw expression object for this object.
 void setNextWalker(AxesWalker walker)
          Set the next walker in the location step chain.
 void setPrevWalker(AxesWalker walker)
          Set or clear the previous walker reference in the location step chain.
 void setRoot(int root)
          Set the root node of the TreeWalker.
 WalkingIterator wi()
           
 
Methods inherited from class org.apache.xpath.axes.PredicatedNodeTest
acceptNode, callPredicateVisitors, canTraverseOutsideSubtree, countProximityPosition, executePredicates, fixupVariables, getLocPathIterator, getPredicate, getPredicateCount, getPredicateIndex, getProximityPosition, getProximityPosition, getProximityPosition, initPredicateInfo, initProximityPosition, isReverseAxes, nodeToString, resetProximityPositions, setLocPathIterator, setPredicateCount
 
Methods inherited from class org.apache.xpath.patterns.NodeTest
calcScore, debugWhatToShow, execute, execute, execute, getDefaultScore, getLocalName, getNamespace, getNodeTypeTest, getStaticScore, getWhatToShow, initNodeTest, initNodeTest, setLocalName, setNamespace, setStaticScore, setWhatToShow
 
Methods inherited from class org.apache.xpath.Expression
asIterator, asIteratorRaw, asNode, assertion, bool, error, execute, executeCharsToContentHandler, exprAddChild, exprGetChild, exprGetNumChildren, exprGetParent, exprSetParent, getColumnNumber, getExpressionOwner, getLineNumber, getPublicId, getSystemId, isNodesetExpr, isSameClass, isStableNumber, num, warn, xstr
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_dtm

private DTM m_dtm
The DTM for the root. This can not be used, or must be changed, for the filter walker, or any walker that can have nodes from multiple documents. Never, ever, access this value without going through getDTM(int node).


m_root

transient int m_root
The root node of the TreeWalker, as specified when it was created.


m_currentNode

private transient int m_currentNode
The node at which the TreeWalker is currently positioned.


m_isFresh

transient boolean m_isFresh
True if an itteration has not begun.


m_nextWalker

protected AxesWalker m_nextWalker
The next walker in the location step chain.


m_prevWalker

AxesWalker m_prevWalker
The previous walker in the location step chain, or null.


m_axis

protected int m_axis
The traversal axis from where the nodes will be filtered.


m_traverser

protected DTMAxisTraverser m_traverser
The DTM inner traversal class, that corresponds to the super axis.

Constructor Detail

AxesWalker

public AxesWalker(LocPathIterator locPathIterator,
                  int axis)
Construct an AxesWalker using a LocPathIterator.

Parameters:
locPathIterator - non-null reference to the parent iterator.
Method Detail

wi

public final WalkingIterator wi()

init

public void init(Compiler compiler,
                 int opPos,
                 int stepType)
          throws javax.xml.transform.TransformerException
Initialize an AxesWalker during the parse of the XPath expression.

Parameters:
compiler - The Compiler object that has information about this walker in the op map.
opPos - The op code position of this location step.
stepType - The type of location step.
Throws:
javax.xml.transform.TransformerException

clone

public Object clone()
             throws CloneNotSupportedException
Get a cloned AxesWalker.

Overrides:
clone in class PredicatedNodeTest
Returns:
A new AxesWalker that can be used without mutating this one.
Throws:
CloneNotSupportedException

cloneDeep

AxesWalker cloneDeep(WalkingIterator cloneOwner,
                     Vector cloneList)
               throws CloneNotSupportedException
Do a deep clone of this walker, including next and previous walkers. If the this AxesWalker is on the clone list, don't clone but return the already cloned version.

Parameters:
cloneOwner - non-null reference to the cloned location path iterator to which this clone will be added.
cloneList - non-null vector of sources in odd elements, and the corresponding clones in even vectors.
Returns:
non-null clone, which may be a new clone, or may be a clone contained on the cloneList.
Throws:
CloneNotSupportedException

findClone

static AxesWalker findClone(AxesWalker key,
                            Vector cloneList)
Find a clone that corresponds to the key argument.

Parameters:
key - The original AxesWalker for which there may be a clone.
cloneList - vector of sources in odd elements, and the corresponding clones in even vectors, may be null.
Returns:
A clone that corresponds to the key, or null if key not found.

detach

public void detach()
Detaches the walker from the set which it iterated over, releasing any computational resources and placing the iterator in the INVALID state.


getRoot

public int getRoot()
The root node of the TreeWalker, as specified in setRoot(int root). Note that this may actually be below the current node.

Returns:
The context node of the step.

getAnalysisBits

public int getAnalysisBits()
Get the analysis bits for this walker, as defined in the WalkerFactory.

Specified by:
getAnalysisBits in interface PathComponent
Returns:
One of WalkerFactory#BIT_DESCENDANT, etc.

setRoot

public void setRoot(int root)
Set the root node of the TreeWalker. (Not part of the DOM2 TreeWalker interface).

Parameters:
root - The context node of this step.

getCurrentNode

public final int getCurrentNode()
The node at which the TreeWalker is currently positioned.
The value must not be null. Alterations to the DOM tree may cause the current node to no longer be accepted by the TreeWalker's associated filter. currentNode may also be explicitly set to any node, whether or not it is within the subtree specified by the root node or would be accepted by the filter and whatToShow flags. Further traversal occurs relative to currentNode even if it is not part of the current view by applying the filters in the requested direction (not changing currentNode where no traversal is possible).

Returns:
The node at which the TreeWalker is currently positioned, only null if setRoot has not yet been called.

setNextWalker

public void setNextWalker(AxesWalker walker)
Set the next walker in the location step chain.

Parameters:
walker - Reference to AxesWalker derivative, or may be null.

getNextWalker

public AxesWalker getNextWalker()
Get the next walker in the location step chain.

Returns:
Reference to AxesWalker derivative, or null.

setPrevWalker

public void setPrevWalker(AxesWalker walker)
Set or clear the previous walker reference in the location step chain.

Parameters:
walker - Reference to previous walker reference in the location step chain, or null.

getPrevWalker

public AxesWalker getPrevWalker()
Get the previous walker reference in the location step chain.

Returns:
Reference to previous walker reference in the location step chain, or null.

returnNextNode

private int returnNextNode(int n)
This is simply a way to bottle-neck the return of the next node, for diagnostic purposes.

Parameters:
n - Node to return, or null.
Returns:
The argument.

getNextNode

protected int getNextNode()
Get the next node in document order on the axes.

Returns:
the next node in document order on the axes, or null.

nextNode

public int nextNode()
Moves the TreeWalker to the next visible node in document order relative to the current node, and returns the new node. If the current node has no next node, or if the search for nextNode attempts to step upward from the TreeWalker's root node, returns null , and retains the current node.

Returns:
The new node, or null if the current node has no next node in the TreeWalker's logical view.

getLastPos

public int getLastPos(XPathContext xctxt)
Get the index of the last node that can be itterated to.

Specified by:
getLastPos in interface SubContextList
Specified by:
getLastPos in class PredicatedNodeTest
Parameters:
xctxt - XPath runtime context.
Returns:
the index of the last node that can be itterated to.

setDefaultDTM

public void setDefaultDTM(DTM dtm)
Set the DTM for this walker.

Parameters:
dtm - Non-null reference to a DTM.

getDTM

public DTM getDTM(int node)
Get the DTM for this walker.

Returns:
Non-null reference to a DTM.

isDocOrdered

public boolean isDocOrdered()
Returns true if all the nodes in the iteration well be returned in document order. Warning: This can only be called after setRoot has been called!

Returns:
true as a default.

getAxis

public int getAxis()
Returns the axis being iterated, if it is known.

Returns:
Axis.CHILD, etc., or -1 if the axis is not known or is of multiple types.

callVisitors

public void callVisitors(ExpressionOwner owner,
                         XPathVisitor visitor)
This will traverse the heararchy, calling the visitor for each member. If the called visitor method returns false, the subtree should not be called.

Specified by:
callVisitors in interface XPathVisitable
Overrides:
callVisitors in class NodeTest
Parameters:
owner - The owner of the visitor, where that path may be rewritten if needed.
visitor - The visitor whose appropriate method will be called.
See Also:
XPathVisitable#callVisitors(ExpressionOwner, XPathVisitor)

getExpression

public Expression getExpression()
Description copied from interface: ExpressionOwner
Get the raw Expression object that this class wraps.

Specified by:
getExpression in interface ExpressionOwner
Returns:
the raw Expression object, which should not normally be null.
See Also:
ExpressionOwner.getExpression()

setExpression

public void setExpression(Expression exp)
Description copied from interface: ExpressionOwner
Set the raw expression object for this object.

Specified by:
setExpression in interface ExpressionOwner
Parameters:
exp - the raw Expression object, which should not normally be null.
See Also:
ExpressionOwner.setExpression(Expression)

deepEquals

public boolean deepEquals(Expression expr)
Description copied from class: Expression
Compare this object with another object and see if they are equal, include the sub heararchy.

Overrides:
deepEquals in class PredicatedNodeTest
See Also:
Expression.deepEquals(Expression)