Class Node

java.lang.Object
net.sf.basedb.util.overview.Node
All Implemented Interfaces:
Comparable<Node>

public class Node
extends Object
implements Comparable<Node>
A node in an overview. There are two types of nodes: folder nodes and item nodes. The only difference is that an item node has a link to a BasicItem (see getItem() but a folder node does not. Both node types can have child nodes.

Each node has a unique ID (getId()) which is based on the system hashcode. Each node also has a name which should be unique among the child nodes. If the name isn't unique the getChild(String) returns the first matching node.

Version:
2.2
Author:
Nicklas
Last modified
$Date: 2015-04-20 11:08:18 +0200 (må, 20 apr 2015) $
  • Field Details

    • name

      private final String name
    • title

      private final String title
    • item

      private BasicItem item
    • parent

      private final Node parent
    • type

      private final Node.Type type
    • nodeId

      private final String nodeId
    • direction

      private final ChildNodeDirection direction
    • children

      private List<Node> children
    • numWarnings

      private int numWarnings
    • numErrors

      private int numErrors
    • childWarnings

      private int childWarnings
    • childErrors

      private int childErrors
    • childrenLoaded

      private boolean childrenLoaded
    • attributes

      private Map<NodeAttribute<?>,​Object> attributes
    • newChildren

      private List<Node> newChildren
  • Constructor Details

    • Node

      public Node​(String name, String title, BasicItem item)
      Create an item-type root node.
      Parameters:
      name - The name of the node
      title - The display title of the node
      item - The item the node references
      See Also:
      GenericOverview.getRootNode()
    • Node

      public Node​(String name, String title, Node parent)
      Create a folder-type child node.
      Parameters:
      name - The name of the child node
      title - The display title of the node
      parent - The parent node
    • Node

      public Node​(String name, String title, Node parent, ChildNodeDirection direction)
      Create a folder-type child node.
      Parameters:
      name - The name of the child node
      title - The display title of the node
      parent - The parent node
      direction - The direction to use when continuing to load child nodes
      Since:
      2.10
    • Node

      public Node​(String name, String title, Node parent, BasicItem item)
      Create an item-type child node
      Parameters:
      name - The name of the child node
      title - The display title of the node
      parent - The parent node
      item - The item this node references
    • Node

      public Node​(String name, String title, Node parent, BasicItem item, ChildNodeDirection direction)
      Create an item-type child node
      Parameters:
      name - The name of the child node
      title - The display title of the node
      parent - The parent node
      item - The item this node references
      direction - The direction to use when continuing to load child nodes
      Since:
      2.10
    • Node

      private Node​(String name, String title, Node parent, BasicItem item, Node.Type type, ChildNodeDirection direction)
    • Node

      private Node​(Node copyFrom, Node parent)
      Make a copy of a node
      Since:
      2.10
  • Method Details

    • getId

      public String getId()
      Get a unique ID for this node. The ID is based on the hashcode and should be unique for a given virtual machine.
    • getNodeType

      public Node.Type getNodeType()
      Get the node type of this node. Note that for folder-type nodes the getItem() always return null. It it returns null for an item-type node it usually means that access was denied to that particular item.
    • getName

      public String getName()
      Get the name of this node. If the name is unique among the child nodes for a parent the call getParent().getChild(this.getName()) should return this node.
    • getTitle

      public String getTitle()
      Get the display title of this node.
    • getItem

      public BasicItem getItem()
      Get the item that is related to this node. Folder-type nodes always return null. If an item-type node returns null it usually means that access was denied to the item.
    • getItem

      public BasicItem getItem​(DbControl dc)
      Get the item that is related to this node and make sure that it is loaded with the current DbControl. Folder-type nodes always return null. If an item-type node returns null it usually means that access was denied to the item.
      Since:
      2.10
    • getItemType

      public Item getItemType()
      Get the item type of the item that this node related to this node. This method is a shortcut for getItem().getType().
      Returns:
      The item type, or null if no item is attached to this node
      Since:
      2.10
    • getParent

      public Node getParent()
      Get the parent of this node. Returns null if this is the root node.
    • getFirstParent

      public Node getFirstParent​(Filter<? super Node> filter)
      Find the first parent node that matches a filter. Eg. The first parent were Filter.evaluate(Object) returns true is the node that is returned.
      Parameters:
      filter - The filter to use for matching parent
      Returns:
      The node, or null if no node was found
      Since:
      2.10
    • getFirstNode

      public Node getFirstNode​(Filter<? super Node> filter)
      Find the first node (including this) that matches a filter. Eg. the first node were Filter.evaluate(Object) returns true is the node that is returned. Calling this method is equivalent to first evaluating the filter on this node, and then calling getFirstParent(Filter) if it didn't match.
      Parameters:
      filter - The filter to use for matching nodes
      Returns:
      The node, or null if no node was found
      Since:
      3.0
    • findAll

      public List<Node> findAll​(Filter<? super Node> filter)
      Find all nodes in the parent chain that matches the given filter.
      Parameters:
      filter - The filter to use for matching nodes
      Returns:
      A list with the matched nodes in the order they matched
      Since:
      3.2
    • getChildren

      public List<Node> getChildren()
      Get all child nodes of this node. May return null or an empty list if this node has no children.
    • numChildren

      public int numChildren()
      Get the number of child nodes in this node.
      Returns:
      The number of child nodes, or -1 if the child nodes has not been loaded yet
      Since:
      2.10
    • getChild

      public Node getChild​(String name)
      Get the child node with a specific name. If more than one node has the same name only the first one found is returned.
      Parameters:
      name - The name of the child node.
      Returns:
      The child node with the given name, or null if no node is found
    • numNewChildren

      public int numNewChildren()
      Get the number of new children added to this node since the last call to getNewChildren().
      Returns:
      The number of child nodes, or -1 if the child nodes has not been loaded yet
      Since:
      3.2
    • getNewChildren

      public List<Node> getNewChildren()
      Get all new children to this node. May return null or an empty list if this node has no children. Calling this method clears the new children information and the next call will return null unless more children is added inbetween.
      Since:
      3.2
    • addChild

      protected void addChild​(Node child)
      Add a child node to this one.
    • sortChildren

      public void sortChildren​(Comparator<? super Node> comparator)
      Sorts the list of child nodes.
      Parameters:
      comparator - A comparator that determines the sort order, if not specifed, they children are sorted according to their title
      Since:
      2.14
    • setChildrenLoaded

      public void setChildrenLoaded()
      Sets a flag to indicate that all children has been loaded.
      Since:
      2.10
    • isChildrenLoaded

      public boolean isChildrenLoaded()
      Returns:
      TRUE if the children to this node has been loaded, FALSE otherwise
      Since:
      2.10
    • getChildNodeDirection

      public ChildNodeDirection getChildNodeDirection()
      Get the direction to use when loading children of this node.
      Returns:
      A ChildNodeDirection object
      Since:
      2.10
    • setWarnings

      public void setWarnings​(int numWarnings)
      Set the number of warnings that was found while validating this node. This method automatically updates the number of child warnings reported by parent nodes.
      Parameters:
      numWarnings - The number of warnings
      See Also:
      addWarnings(int)
    • addWarnings

      public void addWarnings​(int numWarnings)
      Add more warnings to this node. This method automatically updates the number of child warnings reported by parent nodes.
      Parameters:
      numWarnings - The numer of warnings to add
      See Also:
      setWarnings(int)
    • addChildWarnings

      protected void addChildWarnings​(int numWarnings)
      Add child warnings to this node. This method is called by child nodes when the warnings are updated on them.
    • setErrors

      public void setErrors​(int numErrors)
      Set the number of errors that was found while validating this node. This method automatically updates the number of child errors reported by parent nodes.
      Parameters:
      numErrors - The number of errors
      See Also:
      addErrors(int)
    • addErrors

      public void addErrors​(int numErrors)
      Add more errors to this node. This method automatically updates the number of child errors reported by parent nodes.
      Parameters:
      numErrors - The numer of errors to add
      See Also:
      setErrors(int)
    • addChildErrors

      protected void addChildErrors​(int numErrors)
      Add child errors to this node. This method is called by child nodes when the errors are updated on them.
    • getNumWarnings

      public int getNumWarnings()
      Get the number of warnings on this node.
      See Also:
      getChildWarnings()
    • getNumErrors

      public int getNumErrors()
      Get the number of errors on this node.
      See Also:
      getChildErrors()
    • getChildWarnings

      public int getChildWarnings()
      Get the number of warnings to children of this node.
      See Also:
      getNumWarnings()
    • getChildErrors

      public int getChildErrors()
      Get the number of errors to children of this node.
      See Also:
      getNumErrors()
    • clearFailures

      public void clearFailures()
      Clear all warnings, errors on this node and on all child nodes.
    • setAttribute

      public <T> void setAttribute​(NodeAttribute<T> attribute, T value)
      Set a node attribute.
      Parameters:
      attribute - The attribute to set
      value - The value to set for the attribute or null to remove the current value
      Since:
      3.0
    • getAttribute

      public <T> T getAttribute​(NodeAttribute<T> attribute)
      Get the value for a node attribute.
      Parameters:
      attribute - The attribute to get
      Returns:
      The value or null if there is no value
      Since:
      3.0
    • hasAttribute

      public boolean hasAttribute​(NodeAttribute<?> attribute)
      Check if the node has a value for the given attribute.
      Parameters:
      attribute - The attribute to check
      Returns:
      TRUE if a value exists, FALSE otherwise
      Since:
      3.0
    • deepCopy

      public Node deepCopy​(Node parentOfCopy)
      Create a deep copy of this node and all it's children. The copy will be attached to the given parent.
      Parameters:
      parentOfCopy - The node that should be the parent of the copy or null to make the copy a root node
      Returns:
      The copy
      Throws:
      PermissionDeniedException - If the given parent node is a descendant of this node (it would lead to an infinite loop)
      Since:
      2.10
    • deepCopyInternal

      private Node deepCopyInternal​(Node parentOfCopy)
    • compareTo

      public int compareTo​(Node o)
      Specified by:
      compareTo in interface Comparable<Node>
    • toString

      public String toString()
      Overrides:
      toString in class Object