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;
27 private List<NodeWrapper<?>> values = new ArrayList<>();
29 public CompositeNodeWrapper(String localName) {
30 this.localName = Preconditions.checkNotNull(localName);
34 public String getLocalName() {
35 if (compositeNode != null) {
36 return compositeNode.getNodeType().getLocalName();
42 public URI getNamespace() {
43 if (compositeNode != null) {
44 return compositeNode.getNodeType().getNamespace();
50 public void setNamespace(URI namespace) {
51 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
52 this.namespace = namespace;
55 public void addValue(NodeWrapper<?> value) {
56 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
60 public void removeValue(NodeWrapper<CompositeNode> value) {
61 Preconditions.checkState(compositeNode == null, "Cannot change the object, due to data inconsistencies.");
65 public List<NodeWrapper<?>> getValues() {
66 Preconditions.checkState(compositeNode == null, "Data can be inconsistent.");
67 return Collections.unmodifiableList(values);
71 public CompositeNode unwrap(CompositeNode parent) {
72 if (compositeNode == null) {
73 Preconditions.checkNotNull(namespace);
74 compositeNode = NodeFactory.createMutableCompositeNode(new QName(namespace, localName),
75 parent, new ArrayList<Node<?>>(), ModifyAction.CREATE, null);
77 List<Node<?>> nodeValues = new ArrayList<>();
78 for (NodeWrapper<?> nodeWrapper : values) {
79 nodeValues.add(nodeWrapper.unwrap(compositeNode));
81 compositeNode.setValue(nodeValues);
91 public QName getNodeType() {
92 return unwrap(null).getNodeType();
96 public CompositeNode getParent() {
97 return unwrap(null).getParent();
101 public List<Node<?>> getValue() {
102 return unwrap(null).getValue();
106 public ModifyAction getModificationAction() {
107 return unwrap(null).getModificationAction();
111 public List<Node<?>> getChildren() {
112 return unwrap(null).getChildren();
116 public List<CompositeNode> getCompositesByName(QName children) {
117 return unwrap(null).getCompositesByName(children);
121 public List<CompositeNode> getCompositesByName(String children) {
122 return unwrap(null).getCompositesByName(children);
126 public List<SimpleNode<?>> getSimpleNodesByName(QName children) {
127 return unwrap(null).getSimpleNodesByName(children);
131 public List<SimpleNode<?>> getSimpleNodesByName(String children) {
132 return unwrap(null).getSimpleNodesByName(children);
136 public CompositeNode getFirstCompositeByName(QName container) {
137 return unwrap(null).getFirstCompositeByName(container);
141 public SimpleNode<?> getFirstSimpleByName(QName leaf) {
142 return unwrap(null).getFirstSimpleByName(leaf);
146 public MutableCompositeNode asMutable() {
147 return unwrap(null).asMutable();
151 public QName getKey() {
152 return unwrap(null).getKey();
156 public List<Node<?>> setValue(List<Node<?>> value) {
157 return unwrap(null).setValue(value);
162 return unwrap(null).size();
166 public boolean isEmpty() {
167 return unwrap(null).isEmpty();
171 public boolean containsKey(Object key) {
172 return unwrap(null).containsKey(key);
176 public boolean containsValue(Object value) {
177 return unwrap(null).containsValue(value);
181 public List<Node<?>> get(Object key) {
182 return unwrap(null).get(key);
186 public List<Node<?>> put(QName key, List<Node<?>> value) {
187 return unwrap(null).put(key, value);
191 public List<Node<?>> remove(Object key) {
192 return unwrap(null).remove(key);
196 public void putAll(Map<? extends QName, ? extends List<Node<?>>> m) {
197 unwrap(null).putAll(m);
201 public void clear() {
202 unwrap(null).clear();
206 public Set<QName> keySet() {
207 return unwrap(null).keySet();
211 public Collection<List<Node<?>>> values() {
212 return unwrap(null).values();
216 public Set<java.util.Map.Entry<QName, List<Node<?>>>> entrySet() {
217 return unwrap(null).entrySet();