SchemaContext extends ContainerSchemaNode
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / impl / SchemaContextImpl.java
1 /*
2  * Copyright (c) 2013 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.yangtools.yang.parser.impl;
9
10 import java.net.URI;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.Date;
14 import java.util.HashSet;
15 import java.util.LinkedHashSet;
16 import java.util.List;
17 import java.util.Set;
18
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
21 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
24 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
25 import org.opendaylight.yangtools.yang.model.api.Module;
26 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
27 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
28 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
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 import org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort;
35
36 final class SchemaContextImpl implements SchemaContext {
37     private final Set<Module> modules;
38
39     SchemaContextImpl(final Set<Module> modules) {
40         this.modules = modules;
41     }
42
43     @Override
44     public Set<DataSchemaNode> getDataDefinitions() {
45         final Set<DataSchemaNode> dataDefs = new HashSet<DataSchemaNode>();
46         for (Module m : modules) {
47             dataDefs.addAll(m.getChildNodes());
48         }
49         return dataDefs;
50     }
51
52     @Override
53     public Set<Module> getModules() {
54         List<Module> sorted = ModuleDependencySort.sort(modules.toArray(new Module[modules.size()]));
55         return new LinkedHashSet<Module>(sorted);
56     }
57
58     @Override
59     public Set<NotificationDefinition> getNotifications() {
60         final Set<NotificationDefinition> notifications = new HashSet<NotificationDefinition>();
61         for (Module m : modules) {
62             notifications.addAll(m.getNotifications());
63         }
64         return notifications;
65     }
66
67     @Override
68     public Set<RpcDefinition> getOperations() {
69         final Set<RpcDefinition> rpcs = new HashSet<RpcDefinition>();
70         for (Module m : modules) {
71             rpcs.addAll(m.getRpcs());
72         }
73         return rpcs;
74     }
75
76     @Override
77     public Set<ExtensionDefinition> getExtensions() {
78         final Set<ExtensionDefinition> extensions = new HashSet<ExtensionDefinition>();
79         for (Module m : modules) {
80             extensions.addAll(m.getExtensionSchemaNodes());
81         }
82         return extensions;
83     }
84
85     @Override
86     public Module findModuleByName(final String name, final Date revision) {
87         if (name != null) {
88             for (final Module module : modules) {
89                 if (revision == null) {
90                     if (module.getName().equals(name)) {
91                         return module;
92                     }
93                 } else if (module.getName().equals(name) && module.getRevision().equals(revision)) {
94                     return module;
95                 }
96             }
97         }
98         return null;
99     }
100
101     @Override
102     public Set<Module> findModuleByNamespace(final URI namespace) {
103         final Set<Module> ret = new HashSet<Module>();
104         if (namespace != null) {
105             for (final Module module : modules) {
106                 if (module.getNamespace().equals(namespace)) {
107                     ret.add(module);
108                 }
109             }
110         }
111         return ret;
112     }
113
114     @Override
115     public Module findModuleByNamespaceAndRevision(URI namespace, Date revision) {
116         if (namespace != null) {
117             for (final Module module : modules) {
118                 if (module.getNamespace().equals(namespace) && module.getRevision().equals(revision)) {
119                     return(module);
120                 }
121             }
122         }
123         return null;
124     }
125
126     @Override
127     public boolean isAugmenting() {
128         return false;
129     }
130
131     @Override
132     public boolean isAddedByUses() {
133         return false;
134     }
135
136     @Override
137     public boolean isConfiguration() {
138         return false;
139     }
140
141     @Override
142     public ConstraintDefinition getConstraints() {
143         return null;
144     }
145
146     @Override
147     public QName getQName() {
148         return SchemaContext.NAME;
149     }
150
151     @Override
152     public SchemaPath getPath() {
153         return null;
154     }
155
156     @Override
157     public String getDescription() {
158         return null;
159     }
160
161     @Override
162     public String getReference() {
163         return null;
164     }
165
166     @Override
167     public Status getStatus() {
168         return Status.CURRENT;
169     }
170
171     @Override
172     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
173         final List<UnknownSchemaNode> result = new ArrayList<>();
174         for (Module module : modules) {
175             result.addAll(module.getUnknownSchemaNodes());
176         }
177         return Collections.unmodifiableList(result);
178     }
179
180     @Override
181     public Set<TypeDefinition<?>> getTypeDefinitions() {
182         final Set<TypeDefinition<?>> result = new LinkedHashSet<>();
183         for (Module module : modules) {
184             result.addAll(module.getTypeDefinitions());
185         }
186         return Collections.unmodifiableSet(result);
187     }
188
189     @Override
190     public Set<DataSchemaNode> getChildNodes() {
191         final Set<DataSchemaNode> result = new LinkedHashSet<>();
192         for (Module module : modules) {
193             result.addAll(module.getChildNodes());
194         }
195         return Collections.unmodifiableSet(result);
196     }
197
198     @Override
199     public Set<GroupingDefinition> getGroupings() {
200         final Set<GroupingDefinition> result = new LinkedHashSet<>();
201         for (Module module : modules) {
202             result.addAll(module.getGroupings());
203         }
204         return Collections.unmodifiableSet(result);
205     }
206
207     @Override
208     public DataSchemaNode getDataChildByName(QName name) {
209         DataSchemaNode result = null;
210         for (Module module : modules) {
211             result = module.getDataChildByName(name);
212             if (result != null) {
213                 break;
214             }
215         }
216         return result;
217     }
218
219     @Override
220     public DataSchemaNode getDataChildByName(String name) {
221         DataSchemaNode result = null;
222         for (Module module : modules) {
223             result = module.getDataChildByName(name);
224             if (result != null) {
225                 break;
226             }
227         }
228         return result;
229     }
230
231     @Override
232     public Set<UsesNode> getUses() {
233         return Collections.emptySet();
234     }
235
236     @Override
237     public boolean isPresenceContainer() {
238         return false;
239     }
240
241     @Override
242     public Set<AugmentationSchema> getAvailableAugmentations() {
243         return Collections.emptySet();
244     }
245
246 }