Package groovy.util

## Class Node

- java.lang.Object
- - groovy.util.Node

- All Implemented Interfaces:
    `java.io.Serializable`, `java.lang.Cloneable`

      public class Node
      extends java.lang.Object
      implements java.io.Serializable, java.lang.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, java.lang.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, java.lang.Object name, java.lang.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, java.lang.Object name, java.util.Map attributes)` | Creates a new Node named `name` with attributes specified in the `attributes` Map.
    `Node​(Node parent, java.lang.Object name, java.util.Map attributes, java.lang.Object value)` | Creates a new Node named `name` with value `value` and with attributes specified in the `attributes` Map.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `append​(Node child)` | Appends a child to the current node.
    `Node` | `appendNode​(java.lang.Object name)` | Creates a new node as a child of the current node.
    `Node` | `appendNode​(java.lang.Object name, java.lang.Object value)` | Creates a new node as a child of the current node.
    `Node` | `appendNode​(java.lang.Object name, java.util.Map attributes)` | Creates a new node as a child of the current node.
    `Node` | `appendNode​(java.lang.Object name, java.util.Map attributes, java.lang.Object value)` | Creates a new node as a child of the current node.
    `java.lang.Object` | `attribute​(java.lang.Object key)` | Provides lookup of attributes by key.
    `java.util.Map` | `attributes()` | Returns a `Map` of the attributes of the node or an empty `Map` if the node does not have any attributes.
    `java.util.List` | `breadthFirst()` | Provides a collection of all the nodes in the tree using a breadth-first preorder traversal.
    `java.util.List` | `breadthFirst​(boolean preorder)` | Provides a collection of all the nodes in the tree using a breadth-first traversal.
    `void` | `breadthFirst​(Closure c)` | Calls the provided closure for all the nodes in the tree using a breadth-first preorder traversal.
    `void` | `breadthFirst​(java.util.Map<java.lang.String,​java.lang.Object> options, Closure c)` | Calls the provided closure for all the nodes in the tree using a breadth-first traversal.
    `java.util.List` | `children()` | Returns a `List` of the nodes children.
    `java.lang.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.
    `java.util.List` | `depthFirst()` | Provides a collection of all the nodes in the tree using a depth-first preorder traversal.
    `java.util.List` | `depthFirst​(boolean preorder)` | Provides a collection of all the nodes in the tree using a depth-first traversal.
    `void` | `depthFirst​(Closure c)` | Provides a collection of all the nodes in the tree using a depth-first preorder traversal.
    `void` | `depthFirst​(java.util.Map<java.lang.String,​java.lang.Object> options, Closure c)` | Provides a collection of all the nodes in the tree using a depth-first traversal.
    `java.lang.Object` | `get​(java.lang.String key)` | Provides lookup of elements by non-namespaced name
    `NodeList` | `getAt​(QName name)` | Provides lookup of elements by QName.
    `java.util.Iterator` | `iterator()` | Returns an `Iterator` of the children of the node.
    `java.util.List<java.lang.String>` | `localText()` | Returns the list of any direct String nodes of this node.
    `java.lang.Object` | `name()` | Returns an `Object` representing the name of the node.
    `Node` | `parent()` | Returns the parent of the node.
    `void` | `plus​(Closure c)` | Adds sibling nodes (defined using builder-style notation via a Closure) after the current node.
    `void` | `print​(java.io.PrintWriter out)` | Writes the node to the specified `PrintWriter`.
    `boolean` | `remove​(Node child)` | Removes a child of the current node.
    `Node` | `replaceNode​(Closure c)` | Replaces the current node with nodes defined using builder-style notation via a Closure.
    `Node` | `replaceNode​(Node n)` | Replaces the current node with the supplied node.
    `protected static void` | `setMetaClass​(MetaClass metaClass, java.lang.Class nodeClass)` | Extension point for subclasses to override the metaclass.
    `protected void` | `setParent​(Node parent)` | Adds or replaces the parent of the node.
    `void` | `setValue​(java.lang.Object value)` | Adds or replaces the value of the node.
    `java.lang.String` | `text()` | Returns the textual representation of the current node and all its child nodes.
    `java.math.BigDecimal` | `toBigDecimal()` | Converts the text of this GPathResult to a BigDecimal object.
    `java.math.BigInteger` | `toBigInteger()` | Converts the text of this GPathResult to a BigInteger object.
    `java.lang.Double` | `toDouble()` | Converts the text of this GPathResult to a Double object.
    `java.lang.Float` | `toFloat()` | Converts the text of this GPathResult to a Float object.
    `java.lang.Integer` | `toInteger()` | Converts the text of this GPathResult to a Integer object.
    `java.lang.Long` | `toLong()` | Converts the text of this GPathResult to a Long object.
    `java.lang.String` | `toString()` |
    `java.lang.Object` | `value()` | Returns an `Object` representing the value of the node.

    - ### Methods inherited from class java.lang.Object

      `equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### Node

          public Node​(Node parent,
                      java.lang.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,
                      java.lang.Object name,
                      java.lang.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,
                      java.lang.Object name,
                      java.util.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,
                      java.lang.Object name,
                      java.util.Map attributes,
                      java.lang.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 java.lang.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 `java.lang.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​(java.lang.Object name,
                                 java.util.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​(java.lang.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​(java.lang.Object name,
                                 java.lang.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​(java.lang.Object name,
                                 java.util.Map attributes,
                                 java.lang.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,
                                             java.lang.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 java.lang.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 java.util.Iterator iterator()

      Returns an `Iterator` of the children of the node.
      Returns:
        the iterator of the nodes children

    - #### children

          public java.util.List children()

      Returns a `List` of the nodes children.
      Returns:
        the nodes children

    - #### attributes

          public java.util.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 java.lang.Object attribute​(java.lang.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 java.lang.Object name()

      Returns an `Object` representing the name of the node.
      Returns:
        the name or `null` if name is empty

    - #### value

          public java.lang.Object value()

      Returns an `Object` representing the value of the node.
      Returns:
        the value or `null` if value is empty

    - #### setValue

          public void setValue​(java.lang.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 java.lang.Object get​(java.lang.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

    - #### depthFirst

          public java.util.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 java.util.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​(java.util.Map<java.lang.String,​java.lang.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 java.util.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 java.util.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​(java.util.Map<java.lang.String,​java.lang.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 java.util.List<java.lang.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

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### print

          public void print​(java.io.PrintWriter out)

      Writes the node to the specified `PrintWriter`.
      Parameters:
        `out` - the writer receiving the output

    - #### toInteger

          public java.lang.Integer toInteger()

      Converts the text of this GPathResult to a Integer object.
      Returns:
        the GPathResult, converted to a `Integer`

    - #### toLong

          public java.lang.Long toLong()

      Converts the text of this GPathResult to a Long object.
      Returns:
        the GPathResult, converted to a `Long`

    - #### toFloat

          public java.lang.Float toFloat()

      Converts the text of this GPathResult to a Float object.
      Returns:
        the GPathResult, converted to a `Float`

    - #### toDouble

          public java.lang.Double toDouble()

      Converts the text of this GPathResult to a Double object.
      Returns:
        the GPathResult, converted to a `Double`

    - #### toBigDecimal

          public java.math.BigDecimal toBigDecimal()

      Converts the text of this GPathResult to a BigDecimal object.
      Returns:
        the GPathResult, converted to a `BigDecimal`

    - #### toBigInteger

          public java.math.BigInteger toBigInteger()

      Converts the text of this GPathResult to a BigInteger object.
      Returns:
        the GPathResult, converted to a `BigInteger`