Package groovy.util

Class Node

  • All Implemented Interfaces:
    Serializable, Cloneable

    public class Node
    extends Object
    implements Serializable, Cloneable
    Represents an arbitrary tree node which can be used for structured metadata or any arbitrary XML-like tree. A node can have a name, a value and an optional Map of attributes. Typically the name is a String and a value is either a String or a List of other Nodes, though the types are extensible to provide a flexible structure, e.g. you could use a QName as the name which includes a namespace URI and a local name. Or a JMX ObjectName etc. So this class can represent metadata like {foo a=1 b="abc"} or nested metadata like {foo a=1 b="123" { bar x=12 text="hello" }}
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      Node​(Node parent, Object name)
      Creates a new Node named name and if a parent is supplied, adds the newly created node as a child of the parent.
      Node​(Node parent, Object name, Object value)
      Creates a new Node named name with value value and if a parent is supplied, adds the newly created node as a child of the parent.
      Node​(Node parent, Object name, Map attributes)
      Creates a new Node named name with attributes specified in the attributes Map.
      Node​(Node parent, Object name, Map attributes, Object value)
      Creates a new Node named name with value value and with attributes specified in the attributes Map.
    • Constructor Detail

      • Node

        public Node​(Node parent,
                    Object name)
        Creates a new Node named name and if a parent is supplied, adds the newly created node as a child of the parent.
        Parameters:
        parent - the parent node or null if no parent
        name - the name of the node
      • Node

        public Node​(Node parent,
                    Object name,
                    Object value)
        Creates a new Node named name with value value and if a parent is supplied, adds the newly created node as a child of the parent.
        Parameters:
        parent - the parent node or null if no parent
        name - the name of the node
        value - the Node value, e.g. some text but in general any Object
      • Node

        public Node​(Node parent,
                    Object name,
                    Map attributes)
        Creates a new Node named name with attributes specified in the attributes Map. If a parent is supplied, the newly created node is added as a child of the parent.
        Parameters:
        parent - the parent node or null if no parent
        name - the name of the node
        attributes - a Map of name-value pairs
      • Node

        public Node​(Node parent,
                    Object name,
                    Map attributes,
                    Object value)
        Creates a new Node named name with value value and with attributes specified in the attributes Map. If a parent is supplied, the newly created node is added as a child of the parent.
        Parameters:
        parent - the parent node or null if no parent
        name - the name of the node
        attributes - a Map of name-value pairs
        value - the Node value, e.g. some text but in general any Object
    • Method Detail

      • clone

        public Object clone()
        Creates a new Node with the same name, no parent, shallow cloned attributes and if the value is a NodeList, a (deep) clone of those nodes.
        Overrides:
        clone in class Object
        Returns:
        the clone
      • append

        public boolean append​(Node child)
        Appends a child to the current node.
        Parameters:
        child - the child to append
        Returns:
        true
      • remove

        public boolean remove​(Node child)
        Removes a child of the current node.
        Parameters:
        child - the child to remove
        Returns:
        true if the param was a child of the current node
      • appendNode

        public Node appendNode​(Object name,
                               Map attributes)
        Creates a new node as a child of the current node.
        Parameters:
        name - the name of the new node
        attributes - the attributes of the new node
        Returns:
        the newly created Node
      • appendNode

        public Node appendNode​(Object name)
        Creates a new node as a child of the current node.
        Parameters:
        name - the name of the new node
        Returns:
        the newly created Node
      • appendNode

        public Node appendNode​(Object name,
                               Object value)
        Creates a new node as a child of the current node.
        Parameters:
        name - the name of the new node
        value - the value of the new node
        Returns:
        the newly created Node
      • appendNode

        public Node appendNode​(Object name,
                               Map attributes,
                               Object value)
        Creates a new node as a child of the current node.
        Parameters:
        name - the name of the new node
        attributes - the attributes of the new node
        value - the value of the new node
        Returns:
        the newly created Node
      • replaceNode

        public Node replaceNode​(Closure c)
        Replaces the current node with nodes defined using builder-style notation via a Closure.
        Parameters:
        c - A Closure defining the new nodes using builder-style notation.
        Returns:
        the original now replaced node
      • replaceNode

        public Node replaceNode​(Node n)
        Replaces the current node with the supplied node.
        Parameters:
        n - the new Node
        Returns:
        the original now replaced node
      • plus

        public void plus​(Closure c)
        Adds sibling nodes (defined using builder-style notation via a Closure) after the current node.
        Parameters:
        c - A Closure defining the new sibling nodes to add using builder-style notation.
      • setMetaClass

        protected static void setMetaClass​(MetaClass metaClass,
                                           Class nodeClass)
        Extension point for subclasses to override the metaclass. The default one supports the property and @ attribute notations.
        Parameters:
        metaClass - the original metaclass
        nodeClass - the class whose metaclass we wish to override (this class or a subclass)
      • text

        public String text()
        Returns the textual representation of the current node and all its child nodes.
        Returns:
        the text value of the node including child text
      • iterator

        public Iterator iterator()
        Returns an Iterator of the children of the node.
        Returns:
        the iterator of the nodes children
      • children

        public List children()
        Returns a List of the nodes children.
        Returns:
        the nodes children
      • attributes

        public Map attributes()
        Returns a Map of the attributes of the node or an empty Map if the node does not have any attributes.
        Returns:
        the attributes of the node
      • attribute

        public Object attribute​(Object key)
        Provides lookup of attributes by key.
        Parameters:
        key - the key of interest
        Returns:
        the attribute matching the key or null if no match exists
      • name

        public Object name()
        Returns an Object representing the name of the node.
        Returns:
        the name or null if name is empty
      • value

        public Object value()
        Returns an Object representing the value of the node.
        Returns:
        the value or null if value is empty
      • setValue

        public void setValue​(Object value)
        Adds or replaces the value of the node.
        Parameters:
        value - the new value of the node
      • parent

        public Node parent()
        Returns the parent of the node.
        Returns:
        the parent or null for the root node
      • setParent

        protected void setParent​(Node parent)
        Adds or replaces the parent of the node.
        Parameters:
        parent - the new parent of the node
      • get

        public Object get​(String key)
        Provides lookup of elements by non-namespaced name
        Parameters:
        key - the name (or shortcut key) of the node(s) of interest
        Returns:
        the nodes which match key
      • getAt

        public NodeList getAt​(QName name)
        Provides lookup of elements by QName.
        Parameters:
        name - the QName of interest
        Returns:
        the nodes matching name
      • getAt

        public NodeList getAt​(QName name)
        Provides lookup of elements by QName.
        Parameters:
        name - the QName of interest
        Returns:
        the nodes matching name
      • depthFirst

        public List depthFirst()
        Provides a collection of all the nodes in the tree using a depth-first preorder traversal.
        Returns:
        the list of (depth-first) ordered nodes
      • depthFirst

        public List depthFirst​(boolean preorder)
        Provides a collection of all the nodes in the tree using a depth-first traversal.
        Parameters:
        preorder - if false, a postorder depth-first traversal will be performed
        Returns:
        the list of (depth-first) ordered nodes
        Since:
        2.5.0
      • depthFirst

        public void depthFirst​(Closure c)
        Provides a collection of all the nodes in the tree using a depth-first preorder traversal.
        Parameters:
        c - the closure to run for each node (a one or two parameter can be used; if one parameter is given the closure will be passed the node, for a two param closure the second parameter will be the level).
        Since:
        2.5.0
      • depthFirst

        public void depthFirst​(Map<String,​Object> options,
                               Closure c)
        Provides a collection of all the nodes in the tree using a depth-first traversal. A boolean 'preorder' options is supported.
        Parameters:
        options - map containing options
        c - the closure to run for each node (a one or two parameter can be used; if one parameter is given the closure will be passed the node, for a two param closure the second parameter will be the level).
        Since:
        2.5.0
      • breadthFirst

        public List breadthFirst()
        Provides a collection of all the nodes in the tree using a breadth-first preorder traversal.
        Returns:
        the list of (breadth-first) ordered nodes
      • breadthFirst

        public List breadthFirst​(boolean preorder)
        Provides a collection of all the nodes in the tree using a breadth-first traversal.
        Parameters:
        preorder - if false, a postorder breadth-first traversal will be performed
        Returns:
        the list of (breadth-first) ordered nodes
        Since:
        2.5.0
      • breadthFirst

        public void breadthFirst​(Closure c)
        Calls the provided closure for all the nodes in the tree using a breadth-first preorder traversal.
        Parameters:
        c - the closure to run for each node (a one or two parameter can be used; if one parameter is given the closure will be passed the node, for a two param closure the second parameter will be the level).
        Since:
        2.5.0
      • breadthFirst

        public void breadthFirst​(Map<String,​Object> options,
                                 Closure c)
        Calls the provided closure for all the nodes in the tree using a breadth-first traversal. A boolean 'preorder' options is supported.
        Parameters:
        options - map containing options
        c - the closure to run for each node (a one or two parameter can be used; if one parameter is given the closure will be passed the node, for a two param closure the second parameter will be the level).
        Since:
        2.5.0
      • localText

        public List<String> localText()
        Returns the list of any direct String nodes of this node.
        Returns:
        the list of String values from this node
        Since:
        2.3.0
      • print

        public void print​(PrintWriter out)
        Writes the node to the specified PrintWriter.
        Parameters:
        out - the writer receiving the output
      • toInteger

        public Integer toInteger()
        Converts the text of this GPathResult to a Integer object.
        Returns:
        the GPathResult, converted to a Integer
      • toLong

        public Long toLong()
        Converts the text of this GPathResult to a Long object.
        Returns:
        the GPathResult, converted to a Long
      • toFloat

        public Float toFloat()
        Converts the text of this GPathResult to a Float object.
        Returns:
        the GPathResult, converted to a Float
      • toDouble

        public Double toDouble()
        Converts the text of this GPathResult to a Double object.
        Returns:
        the GPathResult, converted to a Double
      • toBigDecimal

        public BigDecimal toBigDecimal()
        Converts the text of this GPathResult to a BigDecimal object.
        Returns:
        the GPathResult, converted to a BigDecimal
      • toBigInteger

        public BigInteger toBigInteger()
        Converts the text of this GPathResult to a BigInteger object.
        Returns:
        the GPathResult, converted to a BigInteger