[
https://issues.apache.org/jira/browse/GROOVY-8206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Manish Yadav updated GROOVY-8206:
---------------------------------
Description:
As of now groovy supports clone node feature without storing parent
reference(i.e. the new clone nodes) in child nodes.
We can add following custom methods in some util class to make cloning more
advanced :
1:
{code}
private Node cloneNode(Node node, Node parentNode) {
Object newValue = node.value()
Node clonedNode = new Node(null, node.name(), new
HashMap(node.attributes()), newValue)
if (newValue instanceof NodeList) {
NodeList nodes = (NodeList) newValue
newValue = cloneNodeList(nodes, clonedNode)
}
clonedNode.setValue(newValue)
clonedNode.setParent(parentNode)
return clonedNode
}
{code}
2:
{code}
private NodeList cloneNodeList(NodeList nodeList, Node parentNode) {
NodeList result = new NodeList(nodeList.size())
for (int i = 0; i < nodeList.size(); i++) {
Object next = nodeList.get(i)
if (next instanceof Node) {
result.add(cloneNode((Node) next, parentNode))
} else {
result.add(next)
}
}
return result
}
{code}
was:
As of now groovy supports clone node feature without cloning parents.
We can add following custom methods in some util class to make cloning more
advanced :
1:
{code}
private Node cloneNode(Node node, Node parentNode) {
Object newValue = node.value()
Node clonedNode = new Node(null, node.name(), new
HashMap(node.attributes()), newValue)
if (newValue instanceof NodeList) {
NodeList nodes = (NodeList) newValue
newValue = cloneNodeList(nodes, clonedNode)
}
clonedNode.setValue(newValue)
clonedNode.setParent(parentNode)
return clonedNode
}
{code}
2:
{code}
private NodeList cloneNodeList(NodeList nodeList, Node parentNode) {
NodeList result = new NodeList(nodeList.size())
for (int i = 0; i < nodeList.size(); i++) {
Object next = nodeList.get(i)
if (next instanceof Node) {
result.add(cloneNode((Node) next, parentNode))
} else {
result.add(next)
}
}
return result
}
{code}
> Groovy clone node with new parent reference in child nodes
> ----------------------------------------------------------
>
> Key: GROOVY-8206
> URL: https://issues.apache.org/jira/browse/GROOVY-8206
> Project: Groovy
> Issue Type: Improvement
> Components: groovy-jdk
> Reporter: Manish Yadav
>
> As of now groovy supports clone node feature without storing parent
> reference(i.e. the new clone nodes) in child nodes.
> We can add following custom methods in some util class to make cloning more
> advanced :
> 1:
> {code}
> private Node cloneNode(Node node, Node parentNode) {
> Object newValue = node.value()
> Node clonedNode = new Node(null, node.name(), new
> HashMap(node.attributes()), newValue)
> if (newValue instanceof NodeList) {
> NodeList nodes = (NodeList) newValue
> newValue = cloneNodeList(nodes, clonedNode)
> }
> clonedNode.setValue(newValue)
> clonedNode.setParent(parentNode)
> return clonedNode
> }
> {code}
> 2:
> {code}
> private NodeList cloneNodeList(NodeList nodeList, Node parentNode) {
> NodeList result = new NodeList(nodeList.size())
> for (int i = 0; i < nodeList.size(); i++) {
> Object next = nodeList.get(i)
> if (next instanceof Node) {
> result.add(cloneNode((Node) next, parentNode))
> } else {
> result.add(next)
> }
> }
> return result
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)