[ 
https://issues.apache.org/jira/browse/GROOVY-8206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16025867#comment-16025867
 ] 

Manish Yadav commented on GROOVY-8206:
--------------------------------------

Actually this was just a test code to demonstrate the replication in a easy way.
Our actually use case is to create a clone of a big Node object(having many 
children and grandchildren so on) and partially modify it with different config.

We don't want to modify the actual node object since it is shared in business 
layer across multiple threads and modify operation won't be atomic.
Making a clone and then replacing the shared node in atomic way works in this 
case. 

> Groovy clone node with parent
> -----------------------------
>
>                 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 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}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to