Convert anyxml nodes lazily
[netconf.git] / restconf / restconf-nb-bierman02 / src / main / java / org / opendaylight / netconf / sal / restconf / impl / FakeRestconfModule.java
1 /*
2  * Copyright (c) 2016 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.restconf.impl;
9
10 import com.google.common.collect.Collections2;
11 import com.google.common.collect.ImmutableList;
12 import com.google.common.collect.ImmutableSet;
13 import java.net.URI;
14 import java.util.Collection;
15 import java.util.List;
16 import java.util.Optional;
17 import java.util.Set;
18 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
19 import org.opendaylight.yangtools.concepts.SemVer;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.common.QNameModule;
22 import org.opendaylight.yangtools.yang.common.Revision;
23 import org.opendaylight.yangtools.yang.common.YangVersion;
24 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
25 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
26 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
27 import org.opendaylight.yangtools.yang.model.api.Deviation;
28 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
29 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
30 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
31 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
32 import org.opendaylight.yangtools.yang.model.api.Module;
33 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
34 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
35 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
36 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
37 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
38 import org.opendaylight.yangtools.yang.model.api.UsesNode;
39
40 /**
41  * Special case only use by GET restconf/operations (since moment of old Yang
42  * parser and old yang model API removal) to build and use fake module to create
43  * new schema context.
44  */
45 final class FakeRestconfModule implements Module {
46
47     static final QNameModule QNAME = QNameModule.create(URI.create("urn:ietf:params:xml:ns:yang:ietf-restconf"),
48         Revision.of("2016-06-28")).intern();
49
50     private final Collection<DataSchemaNode> children;
51     private final ImmutableSet<ModuleImport> imports;
52
53     /**
54      * Instantiate a new fake module.
55      *
56      * @param neededModules needed import statements
57      * @param child fake child container
58      */
59     FakeRestconfModule(final Collection<Module> neededModules, final ContainerSchemaNode child) {
60         this.children = ImmutableList.of(child);
61         this.imports = ImmutableSet.copyOf(Collections2.transform(neededModules, FakeModuleImport::new));
62     }
63
64     @Override
65     public Set<TypeDefinition<?>> getTypeDefinitions() {
66         throw new UnsupportedOperationException("Not supported operations.");
67     }
68
69     @Override
70     public Collection<DataSchemaNode> getChildNodes() {
71         return this.children;
72     }
73
74     @Override
75     public Set<GroupingDefinition> getGroupings() {
76         throw new UnsupportedOperationException("Not supported operations.");
77     }
78
79     @Override
80     public Optional<DataSchemaNode> findDataChildByName(final QName name) {
81         for (final DataSchemaNode node : this.children) {
82             if (node.getQName().equals(name)) {
83                 return Optional.of(node);
84             }
85         }
86         throw new RestconfDocumentedException(name + " is not in child of " + FakeRestconfModule.QNAME);
87     }
88
89     @Override
90     public Set<UsesNode> getUses() {
91         throw new UnsupportedOperationException("Not supported operations.");
92     }
93
94     @Override
95     public QNameModule getQNameModule() {
96         return QNAME;
97     }
98
99     @Override
100     public String getName() {
101         return "ietf-restconf";
102     }
103
104     @Override
105     public URI getNamespace() {
106         return QNAME.getNamespace();
107     }
108
109     @Override
110     public Optional<Revision> getRevision() {
111         return QNAME.getRevision();
112     }
113
114     @Override
115     public String getPrefix() {
116         return "restconf";
117     }
118
119     @Override
120     public YangVersion getYangVersion() {
121         return YangVersion.VERSION_1_1;
122     }
123
124     @Override
125     public Optional<String> getDescription() {
126         throw new UnsupportedOperationException("Not supported operations.");
127     }
128
129     @Override
130     public Optional<String> getReference() {
131         throw new UnsupportedOperationException("Not supported operations.");
132     }
133
134     @Override
135     public Optional<String> getOrganization() {
136         throw new UnsupportedOperationException("Not supported operations.");
137     }
138
139     @Override
140     public Optional<String> getContact() {
141         throw new UnsupportedOperationException("Not supported operations.");
142     }
143
144     @Override
145     public Set<ModuleImport> getImports() {
146         return imports;
147     }
148
149     @Override
150     public Set<Module> getSubmodules() {
151         return ImmutableSet.of();
152     }
153
154     @Override
155     public Set<FeatureDefinition> getFeatures() {
156         return ImmutableSet.of();
157     }
158
159     @Override
160     public Set<NotificationDefinition> getNotifications() {
161         return ImmutableSet.of();
162     }
163
164     @Override
165     public Set<AugmentationSchemaNode> getAugmentations() {
166         return ImmutableSet.of();
167     }
168
169     @Override
170     public Set<RpcDefinition> getRpcs() {
171         return ImmutableSet.of();
172     }
173
174     @Override
175     public Set<Deviation> getDeviations() {
176         return ImmutableSet.of();
177     }
178
179     @Override
180     public Set<IdentitySchemaNode> getIdentities() {
181         return ImmutableSet.of();
182     }
183
184     @Override
185     public List<ExtensionDefinition> getExtensionSchemaNodes() {
186         return ImmutableList.of();
187     }
188
189     @Override
190     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
191         return ImmutableList.of();
192     }
193
194     @Override
195     public Optional<SemVer> getSemanticVersion() {
196         throw new UnsupportedOperationException("Not supported operations.");
197     }
198 }