Class DefaultTreeNode<Self extends DefaultTreeNode<Self>>

java.lang.Object
org.keycloak.models.map.storage.tree.DefaultTreeNode<Self>
All Implemented Interfaces:
TreeNode<Self>
Direct Known Subclasses:
ModelCriteriaNode, TreeStorageNodeInstance, TreeStorageNodePrescription

public class DefaultTreeNode<Self extends DefaultTreeNode<Self>> extends Object implements TreeNode<Self>
Generic implementation of a node in a tree.

Any method that is not purely on tree or nodes should go into a specialized subclass of this class!

Author:
hmlnarik
  • Field Details

  • Constructor Details

    • DefaultTreeNode

      protected DefaultTreeNode(Map<String,Object> treeProperties)
      Parameters:
      treeProperties - Reference to tree properties map. Tree properties are maintained outside of this node.
    • DefaultTreeNode

      public DefaultTreeNode(Map<String,Object> nodeProperties, Map<String,Object> edgeProperties, Map<String,Object> treeProperties)
  • Method Details

    • getEdgeProperties

      public Map<String,Object> getEdgeProperties()
      Description copied from interface: TreeNode
      Parent-to-this-node edge properties. For example, import/no-import mode or sync mode belongs here.
      Specified by:
      getEdgeProperties in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Returns properties of the edge from the parent to this node. Never returns null.
    • getEdgeProperty

      public <V> Optional<V> getEdgeProperty(String key, Class<V> clazz)
      Description copied from interface: TreeNode
      Convenience method for obtaining a single parent-to-this-node edge property.
      Specified by:
      getEdgeProperty in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Optional with a property value if it exists. Never returns null
    • setEdgeProperty

      public void setEdgeProperty(String property, Object value)
    • getNodeProperties

      public Map<String,Object> getNodeProperties()
      Description copied from interface: TreeNode
      Properties of the this node. In storage context, properties of the single map storage represented by this node, for example read-only/read-write flag.
      Specified by:
      getNodeProperties in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Returns properties of the storage managed in this node. Never returns null.
    • getNodeProperty

      public <V> Optional<V> getNodeProperty(String key, Class<V> clazz)
      Description copied from interface: TreeNode
      Convenience method for obtaining a single property of this node.
      Specified by:
      getNodeProperty in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Optional with a property value if it exists. Never returns null
    • setNodeProperty

      public void setNodeProperty(String property, Object value)
    • getTreeProperties

      public Map<String,Object> getTreeProperties()
      Description copied from interface: TreeNode
      Properties of the whole tree. For example, kind of the stored objects, e.g. realms or clients.
      Specified by:
      getTreeProperties in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Returns properties of the tree that contains in this node. Never returns null.
    • getTreeProperty

      public <V> Optional<V> getTreeProperty(String key, Class<V> clazz)
      Description copied from interface: TreeNode
      Convenience method for obtaining a single property of tree that this node belongs to.
      Specified by:
      getTreeProperty in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Optional with a property value if it exists. Never returns null
    • getId

      public String getId()
      Description copied from interface: TreeNode
      Returns ID of the node, which could match e.g. ID of the component with storage definition.
      Specified by:
      getId in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Node ID
    • setId

      public void setId(String id)
    • findFirstDfs

      public Optional<Self> findFirstDfs(Predicate<Self> visitor)
      Description copied from interface: TreeNode
      Depth-first search for a node.
      Specified by:
      findFirstDfs in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      visitor - Predicate on nodes, returns true when a search condition is satisfied which terminates the search.
      Returns:
      Leftmost first node that matches the predicate, null when no node matches.
    • findFirstBottommostDfs

      public Optional<Self> findFirstBottommostDfs(Predicate<Self> visitor)
      Description copied from interface: TreeNode
      Depth-first search for a node that is bottommost from those matching DFS.
      Specified by:
      findFirstBottommostDfs in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      visitor - Predicate on nodes, returns true when a search condition is satisfied which terminates the search.
      Returns:
      Leftmost and bottommost node that matches the predicate, null when no node matches.
    • findFirstBfs

      public Optional<Self> findFirstBfs(Predicate<Self> visitor)
      Description copied from interface: TreeNode
      Breadth-first search for a node.
      Specified by:
      findFirstBfs in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      visitor - Predicate on nodes, returns true when a search condition is satisfied which terminates the search.
      Returns:
      First node that matches the predicate, null when no node matches.
    • walkBfs

      public void walkBfs(Consumer<Self> visitor)
      Description copied from interface: TreeNode
      Walks the tree with the given visitor in breadth-first search manner.
      Specified by:
      walkBfs in interface TreeNode<Self extends DefaultTreeNode<Self>>
    • walkDfs

      public void walkDfs(Consumer<Self> visitorUponEntry, Consumer<Self> visitorAfterChildrenVisited)
      Description copied from interface: TreeNode
      Walks the tree with the given visitor in depth-first search manner.
      Specified by:
      walkDfs in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      visitorUponEntry - Visitor called upon entry of the node. May be null, in that case no action is performed.
      visitorAfterChildrenVisited - Visitor called before exit of the node. May be null, in that case no action is performed.
    • forEachParent

      public void forEachParent(Consumer<Self> visitor)
      Description copied from interface: TreeNode
      Calls the given visitor on each node laying on the path from this node (exclusive) to the root of the tree (inclusive).
      Specified by:
      forEachParent in interface TreeNode<Self extends DefaultTreeNode<Self>>
    • getPathToRoot

      public List<Self> getPathToRoot(TreeNode.PathOrientation orientation)
      Description copied from interface: TreeNode
      Returns the path (list of nodes) from this node to root node.
      Specified by:
      getPathToRoot in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      orientation - Determines order of the nodes in the returned list - either this node is first and the root node is last, (TreeNode.PathOrientation.BOTTOM_FIRST) or vice versa (TreeNode.PathOrientation.TOP_FIRST).
      Returns:
    • getChildren

      public List<Self> getChildren()
      Description copied from interface: TreeNode
      Returns the children of the current node. Order does matter.
      Specified by:
      getChildren in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Read-only list of the children. Never returns null.
    • hasChildren

      public boolean hasChildren()
    • hasNoChildren

      public boolean hasNoChildren()
    • addChild

      public void addChild(Self node)
      Description copied from interface: TreeNode
      Adds a node as a child of this node, and sets the parent of the node to this node.
      Specified by:
      addChild in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      node - Future child node. If null or the node is already amongst the children list, no action is done.
    • addChild

      public void addChild(int index, Self node)
      Description copied from interface: TreeNode
      Adds a node as a child of this node, and sets the parent of the node to this node.
      Specified by:
      addChild in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      index - Index at which the specified element is to be inserted
      node - Future child node. If null or the node is already amongst the children list, no action is done.
    • getChild

      public Optional<Self> getChild(String id)
      Description copied from interface: TreeNode
      Returns a node by ID. If there are more nodes with the same ID, any node from those may be returned.
      Specified by:
      getChild in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
    • removeChild

      public int removeChild(Predicate<Self> shouldRemove)
      Description copied from interface: TreeNode
      Removes child nodes satisfying the given predicate.
      Specified by:
      removeChild in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      Number of removed nodes
    • removeChild

      public Optional<Self> removeChild(Self node)
      Description copied from interface: TreeNode
      Removes the given child node.
      Specified by:
      removeChild in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      node - Node to remove
      Returns:
      Removed node
    • getParent

      public Optional<Self> getParent()
      Description copied from interface: TreeNode
      Returns parent node or an empty Optional if this node is a root node.
      Specified by:
      getParent in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
      See description. Never returns null.
    • setParent

      public void setParent(Self parent)
      Description copied from interface: TreeNode
      Sets the parent node to the given parent. If this node was a child of another node, also removes this node from the children of the previous parent.
      Specified by:
      setParent in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Parameters:
      parent - New parent node or null if this node should be parentless.
    • cloneTree

      public <RNode extends TreeNode<? super RNode>> RNode cloneTree(Function<Self,RNode> instantiateFunc)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • getParentsStream

      public Stream<Self> getParentsStream()
      Description copied from interface: TreeNode
      Returns a stream of the nodes laying on the path from this node (exclusive) to the root of the tree (inclusive).
      Specified by:
      getParentsStream in interface TreeNode<Self extends DefaultTreeNode<Self>>
      Returns:
    • getLabel

      protected String getLabel()
    • toString

      public String toString()
      Overrides:
      toString in class Object