org.apache.xpath

Class XPathContext


public class XPathContext
extends DTMManager

Default class for the runtime execution context for XPath.

This class extends DTMManager but does not directly implement it.

Nested Class Summary

class
XPathContext.XPathExpressionContext

Field Summary

static int
RECURSIONLIMIT
The ammount to use for stacks that record information during the recursive execution.
XMLReader
m_primaryReader
The reader of the primary source tree.

Fields inherited from class org.apache.xml.dtm.DTMManager

IDENT_DTM_DEFAULT, IDENT_DTM_NODE_BITS, IDENT_MAX_DTMS, IDENT_NODE_DEFAULT, m_incremental, m_source_location

Constructor Summary

XPathContext()
Create an XPathContext instance.
XPathContext(Object owner)
Create an XPathContext instance.
XPathContext(Object owner, boolean recursiveVarContext)
Create an XPathContext instance.
XPathContext(boolean recursiveVarContext)
Create an XPathContext instance.

Method Summary

DTMIterator
createDTMIterator(Object xpathCompiler, int pos)
Create a new DTMIterator based on an XPath UnionExpr.="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr.">
DTMIterator
createDTMIterator(String xpathString, PrefixResolver presolver)
Create a new DTMIterator based on an XPath UnionExpr.="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr.">
DTMIterator
createDTMIterator(int node)
Create a new DTMIterator that holds exactly one node.
DTMIterator
createDTMIterator(int whatToShow, DTMFilter filter, boolean entityReferenceExpansion)
Create a new DTMIterator based only on a whatToShow and a DTMFilter.
DTM
createDocumentFragment()
Creates an empty DocumentFragment object.
Stack
getAxesIteratorStackStacks()
int
getContextNode()
Get the current context node.
DTMIterator
getContextNodeList()
Get the current context node list.
Stack
getContextNodeListsStack()
DTMIterator
getContextNodes()
Get the current context node list.
int
getCurrentExpressionNode()
Get the current node that is the expression's context (i.e. for current() support).
IntStack
getCurrentExpressionNodeStack()
int
getCurrentNode()
Get the current context node.
SubContextList
getCurrentNodeList()
Get the current node list as defined by the XSLT spec.
IntStack
getCurrentNodeStack()
DTM
getDTM(int nodeHandle)
Get an instance of a DTM that "owns" a node handle.
DTM
getDTM(javax.xml.transform.Source source, boolean unique, DTMWSFilter wsfilter, boolean incremental, boolean doIndexing)
Get an instance of a DTM, loaded with the content from the specified source.
int
getDTMHandleFromNode(org.w3c.dom.Node node)
Given a W3C DOM node, try and return a DTM handle.
int
getDTMIdentity(DTM dtm)
%TBD% Doc
DTMManager
getDTMManager()
Return the DTMManager object.
DTMXRTreeFrag
getDTMXRTreeFrag(int dtmIdentity)
Gets DTMXRTreeFrag object if one has already been created.
ErrorListener
getErrorListener()
Get the ErrorListener where errors and warnings are to be reported.
ExpressionContext
getExpressionContext()
The the expression context for extensions for this context.
DTM
getGlobalRTFDTM()
Get a DTM to be used as a container for a global Result Tree Fragment.
int
getIteratorRoot()
Get the current location path iterator root.
PrefixResolver
getNamespaceContext()
Get the current namespace context for the xpath.
Object
getOwnerObject()
Get the "owner" context of this context, which should be, in the case of XSLT, the Transformer object.
int
getPredicatePos()
int
getPredicateRoot()
Get the current predicate root.
XMLReader
getPrimaryReader()
Get primary XMLReader associated with this execution context.
DTM
getRTFDTM()
Get a DTM to be used as a container for a dynamic Result Tree Fragment.
SourceLocator
getSAXLocator()
Get the current locater in the stylesheet.
SourceTreeManager
getSourceTreeManager()
Get the SourceTreeManager associated with this execution context.
SubContextList
getSubContextList()
Get the current axes iterator, or return null if none.
URIResolver
getURIResolver()
Get the URIResolver associated with this execution context.
VariableStack
getVarStack()
Get the variable stack, which is in charge of variables and parameters.
boolean
isSecureProcessing()
Return the state of the secure processing feature
void
popContextNodeList()
Pop the current context node list.
void
popCurrentExpressionNode()
Pop the current node that is the expression's context (i.e. for current() support).
void
popCurrentNode()
Pop the current context node.
void
popCurrentNodeAndExpression()
Set the current context node.
void
popExpressionState()
Pop the current context node, expression node, and prefix resolver.
void
popIteratorRoot()
Pop the current location path iterator root.
void
popNamespaceContext()
Pop the current namespace context for the xpath.
void
popPredicatePos()
void
popPredicateRoot()
Pop the current predicate root.
void
popRTFContext()
Pop the RTFDTM's context mark.
void
popSAXLocator()
Pop the current locater.
void
popSubContextList()
Pop the last pushed axes iterator.
void
pushContextNodeList(DTMIterator nl)
Set the current context node list.
void
pushCurrentExpressionNode(int n)
Set the current node that is the expression's context (i.e. for current() support).
void
pushCurrentNode(int n)
Set the current context node.
void
pushCurrentNodeAndExpression(int cn, int en)
Set the current context node and expression node.
void
pushExpressionState(int cn, int en, PrefixResolver nc)
Push the current context node, expression node, and prefix resolver.
void
pushIteratorRoot(int n)
Set the current location path iterator root.
void
pushNamespaceContext(PrefixResolver pr)
Push a current namespace context for the xpath.
void
pushNamespaceContextNull()
Just increment the namespace contest stack, so that setNamespaceContext can be used on the slot.
void
pushPredicatePos(int n)
void
pushPredicateRoot(int n)
Set the current predicate root.
void
pushRTFContext()
Push the RTFDTM's context mark, to allows discarding RTFs added after this point.
void
pushSAXLocator(SourceLocator location)
Set the current locater in the stylesheet.
void
pushSAXLocatorNull()
Push a slot on the locations stack so that setSAXLocator can be repeatedly called.
void
pushSubContextList(SubContextList iter)
Push a TreeWalker on the stack.
boolean
release(DTM dtm, boolean shouldHardDelete)
Release a DTM either to a lru pool, or completely remove reference.
void
reset()
Reset for new run.
void
setAxesIteratorStackStacks(Stack s)
void
setContextNodeListsStack(Stack s)
void
setCurrentExpressionNodeStack(IntStack nv)
void
setCurrentNodeStack(IntStack nv)
void
setErrorListener(ErrorListener listener)
Set the ErrorListener where errors and warnings are to be reported.
void
setNamespaceContext(PrefixResolver pr)
Get the current namespace context for the xpath.
void
setPrimaryReader(XMLReader reader)
Set primary XMLReader associated with this execution context.
void
setSAXLocator(SourceLocator location)
Set the current locater in the stylesheet.
void
setSecureProcessing(boolean flag)
Set the state of the secure processing feature
void
setSourceTreeManager(SourceTreeManager mgr)
Set the SourceTreeManager associated with this execution context.
void
setURIResolver(URIResolver resolver)
Set the URIResolver associated with this execution context.
void
setVarStack(VariableStack varStack)
Get the variable stack, which is in charge of variables and parameters.

