Methods Summary |
---|
private void | assertion(boolean b, java.lang.String msg)Tell the user of an assertion error, and probably throw an
exception.
if (!b)
{
ErrorListener errorHandler = getErrorListener();
if (errorHandler != null)
{
errorHandler.fatalError(
new TransformerException(
XSLMessages.createMessage(
XPATHErrorResources.ER_INCORRECT_PROGRAMMER_ASSERTION,
new Object[]{ msg }), (SAXSourceLocator)this.getSAXLocator()));
}
}
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | createDTMIterator(java.lang.Object xpathCompiler, int pos)Create a new DTMIterator based on an XPath
UnionExpr.
return m_dtmManager.createDTMIterator(xpathCompiler, pos);
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | createDTMIterator(java.lang.String xpathString, com.sun.org.apache.xml.internal.utils.PrefixResolver presolver)Create a new DTMIterator based on an XPath
UnionExpr.
return m_dtmManager.createDTMIterator(xpathString, presolver);
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | createDTMIterator(int whatToShow, com.sun.org.apache.xml.internal.dtm.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.
return m_dtmManager.createDTMIterator(whatToShow, filter, entityReferenceExpansion);
|
public com.sun.org.apache.xml.internal.dtm.DTMIterator | createDTMIterator(int node)Create a new DTMIterator that holds exactly one node.
// DescendantIterator iter = new DescendantIterator();
DTMIterator iter = new com.sun.org.apache.xpath.internal.axes.OneStepIteratorForward(Axis.SELF);
iter.setRoot(node, this);
return iter;
// return m_dtmManager.createDTMIterator(node);
|
public com.sun.org.apache.xml.internal.dtm.DTM | createDocumentFragment()Creates an empty DocumentFragment object.
return m_dtmManager.createDocumentFragment();
|
public java.util.Stack | getAxesIteratorStackStacks()
return m_axesIteratorStack;
|
public final int | getContextNode()Get the current context node.
return this.getCurrentNode();
|
public final com.sun.org.apache.xml.internal.dtm.DTMIterator | getContextNodeList()Get the current context node list.
if (m_contextNodeLists.size() > 0)
return (DTMIterator) m_contextNodeLists.peek();
else
return null;
|
public java.util.Stack | getContextNodeListsStack()
return m_contextNodeLists;
|
public final com.sun.org.apache.xml.internal.dtm.DTMIterator | getContextNodes()Get the current context node list.
try
{
DTMIterator cnl = getContextNodeList();
if (null != cnl)
return cnl.cloneWithReset();
else
return null; // for now... this might ought to be an empty iterator.
}
catch (CloneNotSupportedException cnse)
{
return null; // error reporting?
}
|
public final int | getCurrentExpressionNode()Get the current node that is the expression's context (i.e. for current() support).
return m_currentExpressionNodes.peek();
|
public com.sun.org.apache.xml.internal.utils.IntStack | getCurrentExpressionNodeStack()
return m_currentExpressionNodes;
|
public final int | getCurrentNode()Get the current context node.
return m_currentNodes.peek();
|
public com.sun.org.apache.xpath.internal.axes.SubContextList | getCurrentNodeList()Get the current node list
as defined by the XSLT spec.
return m_axesIteratorStack.isEmpty()
? null : (SubContextList) m_axesIteratorStack.elementAt(0);
|
public com.sun.org.apache.xml.internal.utils.IntStack | getCurrentNodeStack()
// private NodeVector m_currentNodes = new NodeVector();
return m_currentNodes;
|
public com.sun.org.apache.xml.internal.dtm.DTM | getDTM(javax.xml.transform.Source source, boolean unique, com.sun.org.apache.xml.internal.dtm.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).
return m_dtmManager.getDTM(source, unique, wsfilter,
incremental, doIndexing);
|
public com.sun.org.apache.xml.internal.dtm.DTM | getDTM(int nodeHandle)Get an instance of a DTM that "owns" a node handle.
return m_dtmManager.getDTM(nodeHandle);
|
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.
return m_dtmManager.getDTMHandleFromNode(node);
|
public int | getDTMIdentity(com.sun.org.apache.xml.internal.dtm.DTM dtm)%TBD% Doc
return m_dtmManager.getDTMIdentity(dtm);
|
public com.sun.org.apache.xml.internal.dtm.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.
return m_dtmManager;
|
public com.sun.org.apache.xpath.internal.objects.DTMXRTreeFrag | getDTMXRTreeFrag(int dtmIdentity)Gets DTMXRTreeFrag object if one has already been created.
Creates new DTMXRTreeFrag object and adds to m_DTMXRTreeFrags HashMap,
otherwise.
if(m_DTMXRTreeFrags == null){
m_DTMXRTreeFrags = new HashMap();
}
if(m_DTMXRTreeFrags.containsKey(new Integer(dtmIdentity))){
return (DTMXRTreeFrag)m_DTMXRTreeFrags.get(new Integer(dtmIdentity));
}else{
final DTMXRTreeFrag frag = new DTMXRTreeFrag(dtmIdentity,this);
m_DTMXRTreeFrags.put(new Integer(dtmIdentity),frag);
return frag ;
}
|
public final javax.xml.transform.ErrorListener | getErrorListener()Get the ErrorListener where errors and warnings are to be reported.
if (null != m_errorListener)
return m_errorListener;
ErrorListener retval = null;
try {
if (null != m_ownerGetErrorListener)
retval = (ErrorListener) m_ownerGetErrorListener.invoke(m_owner, new Object[] {});
}
catch (Exception e) {}
if (null == retval)
{
if (null == m_defaultErrorListener)
m_defaultErrorListener = new com.sun.org.apache.xml.internal.utils.DefaultErrorHandler();
retval = m_defaultErrorListener;
}
return retval;
|
public com.sun.org.apache.xalan.internal.extensions.ExpressionContext | getExpressionContext()The the expression context for extensions for this context.
return expressionContext;
|
public com.sun.org.apache.xml.internal.dtm.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.
// We probably should _NOT_ be applying whitespace filtering at this stage!
//
// Some magic has been applied in DTMManagerDefault to recognize this set of options
// and generate an instance of DTM which can contain multiple documents
// (SAX2RTFDTM). Perhaps not the optimal way of achieving that result, but
// I didn't want to change the manager API at this time, or expose
// too many dependencies on its internals. (Ideally, I'd like to move
// isTreeIncomplete all the way up to DTM, so we wouldn't need to explicitly
// specify the subclass here.)
// If it doesn't exist, or if the one already existing is in the middle of
// being constructed, we need to obtain a new DTM to write into. I'm not sure
// the latter will ever arise, but I'd rather be just a bit paranoid..
if( m_global_rtfdtm==null || m_global_rtfdtm.isTreeIncomplete() )
{
m_global_rtfdtm=(SAX2RTFDTM)m_dtmManager.getDTM(null,true,null,false,false);
}
return m_global_rtfdtm;
|
public final int | getIteratorRoot()Get the current location path iterator root.
return m_iteratorRoots.peepOrNull();
|
public final com.sun.org.apache.xml.internal.utils.PrefixResolver | getNamespaceContext()Get the current namespace context for the xpath.
return (PrefixResolver) m_prefixResolvers.peek();
|
public java.lang.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.
return m_owner;
|
public final int | getPredicatePos()
return m_predicatePos.peek();
|
public final int | getPredicateRoot()Get the current predicate root.
return m_predicateRoots.peepOrNull();
|
public final org.xml.sax.XMLReader | getPrimaryReader()Get primary XMLReader associated with this execution context.
return m_primaryReader;
|
public com.sun.org.apache.xml.internal.dtm.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.
SAX2RTFDTM rtfdtm;
// We probably should _NOT_ be applying whitespace filtering at this stage!
//
// Some magic has been applied in DTMManagerDefault to recognize this set of options
// and generate an instance of DTM which can contain multiple documents
// (SAX2RTFDTM). Perhaps not the optimal way of achieving that result, but
// I didn't want to change the manager API at this time, or expose
// too many dependencies on its internals. (Ideally, I'd like to move
// isTreeIncomplete all the way up to DTM, so we wouldn't need to explicitly
// specify the subclass here.)
if(m_rtfdtm_stack==null)
{
m_rtfdtm_stack=new Vector();
rtfdtm=(SAX2RTFDTM)m_dtmManager.getDTM(null,true,null,false,false);
m_rtfdtm_stack.addElement(rtfdtm);
++m_which_rtfdtm;
}
else if(m_which_rtfdtm<0)
{
rtfdtm=(SAX2RTFDTM)m_rtfdtm_stack.elementAt(++m_which_rtfdtm);
}
else
{
rtfdtm=(SAX2RTFDTM)m_rtfdtm_stack.elementAt(m_which_rtfdtm);
// It might already be under construction -- the classic example would be
// an xsl:variable which uses xsl:call-template as part of its value. To
// handle this recursion, we have to start a new RTF DTM, pushing the old
// one onto a stack so we can return to it. This is not as uncommon a case
// as we might wish, unfortunately, as some folks insist on coding XSLT
// as if it were a procedural language...
if(rtfdtm.isTreeIncomplete())
{
if(++m_which_rtfdtm < m_rtfdtm_stack.size())
rtfdtm=(SAX2RTFDTM)m_rtfdtm_stack.elementAt(m_which_rtfdtm);
else
{
rtfdtm=(SAX2RTFDTM)m_dtmManager.getDTM(null,true,null,false,false);
m_rtfdtm_stack.addElement(rtfdtm);
}
}
}
return rtfdtm;
|
public javax.xml.transform.SourceLocator | getSAXLocator()Get the current locater in the stylesheet.
return (SourceLocator) m_saxLocations.peek();
|
public final SourceTreeManager | getSourceTreeManager()Get the SourceTreeManager associated with this execution context.
return m_sourceTreeManager;
|
public com.sun.org.apache.xpath.internal.axes.SubContextList | getSubContextList()Get the current axes iterator, or return null if none.
return m_axesIteratorStack.isEmpty()
? null : (SubContextList) m_axesIteratorStack.peek();
|
public final javax.xml.transform.URIResolver | getURIResolver()Get the URIResolver associated with this execution context.
return m_uriResolver;
|
public final com.sun.org.apache.xpath.internal.VariableStack | getVarStack()Get the variable stack, which is in charge of variables and
parameters.
return m_variableStacks;
|
public boolean | isSecureProcessing()Return the state of the secure processing feature
return m_isSecureProcessing;
|
public final void | popContextNodeList()Pop the current context node list.
if(m_contextNodeLists.isEmpty())
System.err.println("Warning: popContextNodeList when stack is empty!");
else
m_contextNodeLists.pop();
|
public final void | popCurrentExpressionNode()Pop the current node that is the expression's context
(i.e. for current() support).
m_currentExpressionNodes.quickPop(1);
|
public final void | popCurrentNode()Pop the current context node.
m_currentNodes.quickPop(1);
|
public final void | popCurrentNodeAndExpression()Set the current context node.
m_currentNodes.quickPop(1);
m_currentExpressionNodes.quickPop(1);
|
public final void | popExpressionState()Pop the current context node, expression node, and prefix resolver.
m_currentNodes.quickPop(1);
m_currentExpressionNodes.quickPop(1);
m_prefixResolvers.pop();
|
public final void | popIteratorRoot()Pop the current location path iterator root.
m_iteratorRoots.popQuick();
|
public final void | popNamespaceContext()Pop the current namespace context for the xpath.
m_prefixResolvers.pop();
|
public final void | popPredicatePos()
m_predicatePos.pop();
|
public final void | popPredicateRoot()Pop the current predicate root.
m_predicateRoots.popQuick();
|
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.
int previous=m_last_pushed_rtfdtm.pop();
if(null==m_rtfdtm_stack)
return;
if(m_which_rtfdtm==previous)
{
if(previous>=0) // guard against none-active
{
boolean isEmpty=((SAX2RTFDTM)(m_rtfdtm_stack.elementAt(previous))).popRewindMark();
}
}
else while(m_which_rtfdtm!=previous)
{
// Empty each DTM before popping, so it's ready for reuse
// _DON'T_ pop the previous, since it's still open (which is why we
// stacked up more of these) and did not receive a mark.
boolean isEmpty=((SAX2RTFDTM)(m_rtfdtm_stack.elementAt(m_which_rtfdtm))).popRewindMark();
--m_which_rtfdtm;
}
|
public void | popSAXLocator()Pop the current locater.
m_saxLocations.pop();
|
public final void | popSubContextList()Pop the last pushed axes iterator.
m_axesIteratorStack.pop();
|
public final void | pushContextNodeList(com.sun.org.apache.xml.internal.dtm.DTMIterator nl)Set the current context node list.
m_contextNodeLists.push(nl);
|
public final void | pushCurrentExpressionNode(int n)Set the current node that is the expression's context (i.e. for current() support).
m_currentExpressionNodes.push(n);
|
public final void | pushCurrentNode(int n)Set the current context node.
m_currentNodes.push(n);
|
public final void | pushCurrentNodeAndExpression(int cn, int en)Set the current context node and expression node.
m_currentNodes.push(cn);
m_currentExpressionNodes.push(cn);
|
public final void | pushExpressionState(int cn, int en, com.sun.org.apache.xml.internal.utils.PrefixResolver nc)Push the current context node, expression node, and prefix resolver.
m_currentNodes.push(cn);
m_currentExpressionNodes.push(cn);
m_prefixResolvers.push(nc);
|
public final void | pushIteratorRoot(int n)Set the current location path iterator root.
m_iteratorRoots.push(n);
|
public final void | pushNamespaceContext(com.sun.org.apache.xml.internal.utils.PrefixResolver pr)Push a current namespace context for the xpath.
m_prefixResolvers.push(pr);
|
public final void | pushNamespaceContextNull()Just increment the namespace contest stack, so that setNamespaceContext
can be used on the slot.
m_prefixResolvers.push(null);
|
public final void | pushPredicatePos(int n)
m_predicatePos.push(n);
|
public final void | pushPredicateRoot(int n)Set the current predicate root.
m_predicateRoots.push(n);
|
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.)
m_last_pushed_rtfdtm.push(m_which_rtfdtm);
if(null!=m_rtfdtm_stack)
((SAX2RTFDTM)(getRTFDTM())).pushRewindMark();
|
public void | pushSAXLocator(javax.xml.transform.SourceLocator location)Set the current locater in the stylesheet.
m_saxLocations.push(location);
|
public void | pushSAXLocatorNull()Push a slot on the locations stack so that setSAXLocator can be
repeatedly called.
m_saxLocations.push(null);
|
public final void | pushSubContextList(com.sun.org.apache.xpath.internal.axes.SubContextList iter)Push a TreeWalker on the stack.
m_axesIteratorStack.push(iter);
|
public boolean | release(com.sun.org.apache.xml.internal.dtm.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.
// %REVIEW% If it's a DTM which may contain multiple Result Tree
// Fragments, we can't discard it unless we know not only that it
// is empty, but that the XPathContext itself is going away. So do
// _not_ accept the request. (May want to do it as part of
// reset(), though.)
if(m_rtfdtm_stack!=null && m_rtfdtm_stack.contains(dtm))
{
return false;
}
return m_dtmManager.release(dtm, shouldHardDelete);
|
private final void | releaseDTMXRTreeFrags()Cleans DTMXRTreeFrag objects by removing references
to DTM and XPathContext objects.
if(m_DTMXRTreeFrags == null){
return;
}
final Iterator iter = (m_DTMXRTreeFrags.values()).iterator();
while(iter.hasNext()){
DTMXRTreeFrag frag = (DTMXRTreeFrag)iter.next();
frag.destruct();
iter.remove();
}
m_DTMXRTreeFrags = null;
|
public void | reset()Reset for new run.
releaseDTMXRTreeFrags();
// These couldn't be disposed of earlier (see comments in release()); zap them now.
if(m_rtfdtm_stack!=null)
for (java.util.Enumeration e = m_rtfdtm_stack.elements() ; e.hasMoreElements() ;)
m_dtmManager.release((DTM)e.nextElement(), true);
m_rtfdtm_stack=null; // drop our references too
m_which_rtfdtm=-1;
if(m_global_rtfdtm!=null)
m_dtmManager.release(m_global_rtfdtm,true);
m_global_rtfdtm=null;
m_dtmManager = DTMManager.newInstance(
com.sun.org.apache.xpath.internal.objects.XMLStringFactoryImpl.getFactory());
m_saxLocations.removeAllElements();
m_axesIteratorStack.removeAllElements();
m_contextNodeLists.removeAllElements();
m_currentExpressionNodes.removeAllElements();
m_currentNodes.removeAllElements();
m_iteratorRoots.RemoveAllNoClear();
m_predicatePos.removeAllElements();
m_predicateRoots.RemoveAllNoClear();
m_prefixResolvers.removeAllElements();
m_prefixResolvers.push(null);
m_currentNodes.push(DTM.NULL);
m_currentExpressionNodes.push(DTM.NULL);
m_saxLocations.push(null);
|
public void | setAxesIteratorStackStacks(java.util.Stack s) m_axesIteratorStack = s;
|
public void | setContextNodeListsStack(java.util.Stack s) m_contextNodeLists = s;
|
public void | setCurrentExpressionNodeStack(com.sun.org.apache.xml.internal.utils.IntStack nv) m_currentExpressionNodes = nv;
|
public void | setCurrentNodeStack(com.sun.org.apache.xml.internal.utils.IntStack nv) m_currentNodes = nv;
|
public void | setErrorListener(javax.xml.transform.ErrorListener listener)Set the ErrorListener where errors and warnings are to be reported.
if (listener == null)
throw new IllegalArgumentException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_NULL_ERROR_HANDLER, null)); //"Null error handler");
m_errorListener = listener;
|
public final void | setNamespaceContext(com.sun.org.apache.xml.internal.utils.PrefixResolver pr)Get the current namespace context for the xpath.
m_prefixResolvers.setTop(pr);
|
public void | setPrimaryReader(org.xml.sax.XMLReader reader)Set primary XMLReader associated with this execution context.
m_primaryReader = reader;
|
public void | setSAXLocator(javax.xml.transform.SourceLocator location)Set the current locater in the stylesheet.
m_saxLocations.setTop(location);
|
public void | setSecureProcessing(boolean flag)Set the state of the secure processing feature
m_isSecureProcessing = flag;
|
public void | setSourceTreeManager(SourceTreeManager mgr)Set the SourceTreeManager associated with this execution context.
m_sourceTreeManager = mgr;
|
public void | setURIResolver(javax.xml.transform.URIResolver resolver)Set the URIResolver associated with this execution context.
m_uriResolver = resolver;
|
public final void | setVarStack(com.sun.org.apache.xpath.internal.VariableStack varStack)Get the variable stack, which is in charge of variables and
parameters.
m_variableStacks = varStack;
|