org.exist.dom
Class VirtualNodeSet

java.lang.Object
  extended byorg.exist.xquery.value.AbstractSequence
      extended byorg.exist.dom.AbstractNodeSet
          extended byorg.exist.dom.VirtualNodeSet
All Implemented Interfaces:
org.w3c.dom.NodeList, NodeSet, Sequence

public class VirtualNodeSet
extends AbstractNodeSet

This node set is called virtual because it is just a placeholder for the set of relevant nodes. For XPath expressions like //* or //node(), it would be totally unefficient to actually retrieve all descendant nodes. In many cases, the expression can be resolved at a later point in time without retrieving the whole node set. VirtualNodeSet basically provides method getFirstParent to retrieve the first matching descendant of its context according to the primary type axis. Class LocationStep will always return an instance of VirtualNodeSet if it finds something like descendant::* etc..

Author:
Wolfgang Meier, Timo Boehme

Field Summary
 
Fields inherited from interface org.exist.dom.NodeSet
ANCESTOR, DESCENDANT, EMPTY_SET, FOLLOWING, PRECEDING
 
Fields inherited from interface org.exist.xquery.value.Sequence
EMPTY_SEQUENCE
 
Constructor Summary
VirtualNodeSet(int axis, NodeTest test, int contextId, NodeSet context)
           
 
Method Summary
 void add(DocumentImpl doc, long nodeId)
           
 void add(org.w3c.dom.Node node)
           
 void add(NodeProxy proxy)
          Add a new proxy object to the node set.
 void addAll(org.w3c.dom.NodeList other)
           
 void addAll(NodeSet other)
          Add all nodes from the given node set.
 void clearContext()
           
 boolean contains(NodeProxy p)
          Check if this node set contains a node matching the document and node-id of the given NodeProxy object.
 NodeProxy get(DocumentImpl doc, NodeId nodeId)
           
 NodeProxy get(int pos)
          Get the node at position pos within this node set.
 NodeProxy get(NodeProxy proxy)
          Get a node from this node set matching the document and node id of the given NodeProxy.
 DocumentSet getDocumentSet()
          Returns the set of documents from which the node items in this sequence have been selected.
 int getLength()
          Return the number of nodes contained in this node set.
 boolean hasIndex()
           
 boolean hasOne()
          Returns whether the sequence has just one item or not.
 NodeSet intersection(NodeSet other)
          Return a new node set, which represents the intersection of the current node set with the given node set.
 boolean isEmpty()
          Returns whether the sequence is empty or not.
 org.w3c.dom.Node item(int pos)
           
 Item itemAt(int pos)
          Returns the item located at the specified position within this sequence.
 SequenceIterator iterate()
          Returns an iterator over all items in the sequence.
 NodeSetIterator iterator()
          Return an iterator on the nodes in this list.
 NodeProxy parentWithChild(DocumentImpl doc, NodeId nodeId, boolean directParent, boolean includeSelf)
          Check if the node identified by its node id has an ancestor contained in this node set and return the ancestor found.
 NodeProxy parentWithChild(NodeProxy proxy, boolean directParent, boolean includeSelf, int level)
          Check if the given node has an ancestor contained in this node set and return the ancestor found.
 void realize()
           
 void remove(NodeProxy node)
           
 void set(int position, DocumentImpl doc, long nodeId)
           
 void setContextId(int contextId)
           
 void setInPredicate(boolean predicate)
           
 void setSelfIsContext()
           
 java.lang.String toString()
           
 NodeSet union(NodeSet other)
          Return a new node set which represents the union of the current node set and the given node set.
 SequenceIterator unorderedIterator()
          Returns an iterator over all items in the sequence.
 
Methods inherited from class org.exist.dom.AbstractNodeSet
add, add, addAll, clearContext, containsDoc, deepIntersection, directSelectAttribute, except, getAncestors, getContextNodes, getIndexType, getItemType, getParents, getProcessInReverseOrder, getSizeHint, getState, hasChanged, hasMixedContent, hasTextIndex, isCached, isPersistentSet, removeDuplicates, selectAncestorDescendant, selectAncestors, selectFollowing, selectFollowingSiblings, selectParentChild, selectParentChild, selectPreceding, selectPrecedingSiblings, setIsCached, setProcessInReverseOrder, toNodeSet
 
Methods inherited from class org.exist.xquery.value.AbstractSequence
conversionPreference, convertTo, effectiveBooleanValue, getCardinality, getStringValue, hasMany, setSelfAsContext, toJavaObject
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.exist.xquery.value.Sequence
conversionPreference, convertTo, effectiveBooleanValue, getCardinality, getStringValue, hasMany, setSelfAsContext, toJavaObject
 

Constructor Detail

VirtualNodeSet

public VirtualNodeSet(int axis,
                      NodeTest test,
                      int contextId,
                      NodeSet context)
Method Detail

contains

public boolean contains(NodeProxy p)
Description copied from class: AbstractNodeSet
Check if this node set contains a node matching the document and node-id of the given NodeProxy object.

Specified by:
contains in interface NodeSet
Specified by:
contains in class AbstractNodeSet
Parameters:
p -

setInPredicate

public void setInPredicate(boolean predicate)

getDocumentSet

public DocumentSet getDocumentSet()
Description copied from interface: Sequence
Returns the set of documents from which the node items in this sequence have been selected. This is for internal use only.

Specified by:
getDocumentSet in interface NodeSet
Overrides:
getDocumentSet in class AbstractNodeSet