Methods inherited from class org.apache.xml.dtm.DTMManager

createDTMIterator, createDTMIterator, createDTMIterator, createDTMIterator, createDocumentFragment, getDTM, getDTM, getDTMHandleFromNode, getDTMIdentity, getDTMIdentityMask, getIncremental, getNodeIdentityMask, getSource_location, getXMLStringFactory, newInstance, release, setIncremental, setSource_location, setXMLStringFactory

Field Details

RECURSIONLIMIT

public static final int RECURSIONLIMIT
The ammount to use for stacks that record information during the recursive execution.
Field Value:
4096

m_primaryReader

public XMLReader m_primaryReader
The reader of the primary source tree.

Constructor Details

XPathContext

public XPathContext()

XPathContext

public XPathContext(Object owner)
Create an XPathContext instance. This is equivalent to calling the constructor XPathContext(java.lang.Object,boolean) with the value of the second parameter set to true.
Parameters:
owner - Value that can be retrieved via the getOwnerObject() method.

XPathContext

public XPathContext(Object owner,
                    boolean recursiveVarContext)
Create an XPathContext instance.
Parameters:
owner - Value that can be retrieved via the getOwnerObject() method.
recursiveVarContext - A boolean value indicating whether the XPath context needs to support pushing of scopes for variable resolution

