org.apache.commons.jxpath.ri.compiler
Class Path

java.lang.Object
  extended byorg.apache.commons.jxpath.ri.compiler.Expression
      extended byorg.apache.commons.jxpath.ri.compiler.Path
Direct Known Subclasses:
ExpressionPath, LocationPath

public abstract class Path
extends Expression

Version:
$Revision: 1.14 $ $Date: 2004/04/01 02:55:32 $
Author:
Dmitri Plotnikov

Nested Class Summary
 
Nested classes inherited from class org.apache.commons.jxpath.ri.compiler.Expression
Expression.PointerIterator, Expression.ValueIterator
 
Field Summary
private  boolean basic
           
private  boolean basicKnown
           
private  Step[] steps
           
 
Fields inherited from class org.apache.commons.jxpath.ri.compiler.Expression
NOT_A_NUMBER, ONE, ZERO
 
Constructor Summary
Path(Step[] steps)
           
 
Method Summary
protected  boolean areBasicPredicates(Expression[] predicates)
           
private  EvalContext buildContextChain(EvalContext context, int stepCount, boolean createInitialContext)
           
 boolean computeContextDependent()
          Implemented by subclasses and result is cached by isContextDependent()
protected  EvalContext createContextForStep(EvalContext context, int axis, NodeTest nodeTest)
          Different axes are serviced by different contexts.
protected  EvalContext evalSteps(EvalContext context)
          Given a root context, walks a path therefrom and builds a context that contains all nodes matching the path.
protected  Pointer getSingleNodePointerForSteps(EvalContext context)
          Given a root context, walks a path therefrom and finds the pointer to the first element matching the path.
 Step[] getSteps()
           
 boolean isSimplePath()
          Recognized paths formatted as foo/bar[3]/baz[@name = 'biz'] .
protected  boolean isSimpleStep(Step step)
          A Step is "simple" if it takes one of these forms: ".", "/foo", "@bar", "/foo[3]".
private  Pointer searchForPath(EvalContext context)
          The idea here is to return a NullPointer rather than null if that's at all possible.
 
Methods inherited from class org.apache.commons.jxpath.ri.compiler.Expression
compute, computeValue, isContextDependent, iterate, iteratePointers
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

steps

private Step[] steps

basicKnown

private boolean basicKnown

basic

private boolean basic
Constructor Detail

Path

public Path(Step[] steps)
Method Detail

getSteps

public Step[] getSteps()

computeContextDependent

public boolean computeContextDependent()
Description copied from class: Expression
Implemented by subclasses and result is cached by isContextDependent()

Specified by:
computeContextDependent in class Expression

isSimplePath

public boolean isSimplePath()
Recognized paths formatted as foo/bar[3]/baz[@name = 'biz'] . The evaluation of such "simple" paths is optimized and streamlined.


isSimpleStep

protected boolean isSimpleStep(Step step)
A Step is "simple" if it takes one of these forms: ".", "/foo", "@bar", "/foo[3]". If there are predicates, they should be context independent for the step to still be considered simple.


areBasicPredicates

protected boolean areBasicPredicates(Expression[] predicates)

getSingleNodePointerForSteps

protected Pointer getSingleNodePointerForSteps(EvalContext context)
Given a root context, walks a path therefrom and finds the pointer to the first element matching the path.


searchForPath

private Pointer searchForPath(EvalContext context)
The idea here is to return a NullPointer rather than null if that's at all possible. Take for example this path: "//map/key". Let's say, "map" is an existing node, but "key" is not there. We will create a NullPointer that can be used to set/create the "key" property.

However, a path like "//key" would still produce null, because we have no way of knowing where "key" would be if it existed.

To accomplish this, we first try the path itself. If it does not find anything, we chop off last step of the path, as long as it is a simple one like child:: or attribute:: and try to evaluate the truncated path. If it finds exactly one node - create a NullPointer and return. If it fails, chop off another step and repeat. If it finds more than one location - return null.


evalSteps

protected EvalContext evalSteps(EvalContext context)
Given a root context, walks a path therefrom and builds a context that contains all nodes matching the path.


buildContextChain

private EvalContext buildContextChain(EvalContext context,
                                      int stepCount,
                                      boolean createInitialContext)

createContextForStep

protected EvalContext createContextForStep(EvalContext context,
                                           int axis,
                                           NodeTest nodeTest)
Different axes are serviced by different contexts. This method allocates the right context for the supplied step.