Package groovy.util
Class Node
java.lang.Object
groovy.util.Node
- All Implemented Interfaces:
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" }}
- Author:
- James Strachan, Paul King
- See Also:
-
Constructor Summary
ConstructorDescriptionCreates a new Node namedname
and if a parent is supplied, adds the newly created node as a child of the parent.Creates a new Node namedname
with valuevalue
and if a parent is supplied, adds the newly created node as a child of the parent.Creates a new Node namedname
with attributes specified in theattributes
Map.Creates a new Node namedname
with valuevalue
and with attributes specified in theattributes
Map. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Appends a child to the current node.appendNode
(Object name) Creates a new node as a child of the current node.appendNode
(Object name, Object value) Creates a new node as a child of the current node.appendNode
(Object name, Map attributes) Creates a new node as a child of the current node.appendNode
(Object name, Map attributes, Object value) Creates a new node as a child of the current node.Provides lookup of attributes by key.Returns aMap
of the attributes of the node or an emptyMap
if the node does not have any attributes.Provides a collection of all the nodes in the tree using a breadth-first traversal.children()
Returns aList
of the nodes children.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.Provides a collection of all the nodes in the tree using a depth first traversal.Provides lookup of elements by non-namespaced nameProvides lookup of elements by QName.iterator()
Returns anIterator
of the children of the node.Returns the list of any direct String nodes of this node.name()
Returns anObject
representing the name of the node.parent()
Returns the parent of the node.void
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
Removes a child of the current node.Replaces the current node with nodes defined using builder-style notation via a Closure.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
Adds or replaces the parent of the node.void
Adds or replaces the value of the node.text()
Returns the textual representation of the current node and all its child nodes.toString()
value()
Returns anObject
representing the value of the node.
-
Constructor Details
-
Node
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
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
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
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 Details
-
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
Appends a child to the current node.- Parameters:
child
- the child to append- Returns:
true
-
remove
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
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
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
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
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
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
Replaces the current node with the supplied node.- Parameters:
n
- the new Node- Returns:
- the original now replaced node
-
plus
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
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
Returns the textual representation of the current node and all its child nodes.- Returns:
- the text value of the node including child text
-
iterator
Returns anIterator
of the children of the node.- Returns:
- the iterator of the nodes children
-
children
Returns aList
of the nodes children.- Returns:
- the nodes children
-
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
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
Returns anObject
representing the name of the node.- Returns:
- the name or
null
if name is empty
-
value
Returns anObject
representing the value of the node.- Returns:
- the value or
null
if value is empty
-
setValue
Adds or replaces the value of the node.- Parameters:
value
- the new value of the node
-
parent
Returns the parent of the node.- Returns:
- the parent or
null
for the root node
-
setParent
Adds or replaces the parent of the node.- Parameters:
parent
- the new parent of the node
-
get
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
Provides lookup of elements by QName.- Parameters:
name
- the QName of interest- Returns:
- the nodes matching name
-
depthFirst
Provides a collection of all the nodes in the tree using a depth first traversal.- Returns:
- the list of (depth-first) ordered nodes
-
breadthFirst
Provides a collection of all the nodes in the tree using a breadth-first traversal.- Returns:
- the list of (breadth-first) ordered nodes
-
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
-
print
Writes the node to the specifiedPrintWriter
.- Parameters:
out
- the writer receiving the output
-