parentWithChild

public NodeProxy parentWithChild(NodeProxy proxy,
                                 boolean directParent,
                                 boolean includeSelf,
                                 int level)
Description copied from class: AbstractNodeSet
Check if the given node has an ancestor contained in this node set and return the ancestor found. If directParent is true, only immediate ancestors (parents) are considered. Otherwise the method will call itself recursively for all the node's parents. If includeSelf is true, the method returns also true if the node itself is contained in the node set.

Specified by:
parentWithChild in interface NodeSet
Overrides:
parentWithChild in class AbstractNodeSet

parentWithChild

public NodeProxy parentWithChild(DocumentImpl doc,
                                 NodeId nodeId,
                                 boolean directParent,
                                 boolean includeSelf)
Description copied from interface: NodeSet
Check if the node identified by its node id has an ancestor contained in this node set and return the ancestor found. If directParent is true, only immediate ancestors (parents) are considered. Otherwise the method will call itself recursively for all the node's parents. If includeSelf is true, the method returns also true if the node itself is contained in the node set.

Specified by:
parentWithChild in interface NodeSet
Overrides:
parentWithChild in class AbstractNodeSet

realize

public final void realize()

setSelfIsContext

public void setSelfIsContext()

setContextId

public void setContextId(int contextId)

hasIndex

public boolean hasIndex()

isEmpty

public boolean isEmpty()
Description copied from interface: Sequence
Returns whether the sequence is empty or not.

Specified by:
isEmpty in interface Sequence
Specified by:
isEmpty in class AbstractSequence

hasOne

public boolean hasOne()
Description copied from interface: Sequence
Returns whether the sequence has just one item or not.

Specified by:
hasOne in interface Sequence
Specified by:
hasOne in class AbstractSequence

add

public void add(DocumentImpl doc,
                long nodeId)

add

public void add(org.w3c.dom.Node node)

add

public void add(NodeProxy proxy)
Description copied from class: AbstractNodeSet
Add a new proxy object to the node set. Please note: node set implementations may allow duplicates.

Specified by:
add in interface NodeSet
Specified by:
add in class AbstractNodeSet
Parameters:
proxy -

addAll

public void addAll(org.w3c.dom.NodeList other)

addAll

public void addAll(NodeSet other)
Description copied from class: AbstractNodeSet
Add all nodes from the given node set.

Specified by:
addAll in interface NodeSet
Specified by:
addAll in class AbstractNodeSet
Parameters:
other -

set

public void set(int position,
                DocumentImpl doc,
                long nodeId)

remove

public void remove(NodeProxy node)

getLength

public int getLength()
Description copied from class: AbstractNodeSet
Return the number of nodes contained in this node set.

Specified by:
getLength in interface Sequence
Specified by:
getLength in class AbstractNodeSet

item

public org.w3c.dom.Node item(int pos)
Specified by:
item in interface org.w3c.dom.NodeList
Specified by:
item in class AbstractNodeSet

get

public NodeProxy get(int pos)
Description copied from class: AbstractNodeSet
Get the node at position pos within this node set.

Specified by:
get in interface NodeSet
Specified by:
get in class AbstractNodeSet
Parameters:
pos -

itemAt

public Item itemAt(int pos)
Description copied from interface: Sequence
Returns the item located at the specified position within this sequence. Items are counted beginning at 0.

Specified by:
itemAt in interface Sequence
Specified by:
itemAt in class AbstractSequence

get

public NodeProxy get(DocumentImpl doc,
                     NodeId nodeId)

get

public NodeProxy get(NodeProxy proxy)
Description copied from class: AbstractNodeSet
Get a node from this node set matching the document and node id of the given NodeProxy.

Specified by:
get in interface NodeSet
Specified by:
get in class AbstractNodeSet
Parameters:
proxy -

iterator

public NodeSetIterator iterator()
Description copied from class: AbstractNodeSet
Return an iterator on the nodes in this list. The iterator returns nodes according to the internal ordering of nodes (i.e. level first), not in document- order.

Specified by:
iterator in interface NodeSet
Specified by:
iterator in class AbstractNodeSet

iterate

public SequenceIterator iterate()
                         throws XPathException
Description copied from interface: Sequence
Returns an iterator over all items in the sequence. The items are returned in document order where applicable.

Specified by:
iterate in interface Sequence
Specified by:
iterate in class AbstractNodeSet
Throws:
XPathException

unorderedIterator

public SequenceIterator unorderedIterator()
Description copied from interface: Sequence
Returns an iterator over all items in the sequence. The returned items may - but need not - to be in document order.

Specified by:
unorderedIterator in interface Sequence
Specified by:
unorderedIterator in class AbstractNodeSet

intersection

public NodeSet intersection(NodeSet other)
Description copied from class: AbstractNodeSet
Return a new node set, which represents the intersection of the current node set with the given node set.

Specified by:
intersection in interface NodeSet
Overrides:
intersection in class AbstractNodeSet
Parameters:
other -

union

public NodeSet union(NodeSet other)
Description copied from class: AbstractNodeSet
Return a new node set which represents the union of the current node set and the given node set.

Specified by:
union in interface NodeSet
Overrides:
union in class AbstractNodeSet
Parameters:
other -

clearContext

public void clearContext()

toString

public java.lang.String toString()
Overrides:
toString in class AbstractNodeSet


Copyright (C) Wolfgang Meier. All rights reserved.