org.apache.xalan.transformer
Class KeyTable

java.lang.Object
  extended by org.apache.xalan.transformer.KeyTable

public class KeyTable
extends java.lang.Object

Table of element keys, keyed by document node. An instance of this class is keyed by a Document node that should be matched with the root of the current context.


Field Summary
private  int m_docKey
          The document key.
private  java.util.Vector m_keyDeclarations
          Vector of KeyDeclaration instances holding the key declarations.
private  XNodeSet m_keyNodes
          The main iterator that will walk through the source tree for this key.
private  java.util.Hashtable m_refsTable
          Hold a cache of key() function result for each ref.
 
Constructor Summary
KeyTable(int doc, PrefixResolver nscontext, QName name, java.util.Vector keyDeclarations, XPathContext xctxt)
          Build a keys table.
 
Method Summary
private  void addValueInRefsTable(XPathContext xctxt, XMLString ref, int node)
          Add an association between a ref and a node in the m_refsTable.
 int getDocKey()
          Get the document root matching this key.
private  java.util.Vector getKeyDeclarations()
           
(package private)  KeyIterator getKeyIterator()
           
 QName getKeyTableName()
          Get Key Name for this KeyTable
 XNodeSet getNodeSetDTMByKey(QName name, XMLString ref)
          Given a valid element key, return the corresponding node list.
private  java.util.Hashtable getRefsTable()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_docKey

private int m_docKey
The document key. This table should only be used with contexts whose Document roots match this key.


m_keyDeclarations

private java.util.Vector m_keyDeclarations
Vector of KeyDeclaration instances holding the key declarations.


m_refsTable

private java.util.Hashtable m_refsTable
Hold a cache of key() function result for each ref. Key is XMLString, the ref value Value is XNodeSet, the key() function result for the given ref value.


m_keyNodes

private XNodeSet m_keyNodes
The main iterator that will walk through the source tree for this key.

Constructor Detail

KeyTable

public KeyTable(int doc,
                PrefixResolver nscontext,
                QName name,
                java.util.Vector keyDeclarations,
                XPathContext xctxt)
         throws javax.xml.transform.TransformerException
Build a keys table.

Parameters:
doc - The owner document key.
nscontext - The stylesheet's namespace context.
name - The key name
keyDeclarations - The stylesheet's xsl:key declarations.
Throws:
javax.xml.transform.TransformerException
Method Detail

getDocKey

public int getDocKey()
Get the document root matching this key.

Returns:
the document root matching this key

getKeyIterator

KeyIterator getKeyIterator()

getNodeSetDTMByKey

public XNodeSet getNodeSetDTMByKey(QName name,
                                   XMLString ref)
Given a valid element key, return the corresponding node list.

Parameters:
name - The name of the key, which must match the 'name' attribute on xsl:key.
ref - The value that must match the value found by the 'match' attribute on xsl:key.
Returns:
a set of nodes referenced by the key named name and the reference ref. If no node is referenced by this key, an empty node set is returned.

getKeyTableName

public QName getKeyTableName()
Get Key Name for this KeyTable

Returns:
Key name

getKeyDeclarations

private java.util.Vector getKeyDeclarations()
Returns:
key declarations for the key associated to this KeyTable

getRefsTable

private java.util.Hashtable getRefsTable()
Returns:
lazy initialized refs table associating evaluation of key function with a XNodeSet

addValueInRefsTable

private void addValueInRefsTable(XPathContext xctxt,
                                 XMLString ref,
                                 int node)
Add an association between a ref and a node in the m_refsTable. Requires that m_refsTable != null

Parameters:
xctxt - XPath context
ref - the value of the use clause of the current key for the given node
node - the node to reference