public class KeyManager extends Object implements Serializable
The memory management in this class is subtle, with extensive use of weak references. The idea is that an index should continue to exist in memory so long as both the compiled stylesheet and the source document exist in memory: if either is removed, the index should go too. The document itself holds no reference to the index. The compiled stylesheet (which owns the KeyManager) holds a weak reference to the index. The index, of course, holds strong references to the nodes in the document. The Controller holds a strong reference to the list of indexes used for each document, so that indexes remain in memory for the duration of a transformation even if the documents themselves are garbage collected.
Potentially there is a need for more than one index for a given key name, depending on the primitive type of the value provided to the key() function. An index is built corresponding to the type of the requested value; if subsequently the key() function is called with the same name and a different type of value, then a new index is built.
Constructor and Description |
---|
KeyManager(Configuration config)
create a KeyManager and initialise variables
|
Modifier and Type | Method and Description |
---|---|
void |
addKeyDefinition(int fingerprint,
KeyDefinition keydef,
NamePool namePool)
Register a key definition.
|
List |
getKeyDefinitions(int fingerprint)
Get all the key definitions that match a particular fingerprint
|
SequenceIterator |
selectByKey(int fingerprint,
DocumentInfo doc,
AtomicValue value,
XPathContext context)
Get the nodes with a given key value
|
public KeyManager(Configuration config)
public void addKeyDefinition(int fingerprint, KeyDefinition keydef, NamePool namePool) throws TransformerConfigurationException
fingerprint
- Integer representing the name of the keykeydef
- The details of the key's definitionnamePool
- TransformerConfigurationException
public List getKeyDefinitions(int fingerprint)
fingerprint
- The fingerprint of the name of the required keypublic SequenceIterator selectByKey(int fingerprint, DocumentInfo doc, AtomicValue value, XPathContext context) throws XPathException
fingerprint
- The fingerprint of the name of the required keydoc
- The source document in questionvalue
- The required key valuecontext
- The dynamic context, needed only the first time when the key is being builtXPathException