XPathContext

public XPathContext(boolean recursiveVarContext)
Create an XPathContext instance.
Parameters:
recursiveVarContext - A boolean value indicating whether the XPath context needs to support pushing of scopes for variable resolution

Method Details

createDTMIterator

public DTMIterator createDTMIterator(Object xpathCompiler,
                                     int pos)
Create a new DTMIterator based on an XPath UnionExpr.="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr.">
Overrides:
createDTMIterator in interface DTMManager
Parameters:
xpathCompiler - ??? Somehow we need to pass in a subpart of the expression. I hate to do this with strings, since the larger expression has already been parsed.
pos - The position in the expression.
Returns:
The newly created DTMIterator.

createDTMIterator

public DTMIterator createDTMIterator(String xpathString,
                                     PrefixResolver presolver)
Create a new DTMIterator based on an XPath UnionExpr.="http://www.w3.org/TR/xpath#NT-UnionExpr">UnionExpr.">
Overrides:
createDTMIterator in interface DTMManager
Parameters:
xpathString - Must be a valid string expressing a
presolver - An object that can resolve prefixes to namespace URLs.
Returns:
The newly created DTMIterator.

createDTMIterator

public DTMIterator createDTMIterator(int node)
Create a new DTMIterator that holds exactly one node.
Overrides:
createDTMIterator in interface DTMManager
Parameters:
node - The node handle that the DTMIterator will iterate to.
Returns:
The newly created DTMIterator.

createDTMIterator

public DTMIterator createDTMIterator(int whatToShow,
                                     DTMFilter filter,
                                     boolean entityReferenceExpansion)
Create a new DTMIterator based only on a whatToShow and a DTMFilter. The traversal semantics are defined as the descendant access.
Overrides:
createDTMIterator in interface DTMManager
Parameters:
whatToShow - This flag specifies which node types may appear in the logical view of the tree presented by the iterator. See the description of NodeFilter for the set of possible SHOW_ values.These flags can be combined using OR.
filter - The NodeFilter to be used with this TreeWalker, or null to indicate no filter.
entityReferenceExpansion - The value of this flag determines whether entity reference nodes are expanded.
Returns:
The newly created NodeIterator.

createDocumentFragment

public DTM createDocumentFragment()
Creates an empty DocumentFragment object.
Overrides:
createDocumentFragment in interface DTMManager
Returns:
A new DocumentFragment handle.

getAxesIteratorStackStacks

public Stack getAxesIteratorStackStacks()

getContextNode

public final int getContextNode()
Get the current context node.
Returns:
The current context node.

getContextNodeList

public final DTMIterator getContextNodeList()
Get the current context node list.
Returns:
the current node list, also refered to here as a context node list.

getContextNodeListsStack

public Stack getContextNodeListsStack()

getContextNodes

public final DTMIterator getContextNodes()
Get the current context node list.
Returns:
An iterator for the current context list, as defined in XSLT.

getCurrentExpressionNode

public final int getCurrentExpressionNode()
Get the current node that is the expression's context (i.e. for current() support).
Returns:
The current sub-expression node.

getCurrentExpressionNodeStack

