Instance identifier support
[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<Object> {
15     
16     private SimpleNode<Object> simpleNode;
17     
18     private String localName;
19     private Object value;
20     private URI namespace;
21     private QName name;
22
23     public SimpleNodeWrapper(String localName, Object value) {
24         this.localName = Preconditions.checkNotNull(localName);
25         this.value = value;
26     }
27     
28     public SimpleNodeWrapper(URI namespace, String localName, Object value) {
29         this(localName, value);
30         this.namespace = namespace;
31     }
32     
33     @Override
34     public void setQname(QName name) {
35         Preconditions.checkState(simpleNode == null, "Cannot change the object, due to data inconsistencies.");
36         this.name = name;
37     }
38     
39     @Override
40     public QName getQname() {
41         return name;
42     }
43     
44     @Override
45     public String getLocalName() {
46         if (simpleNode != null) {
47             return simpleNode.getNodeType().getLocalName();
48         }
49         return localName;
50     }
51     
52     @Override
53     public URI getNamespace() {
54         if (simpleNode != null) {
55             return simpleNode.getNodeType().getNamespace();
56         }
57         return namespace;
58     }
59
60     @Override
61     public void setNamespace(URI namespace) {
62         Preconditions.checkState(simpleNode == null, "Cannot change the object, due to data inconsistencies.");
63         this.namespace = namespace;
64     }
65
66     @Override
67     public boolean isChangeAllowed() {
68         return simpleNode == null ? true : false;
69     }
70
71     @Override
72     public SimpleNode<Object> unwrap() {
73         if (simpleNode == null) {
74             if (name == null) {
75                 Preconditions.checkNotNull(namespace);
76                 name = new QName(namespace, localName);
77             }
78             simpleNode = NodeFactory.createImmutableSimpleNode(name, null, value);
79             
80             value = null;
81             namespace = null;
82             localName = null;
83             name = null;
84         }
85         return (SimpleNode<Object>) simpleNode;
86     }
87
88     @Override
89     public QName getNodeType() {
90         return unwrap().getNodeType();
91     }
92
93     @Override
94     public CompositeNode getParent() {
95         return unwrap().getParent();
96     }
97
98     @Override
99     public Object getValue() {
100         return unwrap().getValue();
101     }
102
103     @Override
104     public ModifyAction getModificationAction() {
105         return unwrap().getModificationAction();
106     }
107
108     @Override
109     public MutableSimpleNode<Object> asMutable() {
110         return unwrap().asMutable();
111     }
112
113     @Override
114     public QName getKey() {
115         return unwrap().getKey();
116     }
117
118     @Override
119     public Object setValue(Object value) {
120         return unwrap().setValue(value);
121     }
122     
123
124
125 }