Added Json to CompositeNode translation
[controller.git] / opendaylight / md-sal / sal-rest-connector / src / main / java / org / opendaylight / controller / sal / restconf / impl / SimpleNodeWrapper.java
1 package org.opendaylight.controller.sal.restconf.impl;
2
3 import java.net.URI;
4
5 import org.opendaylight.yangtools.yang.common.QName;
6 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
7 import org.opendaylight.yangtools.yang.data.api.ModifyAction;
8 import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode;
9 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
10 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
11
12 import com.google.common.base.Preconditions;
13
14 public final class SimpleNodeWrapper implements NodeWrapper<SimpleNode<?>>, SimpleNode<String> {
15     
16     private SimpleNode<String> simpleNode;
17     
18     private String localName;
19     private String value;
20     private URI namespace;
21
22     public SimpleNodeWrapper(String localName, String value) {
23         this.localName = Preconditions.checkNotNull(localName);
24         this.value = value;
25     }
26     
27     @Override
28     public String getLocalName() {
29         if (simpleNode != null) {
30             return simpleNode.getNodeType().getLocalName();
31         }
32         return localName;
33     }
34     
35     @Override
36     public URI getNamespace() {
37         if (simpleNode != null) {
38             return simpleNode.getNodeType().getNamespace();
39         }
40         return namespace;
41     }
42
43     @Override
44     public void setNamespace(URI namespace) {
45         Preconditions.checkState(simpleNode == null, "Cannot change the object, due to data inconsistencies.");
46         this.namespace = namespace;
47     }
48
49     @Override
50     public SimpleNode<String> unwrap(CompositeNode parent) {
51         if (simpleNode == null) {
52             Preconditions.checkNotNull(namespace);
53             simpleNode = NodeFactory.createImmutableSimpleNode(new QName(namespace, localName), parent, value);
54             
55             value = null;
56             namespace = null;
57             localName = null;
58         }
59         return simpleNode;
60     }
61
62     @Override
63     public QName getNodeType() {
64         return unwrap(null).getNodeType();
65     }
66
67     @Override
68     public CompositeNode getParent() {
69         return unwrap(null).getParent();
70     }
71
72     @Override
73     public String getValue() {
74         return unwrap(null).getValue();
75     }
76
77     @Override
78     public ModifyAction getModificationAction() {
79         return unwrap(null).getModificationAction();
80     }
81
82     @Override
83     public MutableSimpleNode<String> asMutable() {
84         return unwrap(null).asMutable();
85     }
86
87     @Override
88     public QName getKey() {
89         return unwrap(null).getKey();
90     }
91
92     @Override
93     public String setValue(String value) {
94         return unwrap(null).setValue(value);
95     }
96
97
98 }