public IntStack getCurrentExpressionNodeStack()

getCurrentNode

public final int getCurrentNode()
Get the current context node.

getCurrentNodeList

public SubContextList getCurrentNodeList()
Get the current node list as defined by the XSLT spec.
Returns:
the current node list.

getCurrentNodeStack

public IntStack getCurrentNodeStack()

getDTM

public DTM getDTM(int nodeHandle)
Get an instance of a DTM that "owns" a node handle.
Overrides:
getDTM in interface DTMManager
Parameters:
nodeHandle - the nodeHandle.
Returns:
a non-null DTM reference.

getDTM

public DTM getDTM(javax.xml.transform.Source source,
                  boolean unique,
                  DTMWSFilter wsfilter,
                  boolean incremental,
                  boolean doIndexing)
Get an instance of a DTM, loaded with the content from the specified source. If the unique flag is true, a new instance will always be returned. Otherwise it is up to the DTMManager to return a new instance or an instance that it already created and may be being used by someone else. (I think more parameters will need to be added for error handling, and entity resolution).
Overrides:
getDTM in interface DTMManager
Parameters:
source - the specification of the source object, which may be null, in which case it is assumed that node construction will take by some other means.
unique - true if the returned DTM must be unique, probably because it is going to be mutated.
wsfilter - Enables filtering of whitespace nodes, and may be null.
incremental - true if the construction should try and be incremental.
doIndexing - true if the caller considers it worth it to use indexing schemes.
Returns:
a non-null DTM reference.

getDTMHandleFromNode

public int getDTMHandleFromNode(org.w3c.dom.Node node)
Given a W3C DOM node, try and return a DTM handle. Note: calling this may be non-optimal.
Overrides:
getDTMHandleFromNode in interface DTMManager
Parameters:
node - Non-null reference to a DOM node.
Returns:
a valid DTM handle.

getDTMIdentity

public int getDTMIdentity(DTM dtm)
%TBD% Doc
Overrides:
getDTMIdentity in interface DTMManager

getDTMManager

public DTMManager getDTMManager()
Return the DTMManager object. Though XPathContext context extends the DTMManager, it really is a proxy for the real DTMManager. If a caller needs to make a lot of calls to the DTMManager, it is faster if it gets the real one from this function.

getDTMXRTreeFrag

public DTMXRTreeFrag getDTMXRTreeFrag(int dtmIdentity)
Gets DTMXRTreeFrag object if one has already been created. Creates new DTMXRTreeFrag object and adds to m_DTMXRTreeFrags HashMap, otherwise.
Parameters:
dtmIdentity -
Returns:
DTMXRTreeFrag

getErrorListener

public final ErrorListener getErrorListener()
Get the ErrorListener where errors and warnings are to be reported.
Returns:
A non-null ErrorListener reference.

getExpressionContext

public ExpressionContext getExpressionContext()
The the expression context for extensions for this context.
Returns:
An object that implements the ExpressionContext.

getGlobalRTFDTM

public DTM getGlobalRTFDTM()
Get a DTM to be used as a container for a global Result Tree Fragment. This will always be an instance of (derived from? equivalent to?) SAX2DTM, since each RTF is constructed by temporarily redirecting our SAX output to it. It may be a single DTM containing for multiple fragments, if the implementation supports that. Note: The distinction between this method and getRTFDTM() is that the latter allocates space from the dynamic variable stack (m_rtfdtm_stack), which may be pruned away again as the templates which defined those variables are exited. Global variables may be bound late (see XUnresolvedVariable), and never want to be discarded, hence we need to allocate them separately and don't actually need a stack to track them.
Returns:
a non-null DTM reference.

getIteratorRoot

public final int getIteratorRoot()
Get the current location path iterator root.

getNamespaceContext

public final PrefixResolver getNamespaceContext()
Get the current namespace context for the xpath.
Returns:
the current prefix resolver for resolving prefixes to namespace URLs.

getOwnerObject

