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