Fixed merge of entries in mock data store
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / impl / DataUtils.xtend
1 package org.opendaylight.controller.sal.dom.broker.impl
2
3 import org.opendaylight.yangtools.yang.data.api.CompositeNode
4 import java.util.Map
5 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
6 import java.util.Map.Entry
7 import java.util.HashSet
8 import java.util.ArrayList
9 import org.opendaylight.yangtools.yang.data.api.Node
10 import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl
11
12 class DataUtils {
13
14     static def CompositeNode read(Map<InstanceIdentifier, CompositeNode> map, InstanceIdentifier path) {
15         val root = map.get(path);
16         val childs = map.getChilds(path);
17         if(root === null && childs.empty) {
18             return null;
19         }
20         
21         return merge(path, root, childs);
22     }
23
24     static def CompositeNode merge(InstanceIdentifier path, CompositeNode node,
25         HashSet<Entry<InstanceIdentifier, CompositeNode>> entries) {
26         val it = new ArrayList<Node<?>>();
27         val qname = path.path.last.nodeType;
28         if (node != null) {
29             addAll(node.children);
30         }
31         for (entry : entries) {
32             val nesting = entry.key.path.size - path.path.size;
33             if (nesting === 1) {
34                 add(entry.value);
35             }
36         }
37         return new CompositeNodeTOImpl(qname, null, it);
38     }
39
40     static def getChilds(Map<InstanceIdentifier, CompositeNode> map, InstanceIdentifier path) {
41         val it = new HashSet<Entry<InstanceIdentifier, CompositeNode>>();
42         for (entry : map.entrySet) {
43             if (path.contains(entry.key)) {
44                 add(entry);
45             }
46         }
47         return it;
48     }
49
50 }