public Object getOwnerObject()
Get the "owner" context of this context, which should be, in the case of XSLT, the Transformer object. This is needed so that XSLT functions can get the Transformer.
Returns:
The owner object passed into the constructor, or null.

getPredicatePos

public final int getPredicatePos()

getPredicateRoot

public final int getPredicateRoot()
Get the current predicate root.

getPrimaryReader

public final XMLReader getPrimaryReader()
Get primary XMLReader associated with this execution context.
Returns:
The reader of the primary source tree.

getRTFDTM

public DTM getRTFDTM()
Get a DTM to be used as a container for a dynamic Result Tree Fragment. This will always be an instance of (derived from? equivalent to?) SAX2DTM, since each RTF is constructed by temporarily redirecting our SAX output to it. It may be a single DTM containing for multiple fragments, if the implementation supports that.
Returns:
a non-null DTM reference.

getSAXLocator

public SourceLocator getSAXLocator()
Get the current locater in the stylesheet.
Returns:
The location within the stylesheet, or null if not known.

getSourceTreeManager

public final SourceTreeManager getSourceTreeManager()
Get the SourceTreeManager associated with this execution context.
Returns:
the SourceTreeManager associated with this execution context.

getSubContextList

public SubContextList getSubContextList()
Get the current axes iterator, or return null if none.
Returns:
the sub-context node list.

getURIResolver

public final URIResolver getURIResolver()
Get the URIResolver associated with this execution context.
Returns:
a URI resolver, which may be null.

getVarStack

public final VariableStack getVarStack()
Get the variable stack, which is in charge of variables and parameters.
Returns:
the variable stack, which should not be null.

isSecureProcessing

public boolean isSecureProcessing()
Return the state of the secure processing feature

popContextNodeList

public final void popContextNodeList()
Pop the current context node list.

popCurrentExpressionNode

public final void popCurrentExpressionNode()
Pop the current node that is the expression's context (i.e. for current() support).

popCurrentNode

public final void popCurrentNode()
Pop the current context node.

popCurrentNodeAndExpression

public final void popCurrentNodeAndExpression()
Set the current context node.

popExpressionState

public final void popExpressionState()
Pop the current context node, expression node, and prefix resolver.

popIteratorRoot

public final void popIteratorRoot()
Pop the current location path iterator root.

popNamespaceContext

public final void popNamespaceContext()
Pop the current namespace context for the xpath.

popPredicatePos

public final void popPredicatePos()

popPredicateRoot

public final void popPredicateRoot()
Pop the current predicate root.

popRTFContext

public void popRTFContext()
Pop the RTFDTM's context mark. This discards any RTFs added after the last mark was set. If there is no RTF DTM, there's nothing to pop so this becomes a no-op. If pushes were issued before this was called, we count on the fact that popRewindMark is defined such that overpopping just resets to empty. Complicating factor: We need to handle the case of popping back to a previous RTF DTM, if one of the weird produce-an-RTF-to-build-an-RTF cases arose. Basically: If pop says this DTM is now empty, then return to the previous if one exists, in whatever state we left it in. UGLY, but hopefully the situation which forces us to consider this will arise exceedingly rarely.

popSAXLocator

public void popSAXLocator()
Pop the current locater.

popSubContextList

public final void popSubContextList()
Pop the last pushed axes iterator.

pushContextNodeList

public final void pushContextNodeList(DTMIterator nl)
Set the current context node list.
Parameters:
nl - the current node list, also refered to here as a context node list.

pushCurrentExpressionNode

public final void pushCurrentExpressionNode(int n)
Set the current node that is the expression's context (i.e. for current() support).
Parameters:
n - The sub-expression node to be current.

pushCurrentNode

public final void pushCurrentNode(int n)
Set the current context node.

pushCurrentNodeAndExpression

public final void pushCurrentNodeAndExpression(int cn,
                                               int en)
Set the current context node and expression node.
Parameters:
cn - the current node.
en - the sub-expression context node.

