04b8674727ced600871d3e9c44b05657c95d6658
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / sal / binding / dom / serializer / impl / IntermediateMapping.xtend
1 package org.opendaylight.controller.sal.binding.dom.serializer.impl
2
3 import org.opendaylight.yangtools.yang.data.api.Node
4 import java.util.Map
5 import org.opendaylight.yangtools.yang.common.QName
6 import java.util.List
7 import java.util.ArrayList
8 import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl
9 import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl
10 import com.google.common.base.Preconditions
11
12 class IntermediateMapping {
13     
14     
15     
16     static def Node<?> toNode(Map<?,?> map) {
17         if(map instanceof Node<?>) {
18             return map as Node<?>;
19         }
20         val nodeMap = map as Map<QName,Object>;
21         Preconditions.checkArgument(map.size == 1);
22         val elem = nodeMap.entrySet.iterator.next;
23         val qname = elem.key;
24         val value = elem.value;
25         toNodeImpl(qname, value);
26     }
27
28
29     static def dispatch Node<?> toNodeImpl(QName name, List<?> objects) {
30         val values = new ArrayList<Node<?>>(objects.size);
31         for (obj : objects) {
32             if(obj instanceof Node<?>) {
33                 values.add(obj as Node<?>);
34             } else if(obj instanceof Map<?,?>) {
35                 values.add(toNode(obj as Map<?,?>));
36             }
37         }
38         return new CompositeNodeTOImpl(name, null, values);
39     }
40
41     static def dispatch Node<?> toNodeImpl(QName name, Map<QName, Object> object) {
42         throw new UnsupportedOperationException("Unsupported node hierarchy.");
43     }
44
45     static def dispatch Node<?> toNodeImpl(QName name, Object object) {
46         return new SimpleNodeTOImpl(name, null, object);
47     } 
48 }