1 package org.opendaylight.controller.sal.restconf.impl;
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.Collections;
11 import org.opendaylight.yangtools.yang.common.QName;
12 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
13 import org.opendaylight.yangtools.yang.data.api.ModifyAction;
14 import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode;
15 import org.opendaylight.yangtools.yang.data.api.Node;
16 import org.opendaylight.yangtools.yang.data.api.SimpleNode;
17 import org.opendaylight.yangtools.yang.data.impl.NodeFactory;
19 import com.google.common.base.Preconditions;
21 public final class CompositeNodeWrapper implements NodeWrapper<CompositeNode>, CompositeNode {
23 private MutableCompositeNode compositeNode;
25 private String localName;
26 private URI namespace;
28 private List<NodeWrapper<?>> values = new ArrayList<>();
30 public CompositeNodeWrapper(String localName) {
31 this.localName = Preconditions.checkNotNull(localName);
34 public CompositeNodeWrapper(URI namespace, String localName) {
36 this.namespace = namespace;
40 public void setQname(QName name) {
41 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
46 public String getLocalName() {
47 if (compositeNode != null) {
48 return compositeNode.getNodeType().getLocalName();
54 public URI getNamespace() {
55 if (compositeNode != null) {
56 return compositeNode.getNodeType().getNamespace();
62 public void setNamespace(URI namespace) {
63 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
64 this.namespace = namespace;
67 public void addValue(NodeWrapper<?> value) {
68 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
72 public void removeValue(NodeWrapper<CompositeNode> value) {
73 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
77 public List<NodeWrapper<?>> getValues() {
78 Preconditions.checkState(compositeNode == null, "Data can be inconsistent.");
79 return Collections.unmodifiableList(values);
83 public CompositeNode unwrap(CompositeNode parent) {
84 if (compositeNode == null) {
86 Preconditions.checkNotNull(namespace);
87 name = new QName(namespace, localName);
89 compositeNode = NodeFactory.createMutableCompositeNode(name, parent, new ArrayList<Node<?>>(), null, null);
91 List<Node<?>> nodeValues = new ArrayList<>();
92 for (NodeWrapper<?> nodeWrapper : values) {
93 nodeValues.add(nodeWrapper.unwrap(compositeNode));
95 compositeNode.setValue(nodeValues);
102 return compositeNode;
106 public QName getNodeType() {
107 return unwrap(null).getNodeType();
111 public CompositeNode getParent() {
112 return unwrap(null).getParent();
116 public List<Node<?>> getValue() {
117 return unwrap(null).getValue();
121 public ModifyAction getModificationAction() {
122 return unwrap(null).getModificationAction();
126 public List<Node<?>> getChildren() {
127 return unwrap(null).getChildren();
131 public List<CompositeNode> getCompositesByName(QName children) {
132 return unwrap(null).getCompositesByName(children);
136 public List<CompositeNode> getCompositesByName(String children) {
137 return unwrap(null).getCompositesByName(children);
141 public List<SimpleNode<?>> getSimpleNodesByName(QName children) {
142 return unwrap(null).getSimpleNodesByName(children);
146 public List<SimpleNode<?>> getSimpleNodesByName(String children) {
147 return unwrap(null).getSimpleNodesByName(children);
151 public CompositeNode getFirstCompositeByName(QName container) {
152 return unwrap(null).getFirstCompositeByName(container);
156 public SimpleNode<?> getFirstSimpleByName(QName leaf) {
157 return unwrap(null).getFirstSimpleByName(leaf);
161 public MutableCompositeNode asMutable() {
162 return unwrap(null).asMutable();
166 public QName getKey() {
167 return unwrap(null).getKey();
171 public List<Node<?>> setValue(List<Node<?>> value) {
172 return unwrap(null).setValue(value);
177 return unwrap(null).size();
181 public boolean isEmpty() {
182 return unwrap(null).isEmpty();
186 public boolean containsKey(Object key) {
187 return unwrap(null).containsKey(key);
191 public boolean containsValue(Object value) {
192 return unwrap(null).containsValue(value);
196 public List<Node<?>> get(Object key) {
197 return unwrap(null).get(key);
201 public List<Node<?>> put(QName key, List<Node<?>> value) {
202 return unwrap(null).put(key, value);
206 public List<Node<?>> remove(Object key) {
207 return unwrap(null).remove(key);
211 public void putAll(Map<? extends QName, ? extends List<Node<?>>> m) {
212 unwrap(null).putAll(m);
216 public void clear() {
217 unwrap(null).clear();
221 public Set<QName> keySet() {
222 return unwrap(null).keySet();
226 public Collection<List<Node<?>>> values() {
227 return unwrap(null).values();
231 public Set<java.util.Map.Entry<QName, List<Node<?>>>> entrySet() {
232 return unwrap(null).entrySet();