| java.lang.Object org.apache.xml.utils.NodeVector org.apache.xpath.NodeSetDTM
All known Subclasses: org.apache.xpath.axes.RTFIterator,
NodeSetDTM | public class NodeSetDTM extends NodeVector implements DTMIterator,Cloneable(Code) | | The NodeSetDTM class can act as either a NodeVector,
NodeList, or NodeIterator. However, in order for it to
act as a NodeVector or NodeList, it's required that
setShouldCacheNodes(true) be called before the first
nextNode() is called, in order that nodes can be added
as they are fetched. Derived classes that implement iterators
must override runTo(int index), in order that they may
run the iteration to the given index.
Note that we directly implement the DOM's NodeIterator
interface. We do not emulate all the behavior of the
standard NodeIterator. In particular, we do not guarantee
to present a "live view" of the document ... but in XSLT,
the source document should never be mutated, so this should
never be an issue.
Thought: Should NodeSetDTM really implement NodeList and NodeIterator,
or should there be specific subclasses of it which do so? The
advantage of doing it all here is that all NodeSetDTMs will respond
to the same calls; the disadvantage is that some of them may return
less-than-enlightening results when you do so.
|
Field Summary | |
protected transient boolean | m_cacheNodes True if this list is cached. | DTMManager | m_manager | protected transient boolean | m_mutable True if this list can be mutated. | protected transient int | m_next If this node is being used as an iterator, the next index that nextNode()
will return. | protected int | m_root The root of the iteration, if available. | final static long | serialVersionUID |
Constructor Summary | |
public | NodeSetDTM(DTMManager dtmManager) Create an empty nodelist. | public | NodeSetDTM(int blocksize, int dummy, DTMManager dtmManager) Create an empty, using the given block size. | public | NodeSetDTM(NodeSetDTM nodelist) Create a NodeSetDTM, and copy the members of the
given NodeSetDTM into it. | public | NodeSetDTM(DTMIterator ni) Create a NodeSetDTM, and copy the members of the
given DTMIterator into it. | public | NodeSetDTM(NodeIterator iterator, XPathContext xctxt) Create a NodeSetDTM, and copy the members of the
given DTMIterator into it. | public | NodeSetDTM(NodeList nodeList, XPathContext xctxt) Create a NodeSetDTM, and copy the members of the
given DTMIterator into it. | public | NodeSetDTM(int node, DTMManager dtmManager) Create a NodeSetDTM which contains the given Node. |
Method Summary | |
public void | addElement(int value) Append a Node onto the vector. | public void | addNode(int n) Add a node to the NodeSetDTM. | public int | addNodeInDocOrder(int node, boolean test, XPathContext support) Add the node into a vector of nodes where it should occur in
document order.
Parameters: node - The node to be added. Parameters: test - true if we should test for doc order Parameters: support - The XPath runtime context. | public int | addNodeInDocOrder(int node, XPathContext support) Add the node into a vector of nodes where it should occur in
document order.
Parameters: node - The node to be added. Parameters: support - The XPath runtime context. | public void | addNodes(DTMIterator iterator) Copy NodeList members into this nodelist, adding in
document order. | public void | addNodesInDocOrder(DTMIterator iterator, XPathContext support) Copy NodeList members into this nodelist, adding in
document order. | public void | allowDetachToRelease(boolean allowRelease) Specify if it's OK for detach to release the iterator for reuse. | public void | appendNodes(NodeVector nodes) Append the nodes to the list. | public Object | clone() Clone this NodeSetDTM. | public DTMIterator | cloneWithReset() Get a cloned Iterator, and reset its state to the beginning of the
iteration. | public boolean | contains(int s) Tell if the table contains the given node. | public void | detach() Detaches the iterator from the set which it iterated over, releasing
any computational resources and placing the iterator in the INVALID
state. | public int | elementAt(int i) Get the nth element.
Parameters: i - The index of the requested node. | public int | getAxis() Returns the axis being iterated, if it is known. | public int | getCurrentNode() Return the last fetched node. | public int | getCurrentPos() Get the current position, which is one less than
the next nextNode() call will retrieve. | public DTM | getDTM(int nodeHandle) Get an instance of a DTM that "owns" a node handle. | public DTMManager | getDTMManager() Get an instance of the DTMManager. | public boolean | getExpandEntityReferences() The value of this flag determines whether the children of entity
reference nodes are visible to the iterator. | public DTMFilter | getFilter() The filter object used to screen nodes. | public int | getLast() | public int | getLength() The number of nodes in the list. | public int | getRoot() | public boolean | getShouldCacheNodes() Get whether or not this is a cached node set. | public int | getWhatToShow() This attribute determines which node types are presented via the
iterator. | public int | indexOf(int elem, int index) Searches for the first occurence of the given argument,
beginning the search at index, and testing for equality
using the equals method. | public int | indexOf(int elem) Searches for the first occurence of the given argument,
beginning the search at index, and testing for equality
using the equals method. | public void | insertElementAt(int value, int at) Inserts the specified node in this vector at the specified index. | public void | insertNode(int n, int pos) Insert a node at a given position. | public boolean | isDocOrdered() Returns true if all the nodes in the iteration well be returned in document
order. | public boolean | isFresh() Tells if this NodeSetDTM is "fresh", in other words, if
the first nextNode() that is called will return the
first node in the set. | public boolean | isMutable() Tells if this iterator can have nodes added to it or set via
the setItem(int node, int index) method. | public int | item(int index) Returns the index th item in the collection. | public int | nextNode() Returns the next node in the set and advances the position of the
iterator in the set. | public int | previousNode() Returns the previous node in the set and moves the position of the
iterator backwards in the set. | public void | removeAllElements() Inserts the specified node in this vector at the specified index. | public boolean | removeElement(int s) Removes the first occurrence of the argument from this vector.
If the object is found in this vector, each component in the vector
with an index greater or equal to the object's index is shifted
downward to have an index one smaller than the value it had
previously.
Parameters: s - The node to be removed. | public void | removeElementAt(int i) Deletes the component at the specified index. | public void | removeNode(int n) Remove a node. | public void | reset() Reset the iterator. | public void | runTo(int index) If an index is requested, NodeSetDTM will call this method
to run the iterator to the index. | public void | setCurrentPos(int i) Set the current position in the node set. | public void | setElementAt(int node, int index) Sets the component at the specified index of this vector to be the
specified object. | public void | setEnvironment(Object environment) Set the environment in which this iterator operates, which should provide:
a node (the context node... | public void | setItem(int node, int index) Same as setElementAt. | public void | setLast(int last) | public void | setRoot(int context, Object environment) Initialize the context values for this expression
after it is cloned. | public void | setShouldCacheNodes(boolean b) If setShouldCacheNodes(true) is called, then nodes will
be cached. | public int | size() Get the length of the list. |
m_cacheNodes | protected transient boolean m_cacheNodes(Code) | | True if this list is cached.
|
m_mutable | protected transient boolean m_mutable(Code) | | True if this list can be mutated.
|
m_next | protected transient int m_next(Code) | | If this node is being used as an iterator, the next index that nextNode()
will return.
|
m_root | protected int m_root(Code) | | The root of the iteration, if available.
|
serialVersionUID | final static long serialVersionUID(Code) | | |
NodeSetDTM | public NodeSetDTM(DTMManager dtmManager)(Code) | | Create an empty nodelist.
|
NodeSetDTM | public NodeSetDTM(int blocksize, int dummy, DTMManager dtmManager)(Code) | | Create an empty, using the given block size.
Parameters: blocksize - Size of blocks to allocate Parameters: dummy - pass zero for right now... |
NodeSetDTM | public NodeSetDTM(NodeSetDTM nodelist)(Code) | | Create a NodeSetDTM, and copy the members of the
given NodeSetDTM into it.
Parameters: nodelist - Set of Nodes to be made members of the new set. |
NodeSetDTM | public NodeSetDTM(DTMIterator ni)(Code) | | Create a NodeSetDTM, and copy the members of the
given DTMIterator into it.
Parameters: ni - Iterator which yields Nodes to be made members of the new set. |
NodeSetDTM | public NodeSetDTM(NodeIterator iterator, XPathContext xctxt)(Code) | | Create a NodeSetDTM, and copy the members of the
given DTMIterator into it.
Parameters: iterator - Iterator which yields Nodes to be made members of the new set. |
NodeSetDTM | public NodeSetDTM(NodeList nodeList, XPathContext xctxt)(Code) | | Create a NodeSetDTM, and copy the members of the
given DTMIterator into it.
|
NodeSetDTM | public NodeSetDTM(int node, DTMManager dtmManager)(Code) | | Create a NodeSetDTM which contains the given Node.
Parameters: node - Single node to be added to the new set. |
addElement | public void addElement(int value)(Code) | | Append a Node onto the vector.
Parameters: value - The node to be added. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
addNode | public void addNode(int n)(Code) | | Add a node to the NodeSetDTM. Not all types of NodeSetDTMs support this
operation
Parameters: n - Node to be added throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
addNodeInDocOrder | public int addNodeInDocOrder(int node, boolean test, XPathContext support)(Code) | | Add the node into a vector of nodes where it should occur in
document order.
Parameters: node - The node to be added. Parameters: test - true if we should test for doc order Parameters: support - The XPath runtime context. insertIndex. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
addNodeInDocOrder | public int addNodeInDocOrder(int node, XPathContext support)(Code) | | Add the node into a vector of nodes where it should occur in
document order.
Parameters: node - The node to be added. Parameters: support - The XPath runtime context. The index where it was inserted. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
addNodes | public void addNodes(DTMIterator iterator)(Code) | | Copy NodeList members into this nodelist, adding in
document order. Null references are not added.
Parameters: iterator - DTMIterator which yields the nodes to be added. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
addNodesInDocOrder | public void addNodesInDocOrder(DTMIterator iterator, XPathContext support)(Code) | | Copy NodeList members into this nodelist, adding in
document order. If a node is null, don't add it.
Parameters: iterator - DTMIterator which yields the nodes to be added. Parameters: support - The XPath runtime context. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
allowDetachToRelease | public void allowDetachToRelease(boolean allowRelease)(Code) | | Specify if it's OK for detach to release the iterator for reuse.
Parameters: allowRelease - true if it is OK for detach to release this iterator for pooling. |
appendNodes | public void appendNodes(NodeVector nodes)(Code) | | Append the nodes to the list.
Parameters: nodes - The nodes to be appended to this node set. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
clone | public Object clone() throws CloneNotSupportedException(Code) | | Clone this NodeSetDTM.
At this time, we only expect this to be used with LocPathIterators;
it may not work with other kinds of NodeSetDTMs.
a new NodeSetDTM of the same type, having the same state...though unless overridden in the subclasses, it may not copy allthe state information. throws: CloneNotSupportedException - if this subclass of NodeSetDTMdoes not support the clone() operation. |
cloneWithReset | public DTMIterator cloneWithReset() throws CloneNotSupportedException(Code) | | Get a cloned Iterator, and reset its state to the beginning of the
iteration.
a new NodeSetDTM of the same type, having the same state...except that the reset() operation has been called. throws: CloneNotSupportedException - if this subclass of NodeSetDTMdoes not support the clone() operation. |
contains | public boolean contains(int s)(Code) | | Tell if the table contains the given node.
Parameters: s - Node to look for True if the given node was found. |
detach | public void detach()(Code) | | Detaches the iterator from the set which it iterated over, releasing
any computational resources and placing the iterator in the INVALID
state. Afterdetach has been invoked, calls to
nextNode orpreviousNode will raise the
exception INVALID_STATE_ERR.
This operation is a no-op in NodeSetDTM, and will not cause
INVALID_STATE_ERR to be raised by later operations.
|
elementAt | public int elementAt(int i)(Code) | | Get the nth element.
Parameters: i - The index of the requested node. Node at specified index. |
getAxis | public int getAxis()(Code) | | Returns the axis being iterated, if it is known.
Axis.CHILD, etc., or -1 if the axis is not known or is of multiple types. |
getCurrentNode | public int getCurrentNode()(Code) | | Return the last fetched node. Needed to support the UnionPathIterator.
the last fetched node. throws: RuntimeException - thrown if this NodeSetDTM is not of a cached type, and thus doesn't permit indexed access. |
getCurrentPos | public int getCurrentPos()(Code) | | Get the current position, which is one less than
the next nextNode() call will retrieve. i.e. if
you call getCurrentPos() and the return is 0, the next
fetch will take place at index 1.
The the current position index. |
getDTM | public DTM getDTM(int nodeHandle)(Code) | | Get an instance of a DTM that "owns" a node handle. Since a node
iterator may be passed without a DTMManager, this allows the
caller to easily get the DTM using just the iterator.
Parameters: nodeHandle - the nodeHandle. a non-null DTM reference. |
getDTMManager | public DTMManager getDTMManager()(Code) | | Get an instance of the DTMManager. Since a node
iterator may be passed without a DTMManager, this allows the
caller to easily get the DTMManager using just the iterator.
a non-null DTMManager reference. |
getExpandEntityReferences | public boolean getExpandEntityReferences()(Code) | | The value of this flag determines whether the children of entity
reference nodes are visible to the iterator. If false, they will be
skipped over.
To produce a view of the document that has entity references
expanded and does not expose the entity reference node itself, use the
whatToShow flags to hide the entity reference node and set
expandEntityReferences to true when creating the iterator. To produce
a view of the document that has entity reference nodes but no entity
expansion, use the whatToShow flags to show the entity reference node
and set expandEntityReferences to false.
true for all iterators based on NodeSetDTM, meaning that thecontents of EntityRefrence nodes may be returned (though whatToShowsays that the EntityReferences themselves are not shown.) |
getFilter | public DTMFilter getFilter()(Code) | | The filter object used to screen nodes. Filters are applied to
further reduce (and restructure) the DTMIterator's view of the
document. In our case, we will be using hardcoded filters built
into our iterators... but getFilter() is part of the DOM's
DTMIterator interface, so we have to support it.
null, which is slightly misleading. True, there is nouser-written filter object, but in fact we are doing some verysophisticated custom filtering. A DOM purist might suggestreturning a placeholder object just to indicate that this isnot going to return all nodes selected by whatToShow. |
getLast | public int getLast()(Code) | | |
getLength | public int getLength()(Code) | | The number of nodes in the list. The range of valid child node indices is
0 to length-1 inclusive. Note that this operation requires
finding all the matching nodes, which may defeat attempts to defer
that work.
integer indicating how many nodes are represented by this list. |
getRoot | public int getRoot()(Code) | | The root node of the Iterator, as specified when it was created.For non-Iterator NodeSetDTMs, this will be null. |
getShouldCacheNodes | public boolean getShouldCacheNodes()(Code) | | Get whether or not this is a cached node set.
True if this list is cached. |
getWhatToShow | public int getWhatToShow()(Code) | | This attribute determines which node types are presented via the
iterator. The available set of constants is defined in the
DTMFilter interface. For NodeSetDTMs, the mask has been
hardcoded to show all nodes except EntityReference nodes, which have
no equivalent in the XPath data model.
integer used as a bit-array, containing flags defined inthe DOM's DTMFilter class. The value will be SHOW_ALL & ~SHOW_ENTITY_REFERENCE , meaning thatonly entity references are suppressed. |
indexOf | public int indexOf(int elem, int index)(Code) | | Searches for the first occurence of the given argument,
beginning the search at index, and testing for equality
using the equals method.
Parameters: elem - Node to look for Parameters: index - Index of where to start the search the index of the first occurrence of the objectargument in this vector at position index or later in thevector; returns -1 if the object is not found. |
indexOf | public int indexOf(int elem)(Code) | | Searches for the first occurence of the given argument,
beginning the search at index, and testing for equality
using the equals method.
Parameters: elem - Node to look for the index of the first occurrence of the objectargument in this vector at position index or later in thevector; returns -1 if the object is not found. |
insertElementAt | public void insertElementAt(int value, int at)(Code) | | Inserts the specified node in this vector at the specified index.
Each component in this vector with an index greater or equal to
the specified index is shifted upward to have an index one greater
than the value it had previously.
Parameters: value - The node to be inserted. Parameters: at - The index where the insert should occur. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
insertNode | public void insertNode(int n, int pos)(Code) | | Insert a node at a given position.
Parameters: n - Node to be added Parameters: pos - Offset at which the node is to be inserted,with 0 being the first position. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
isDocOrdered | public boolean isDocOrdered()(Code) | | Returns true if all the nodes in the iteration well be returned in document
order.
true as a default. |
isFresh | public boolean isFresh()(Code) | | Tells if this NodeSetDTM is "fresh", in other words, if
the first nextNode() that is called will return the
first node in the set.
true if nextNode() would return the first node in the set,false if it would return a later one. |
isMutable | public boolean isMutable()(Code) | | Tells if this iterator can have nodes added to it or set via
the setItem(int node, int index) method.
True if the nodelist can be mutated. |
item | public int item(int index)(Code) | | Returns the index th item in the collection. If
index is greater than or equal to the number of nodes in
the list, this returns null .
TODO: What happens if index is out of range?
Parameters: index - Index into the collection. The node at the index th position in theNodeList , or null if that is not a validindex. |
nextNode | public int nextNode()(Code) | | Returns the next node in the set and advances the position of the
iterator in the set. After a DTMIterator is created, the first call
to nextNode() returns the first node in the set.
The next Node in the set being iterated over, orDTM.NULL if there are no more members in that set. throws: DOMException - INVALID_STATE_ERR: Raised if this method is called after thedetach method was invoked. |
previousNode | public int previousNode()(Code) | | Returns the previous node in the set and moves the position of the
iterator backwards in the set.
The previous Node in the set being iterated over,orDTM.NULL if there are no more members in that set. throws: DOMException - INVALID_STATE_ERR: Raised if this method is called after thedetach method was invoked. throws: RuntimeException - thrown if this NodeSetDTM is not of a cached type, and hence doesn't know what the previous node was. |
removeAllElements | public void removeAllElements()(Code) | | Inserts the specified node in this vector at the specified index.
Each component in this vector with an index greater or equal to
the specified index is shifted upward to have an index one greater
than the value it had previously.
throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
removeElement | public boolean removeElement(int s)(Code) | | Removes the first occurrence of the argument from this vector.
If the object is found in this vector, each component in the vector
with an index greater or equal to the object's index is shifted
downward to have an index one smaller than the value it had
previously.
Parameters: s - The node to be removed. True if the node was successfully removed throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
removeElementAt | public void removeElementAt(int i)(Code) | | Deletes the component at the specified index. Each component in
this vector with an index greater or equal to the specified
index is shifted downward to have an index one smaller than
the value it had previously.
Parameters: i - The index of the node to be removed. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
removeNode | public void removeNode(int n)(Code) | | Remove a node.
Parameters: n - Node to be added throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
reset | public void reset()(Code) | | Reset the iterator. May have no effect on non-iterator Nodesets.
|
runTo | public void runTo(int index)(Code) | | If an index is requested, NodeSetDTM will call this method
to run the iterator to the index. By default this sets
m_next to the index. If the index argument is -1, this
signals that the iterator should be run to the end.
Parameters: index - Position to advance (or retreat) to, with0 requesting the reset ("fresh") position and -1 (or indeedany out-of-bounds value) requesting the final position. throws: RuntimeException - thrown if this NodeSetDTM is notone of the types which supports indexing/counting. |
setCurrentPos | public void setCurrentPos(int i)(Code) | | Set the current position in the node set.
Parameters: i - Must be a valid index. throws: RuntimeException - thrown if this NodeSetDTM is not of a cached type, and thus doesn't permit indexed access. |
setElementAt | public void setElementAt(int node, int index)(Code) | | Sets the component at the specified index of this vector to be the
specified object. The previous component at that position is discarded.
The index must be a value greater than or equal to 0 and less
than the current size of the vector.
Parameters: node - The node to be set. Parameters: index - The index of the node to be replaced. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
setEnvironment | public void setEnvironment(Object environment)(Code) | | Set the environment in which this iterator operates, which should provide:
a node (the context node... same value as "root" defined below)
a pair of non-zero positive integers (the context position and the context size)
a set of variable bindings
a function library
the set of namespace declarations in scope for the expression.
At this time the exact implementation of this environment is application
dependent. Probably a proper interface will be created fairly soon.
Parameters: environment - The environment object. |
setItem | public void setItem(int node, int index)(Code) | | Same as setElementAt.
Parameters: node - The node to be set. Parameters: index - The index of the node to be replaced. throws: RuntimeException - thrown if this NodeSetDTM is not of a mutable type. |
setLast | public void setLast(int last)(Code) | | |
setRoot | public void setRoot(int context, Object environment)(Code) | | Initialize the context values for this expression
after it is cloned.
Parameters: context - The XPath runtime context for thistransformation. |
setShouldCacheNodes | public void setShouldCacheNodes(boolean b)(Code) | | If setShouldCacheNodes(true) is called, then nodes will
be cached. They are not cached by default. This switch must
be set before the first call to nextNode is made, to ensure
that all nodes are cached.
Parameters: b - true if this node set should be cached. throws: RuntimeException - thrown if an attempt is made torequest caching after we've already begun stepping through thenodes in this set. |
size | public int size()(Code) | | Get the length of the list.
The size of this node set. |
Fields inherited from org.apache.xml.utils.NodeVector | protected int m_firstFree(Code)(Java Doc)
|
|
|