Package groovy.util
Class Node
- java.lang.Object
-
- groovy.util.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 namedname
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 namedname
with valuevalue
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 namedname
with attributes specified in theattributes
Map.Node(Node parent, Object name, Map attributes, Object value)
Creates a new Node namedname
with valuevalue
and with attributes specified in theattributes
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(Object name)
Creates a new node as a child of the current node.Node
appendNode(Object name, Object value)
Creates a new node as a child of the current node.Node
appendNode(Object name, Map attributes)
Creates a new node as a child of the current node.Node
appendNode(Object name, Map attributes, Object value)
Creates a new node as a child of the current node.Object
attribute(Object key)
Provides lookup of attributes by key.Map
attributes()
Returns aMap
of the attributes of the node or an emptyMap
if the node does not have any attributes.List
breadthFirst()
Provides a collection of all the nodes in the tree using a breadth-first preorder traversal.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(Map<String,Object> options, Closure c)
Calls the provided closure for all the nodes in the tree using a breadth-first traversal.List
children()
Returns aList
of the nodes children.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.List
depthFirst()
Provides a collection of all the nodes in the tree using a depth-first preorder traversal.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(Map<String,Object> options, Closure c)
Provides a collection of all the nodes in the tree using a depth-first traversal.Object
get(String key)
Provides lookup of elements by non-namespaced nameNodeList
getAt(QName name)
Provides lookup of elements by QName.NodeList
getAt(QName name)
Provides lookup of elements by QName.Iterator
iterator()
Returns anIterator
of the children of the node.List<String>
localText()
Returns the list of any direct String nodes of this node.Object
name()
Returns anObject
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(PrintWriter out)
Writes the node to the specifiedPrintWriter
.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, 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(Object value)
Adds or replaces the value of the node.String
text()
Returns the textual representation of the current node and all its child nodes.BigDecimal
toBigDecimal()
Converts the text of this GPathResult to a BigDecimal object.BigInteger
toBigInteger()
Converts the text of this GPathResult to a BigInteger object.Double
toDouble()
Converts the text of this GPathResult to a Double object.Float
toFloat()
Converts the text of this GPathResult to a Float object.Integer
toInteger()
Converts the text of this GPathResult to a Integer object.Long
toLong()
Converts the text of this GPathResult to a Long object.String
toString()
Object
value()
Returns anObject
representing the value of the node.
-
-
-
Constructor Detail
-
Node
public Node(Node parent, Object name)
Creates a new Node namedname
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 parentname
- the name of the node
-
Node
public Node(Node parent, Object name, Object value)
Creates a new Node namedname
with valuevalue
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 parentname
- the name of the nodevalue
- 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 namedname
with attributes specified in theattributes
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 parentname
- the name of the nodeattributes
- a Map of name-value pairs
-
Node
public Node(Node parent, Object name, Map attributes, Object value)
Creates a new Node namedname
with valuevalue
and with attributes specified in theattributes
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 parentname
- the name of the nodeattributes
- a Map of name-value pairsvalue
- 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.
-
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 nodeattributes
- 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 nodevalue
- 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 nodeattributes
- the attributes of the new nodevalue
- 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 metaclassnodeClass
- 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 anIterator
of the children of the node.- Returns:
- the iterator of the nodes children
-
children
public List children()
Returns aList
of the nodes children.- Returns:
- the nodes children
-
attributes
public Map attributes()
Returns aMap
of the attributes of the node or an emptyMap
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 anObject
representing the name of the node.- Returns:
- the name or
null
if name is empty
-
value
public Object value()
Returns anObject
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 optionsc
- 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 optionsc
- 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 specifiedPrintWriter
.- 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
-
-