pushExpressionState

public final void pushExpressionState(int cn,
                                      int en,
                                      PrefixResolver nc)
Push the current context node, expression node, and prefix resolver.
Parameters:
cn - the current node.
en - the sub-expression context node.
nc - the namespace context (prefix resolver.

pushIteratorRoot

public final void pushIteratorRoot(int n)
Set the current location path iterator root.

pushNamespaceContext

public final void pushNamespaceContext(PrefixResolver pr)
Push a current namespace context for the xpath.
Parameters:
pr - the prefix resolver to be used for resolving prefixes to namespace URLs.

pushNamespaceContextNull

public final void pushNamespaceContextNull()
Just increment the namespace contest stack, so that setNamespaceContext can be used on the slot.

pushPredicatePos

public final void pushPredicatePos(int n)

pushPredicateRoot

public final void pushPredicateRoot(int n)
Set the current predicate root.

pushRTFContext

public void pushRTFContext()
Push the RTFDTM's context mark, to allows discarding RTFs added after this point. (If it doesn't exist we don't push, since we might still be able to get away with not creating it. That requires that excessive pops be harmless.)

pushSAXLocator

public void pushSAXLocator(SourceLocator location)
Set the current locater in the stylesheet.
Parameters:
location - The location within the stylesheet.

pushSAXLocatorNull

public void pushSAXLocatorNull()
Push a slot on the locations stack so that setSAXLocator can be repeatedly called.

pushSubContextList

public final void pushSubContextList(SubContextList iter)
Push a TreeWalker on the stack.
Parameters:
iter - A sub-context AxesWalker.

release

public boolean release(DTM dtm,
                       boolean shouldHardDelete)
Release a DTM either to a lru pool, or completely remove reference. DTMs without system IDs are always hard deleted. State: experimental.
Overrides:
release in interface DTMManager
Parameters:
dtm - The DTM to be released.
shouldHardDelete - True if the DTM should be removed no matter what.
Returns:
true if the DTM was removed, false if it was put back in a lru pool.

reset

public void reset()
Reset for new run.

setAxesIteratorStackStacks

public void setAxesIteratorStackStacks(Stack s)

setContextNodeListsStack

public void setContextNodeListsStack(Stack s)

setCurrentExpressionNodeStack

public void setCurrentExpressionNodeStack(IntStack nv)

setCurrentNodeStack

public void setCurrentNodeStack(IntStack nv)

setErrorListener

public void setErrorListener(ErrorListener listener)
            throws IllegalArgumentException
Set the ErrorListener where errors and warnings are to be reported.
Parameters:
listener - A non-null ErrorListener reference.

setNamespaceContext

public final void setNamespaceContext(PrefixResolver pr)
Get the current namespace context for the xpath.
Parameters:
pr - the prefix resolver to be used for resolving prefixes to namespace URLs.

setPrimaryReader

public void setPrimaryReader(XMLReader reader)
Set primary XMLReader associated with this execution context.
Parameters:
reader - The reader of the primary source tree.

setSAXLocator

public void setSAXLocator(SourceLocator location)
Set the current locater in the stylesheet.
Parameters:
location - The location within the stylesheet.

setSecureProcessing

public void setSecureProcessing(boolean flag)
Set the state of the secure processing feature

setSourceTreeManager

public void setSourceTreeManager(SourceTreeManager mgr)
Set the SourceTreeManager associated with this execution context.
Parameters:
mgr - the SourceTreeManager to be associated with this execution context.

setURIResolver

public void setURIResolver(URIResolver resolver)
Set the URIResolver associated with this execution context.
Parameters:
resolver - the URIResolver to be associated with this execution context, may be null to clear an already set resolver.

setVarStack

public final void setVarStack(VariableStack varStack)
Get the variable stack, which is in charge of variables and parameters.
Parameters:
varStack - non-null reference to the variable stack.

Copyright B) 2006 Apache XML Project. All Rights Reserved.