2a0830658dc8d324eb04fd868ef51f744516f425
[netconf.git] / netconf / sal-netconf-connector / src / main / java / org / opendaylight / netconf / sal / connect / netconf / util / NodeContainerProxy.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netconf.sal.connect.netconf.util;
9
10 import com.google.common.base.Function;
11 import com.google.common.base.Preconditions;
12 import com.google.common.collect.Maps;
13 import com.google.common.collect.Sets;
14 import java.util.Collection;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Optional;
19 import java.util.Set;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
22 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
26 import org.opendaylight.yangtools.yang.model.api.MustDefinition;
27 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
28 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
29 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
30 import org.opendaylight.yangtools.yang.model.api.Status;
31 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
32 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
33 import org.opendaylight.yangtools.yang.model.api.UsesNode;
34
35 /**
36  * Simple proxy for container like schema nodes, where user provides a collection of children schema nodes.
37  */
38 public final class NodeContainerProxy implements ContainerSchemaNode {
39
40     private final Map<QName, DataSchemaNode> childNodes;
41     private final QName qualifiedName;
42     private final Set<AugmentationSchemaNode> availableAugmentations;
43
44     public NodeContainerProxy(final QName qualifiedName, final Map<QName, DataSchemaNode> childNodes,
45                               final Set<AugmentationSchemaNode> availableAugmentations) {
46         this.availableAugmentations = availableAugmentations;
47         this.childNodes = Preconditions.checkNotNull(childNodes, "childNodes");
48         this.qualifiedName = qualifiedName;
49     }
50
51     public NodeContainerProxy(final QName qualifiedName, final Collection<DataSchemaNode> childNodes) {
52         this(qualifiedName, asMap(childNodes), Collections.emptySet());
53     }
54
55     public NodeContainerProxy(final QName qualifiedName, final Collection<DataSchemaNode> childNodes,
56                               final Set<AugmentationSchemaNode> availableAugmentations) {
57         this(qualifiedName, asMap(childNodes), availableAugmentations);
58     }
59
60     private static Map<QName, DataSchemaNode> asMap(final Collection<DataSchemaNode> childNodes) {
61         return Maps.uniqueIndex(childNodes, (Function<DataSchemaNode, QName>) DataSchemaNode::getQName);
62     }
63
64     @Override
65     public Set<TypeDefinition<?>> getTypeDefinitions() {
66         return Collections.emptySet();
67     }
68
69     @Override
70     public Set<DataSchemaNode> getChildNodes() {
71         return Sets.newHashSet(childNodes.values());
72     }
73
74     @Override
75     public Set<GroupingDefinition> getGroupings() {
76         return Collections.emptySet();
77     }
78
79     @Override
80     public Optional<DataSchemaNode> findDataChildByName(final QName name) {
81         return Optional.ofNullable(childNodes.get(name));
82     }
83
84     @Override
85     public Set<UsesNode> getUses() {
86         return Collections.emptySet();
87     }
88
89     @Override
90     public boolean isPresenceContainer() {
91         throw new UnsupportedOperationException();
92     }
93
94     @Override
95     public Set<AugmentationSchemaNode> getAvailableAugmentations() {
96         return availableAugmentations;
97     }
98
99     @Override
100     public boolean isAugmenting() {
101         throw new UnsupportedOperationException();
102     }
103
104     @Override
105     public boolean isAddedByUses() {
106         throw new UnsupportedOperationException();
107     }
108
109     @Override
110     public boolean isConfiguration() {
111         throw new UnsupportedOperationException();
112     }
113
114     @Override
115     public QName getQName() {
116         return qualifiedName;
117     }
118
119     @Override
120     public SchemaPath getPath() {
121         throw new UnsupportedOperationException();
122     }
123
124     @Override
125     public Optional<String> getDescription() {
126         throw new UnsupportedOperationException();
127     }
128
129     @Override
130     public Optional<String> getReference() {
131         throw new UnsupportedOperationException();
132     }
133
134     @Override
135     public Status getStatus() {
136         throw new UnsupportedOperationException();
137     }
138
139     @Override
140     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
141         return Collections.emptyList();
142     }
143
144     @Override
145     public Set<NotificationDefinition> getNotifications() {
146         return Collections.emptySet();
147     }
148
149     @Override
150     public Set<ActionDefinition> getActions() {
151         return Collections.emptySet();
152     }
153
154     @Override
155     public Optional<RevisionAwareXPath> getWhenCondition() {
156         return Optional.empty();
157     }
158
159     @Override
160     public Collection<MustDefinition> getMustConstraints() {
161         return Collections.emptySet();
162     }
163 }