Class PrefetchTreeNode

java.lang.Object
org.apache.cayenne.query.PrefetchTreeNode
All Implemented Interfaces:
Serializable, XMLSerializable

public class PrefetchTreeNode
extends Object
implements Serializable, XMLSerializable
Defines a node in a prefetch tree.
Since:
1.2
See Also:
Serialized Form
  • Field Details

    • UNDEFINED_SEMANTICS

      public static final int UNDEFINED_SEMANTICS
      See Also:
      Constant Field Values
    • JOINT_PREFETCH_SEMANTICS

      public static final int JOINT_PREFETCH_SEMANTICS
      See Also:
      Constant Field Values
    • DISJOINT_PREFETCH_SEMANTICS

      public static final int DISJOINT_PREFETCH_SEMANTICS
      See Also:
      Constant Field Values
    • DISJOINT_BY_ID_PREFETCH_SEMANTICS

      public static final int DISJOINT_BY_ID_PREFETCH_SEMANTICS
      See Also:
      Constant Field Values
    • name

      protected String name
    • phantom

      protected boolean phantom
    • semantics

      protected int semantics
    • ejbqlPathEntityId

      protected String ejbqlPathEntityId
    • entityName

      protected String entityName
    • parent

      protected transient PrefetchTreeNode parent
    • children

      protected Collection<PrefetchTreeNode> children
  • Constructor Details

    • PrefetchTreeNode

      public PrefetchTreeNode()
      Creates a root node of the prefetch tree. Children can be added to the parent by calling "addPath".
    • PrefetchTreeNode

      protected PrefetchTreeNode​(PrefetchTreeNode parent, String name)
      Creates a phantom PrefetchTreeNode, initializing it with parent node and a name of a relationship segment connecting this node with the parent.
  • Method Details

    • withPath

      public static PrefetchTreeNode withPath​(String path, int semantics)
      Creates and returns a prefetch tree spanning a single path. The tree is made of phantom nodes, up to the leaf node, which is non-phantom and has specified semantics.
      Since:
      4.0
    • encodeAsXML

      public void encodeAsXML​(XMLEncoder encoder, ConfigurationNodeVisitor delegate)
      Description copied from interface: XMLSerializable
      Prints itself as XML to the provided XMLEncoder.
      Specified by:
      encodeAsXML in interface XMLSerializable
    • getRoot

      public PrefetchTreeNode getRoot()
      Returns the root of the node tree. Root is the topmost parent node that itself has no parent set.
    • getPath

      public String getPath()
      Returns full prefetch path, that is a dot separated String of node names starting from root and up to and including this node. Note that root "name" is considered to be an empty string.
    • getPath

      public String getPath​(PrefetchTreeNode upTillParent)
    • adjacentJointNodes

      public Collection<PrefetchTreeNode> adjacentJointNodes()
      Returns a subset of nodes with "joint" semantics that are to be prefetched in the same query as the current node. Result excludes this node, regardless of its semantics.
    • jointNodes

      public Collection<PrefetchTreeNode> jointNodes()
      Returns a collection of PrefetchTreeNodes in this tree with joint semantics.
    • disjointNodes

      public Collection<PrefetchTreeNode> disjointNodes()
      Returns a collection of PrefetchTreeNodes with disjoint semantics.
    • disjointByIdNodes

      public Collection<PrefetchTreeNode> disjointByIdNodes()
      Returns a collection of PrefetchTreeNodes with disjoint semantics
      Since:
      3.1
    • nonPhantomNodes

      public Collection<PrefetchTreeNode> nonPhantomNodes()
      Returns a collection of PrefetchTreeNodes that are not phantoms.
    • cloneJointSubtree

      public PrefetchTreeNode cloneJointSubtree()
      Returns a clone of subtree that includes all joint children starting from this node itself and till the first occurrence of non-joint node
      Since:
      3.1
    • traverse

      public void traverse​(PrefetchProcessor processor)
      Traverses the tree depth-first, invoking callback methods of the processor when passing through the nodes.
    • getNode

      public PrefetchTreeNode getNode​(String path)
      Looks up an existing node in the tree desribed by the dot-separated path. Will return null if no matching child exists.
    • addPath

      public PrefetchTreeNode addPath​(String path)
      Adds a "path" with specified semantics to this prefetch node. All yet non-existent nodes in the created path will be marked as phantom.
      Returns:
      the last segment in the created path.
    • merge

      public void merge​(PrefetchTreeNode node)
      Merges PrefetchTreeNode into the current prefetch tree, cloning the nodes added to this tree. Merged nodes semantics (if defined) and non-phantom status are applied to the nodes of this tree.
      Parameters:
      node - a root node of a tree to merge into this tree. The path of the merged node within the resulting tree is determined from its name.
      Since:
      4.0
    • removePath

      public void removePath​(String path)
      Removes or makes phantom a node defined by this path. If the node for this path doesn't have any children, it is removed, otherwise it is made phantom.
    • addChild

      public void addChild​(PrefetchTreeNode child)
    • removeChild

      public void removeChild​(PrefetchTreeNode child)
    • removeChild

      protected void removeChild​(String segment)
    • getChild

      protected PrefetchTreeNode getChild​(String segment)
    • getParent

      public PrefetchTreeNode getParent()
    • getChildren

      public Collection<PrefetchTreeNode> getChildren()
      Returns an unmodifiable collection of children.
    • hasChildren

      public boolean hasChildren()
    • getName

      public String getName()
    • isPhantom

      public boolean isPhantom()
    • setPhantom

      public void setPhantom​(boolean phantom)
    • getSemantics

      public int getSemantics()
    • setSemantics

      public void setSemantics​(int semantics)
    • isJointPrefetch

      public boolean isJointPrefetch()
    • isDisjointPrefetch

      public boolean isDisjointPrefetch()
    • isDisjointByIdPrefetch

      public boolean isDisjointByIdPrefetch()
    • getEjbqlPathEntityId

      public String getEjbqlPathEntityId()
    • setEjbqlPathEntityId

      public void setEjbqlPathEntityId​(String ejbqlPathEntityId)
    • getEntityName

      public String getEntityName()
    • setEntityName

      public void setEntityName​(String entityName)
    • readResolve

      protected Object readResolve() throws ObjectStreamException
      Throws:
      ObjectStreamException