BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ModuleImpl.java
1 /*
2  * Copyright (c) 2014, 2015 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
9 package org.opendaylight.yangtools.yang.parser.builder.impl;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12 import com.google.common.collect.ImmutableList;
13 import com.google.common.collect.ImmutableSet;
14 import java.net.URI;
15 import java.util.Collections;
16 import java.util.Date;
17 import java.util.List;
18 import java.util.NavigableSet;
19 import java.util.Objects;
20 import java.util.Set;
21 import java.util.TreeSet;
22 import org.opendaylight.yangtools.concepts.Immutable;
23 import org.opendaylight.yangtools.yang.common.QNameModule;
24 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
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.IdentitySchemaNode;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
31 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
32 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
33 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
34 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
35 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
36 import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
37
38 /**
39  * @deprecated Pre-Beryllium implementation, scheduled for removal.
40  */
41 @Deprecated
42 public final class ModuleImpl extends AbstractDocumentedDataNodeContainer implements Module, Immutable {
43
44     private final QNameModule qnameModule;
45     private final String name;
46     private final String sourcePath;
47     private final String prefix;
48     private final String yangVersion;
49     private final String organization;
50     private final String contact;
51     private final Set<ModuleImport> imports;
52     private final Set<Module> submodules;
53     private final Set<FeatureDefinition> features;
54     private final Set<NotificationDefinition> notifications;
55     private final Set<AugmentationSchema> augmentations;
56     private final Set<RpcDefinition> rpcs;
57     private final Set<Deviation> deviations;
58     private final List<ExtensionDefinition> extensionNodes;
59     private final Set<IdentitySchemaNode> identities;
60     private final List<UnknownSchemaNode> unknownNodes;
61     private final String source;
62
63     /**
64      *
65      *
66      * <b>Note</b>Constructor has intentionality limited visibility to package, since
67      * this class should be only instantiated via builders.
68      *
69      * @param name
70      * @param sourcePath
71      * @param builder
72      */
73     ModuleImpl(final String name, final String sourcePath, final ModuleBuilder builder) {
74         super(builder);
75         this.name = checkNotNull(name, "Missing name");
76         this.sourcePath = sourcePath; //TODO: can this be nullable?
77         this.imports = ImmutableSet.<ModuleImport> copyOf(builder.imports.values());
78         this.submodules = ImmutableSet.<Module> copyOf(builder.submodules);
79         this.prefix = builder.getPrefix();
80
81         this.qnameModule = QNameModule.create(builder.getNamespace(),
82                 builder.getRevision() == null ? null : new Date(builder.getRevision().getTime())).intern();
83         this.yangVersion = builder.getYangVersion();
84         this.organization = builder.getOrganization();
85         this.contact = builder.getContact();
86         this.features = toImmutableSortedSet(builder.getFeatures());
87         this.notifications = toImmutableSortedSet(builder.getNotifications());
88         this.augmentations = ImmutableSet.copyOf(builder.getAugments());
89         this.rpcs = toImmutableSortedSet(builder.getRpcs());
90         this.deviations = ImmutableSet.copyOf(builder.getDeviations());
91         this.extensionNodes = ImmutableList.copyOf(builder.getExtensions());
92         this.identities = ImmutableSet.copyOf(builder.getIdentities());
93         this.unknownNodes = ImmutableList.copyOf(builder.getExtensionInstances());
94         this.source = checkNotNull(builder.getSource(), "Missing source");
95
96     }
97
98     @Override
99     public String getModuleSourcePath() {
100         return sourcePath;
101     }
102
103     @Override
104     public URI getNamespace() {
105         return qnameModule.getNamespace();
106     }
107
108     @Override
109     public String getName() {
110         return name;
111     }
112
113     @Override
114     public Date getRevision() {
115         return qnameModule.getRevision();
116     }
117
118     @Override
119     public String getPrefix() {
120         return prefix;
121     }
122
123     @Override
124     public String getYangVersion() {
125         return yangVersion;
126     }
127
128     @Override
129     public String getOrganization() {
130         return organization;
131     }
132
133     @Override
134     public String getContact() {
135         return contact;
136     }
137
138     @Override
139     public Set<ModuleImport> getImports() {
140         return imports;
141     }
142
143     @Override
144     public Set<Module> getSubmodules() {
145         return submodules;
146     }
147
148     @Override
149     public Set<FeatureDefinition> getFeatures() {
150         return features;
151     }
152
153     @Override
154     public Set<NotificationDefinition> getNotifications() {
155         return notifications;
156     }
157
158     @Override
159     public Set<AugmentationSchema> getAugmentations() {
160         return augmentations;
161     }
162
163     @Override
164     public Set<RpcDefinition> getRpcs() {
165         return rpcs;
166     }
167
168     @Override
169     public Set<Deviation> getDeviations() {
170         return deviations;
171     }
172
173     @Override
174     public List<ExtensionDefinition> getExtensionSchemaNodes() {
175         return extensionNodes;
176     }
177
178     @Override
179     public Set<IdentitySchemaNode> getIdentities() {
180         return identities;
181     }
182
183     @Override
184     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
185         return unknownNodes;
186     }
187
188     @Override
189     public String getSource() {
190         return source;
191     }
192
193     @Override
194     public int hashCode() {
195         final int prime = 31;
196         int result = 1;
197         result = prime * result + Objects.hashCode(name);
198         result = prime * result + Objects.hashCode(yangVersion);
199         result = prime * result + qnameModule.hashCode();
200         return result;
201     }
202
203     @Override
204     public boolean equals(final Object obj) {
205         if (this == obj) {
206             return true;
207         }
208         if (obj == null) {
209             return false;
210         }
211         if (getClass() != obj.getClass()) {
212             return false;
213         }
214         ModuleImpl other = (ModuleImpl) obj;
215         if (name == null) {
216             if (other.name != null) {
217                 return false;
218             }
219         } else if (!name.equals(other.name)) {
220             return false;
221         }
222         if (!qnameModule.equals(other.qnameModule)) {
223             return false;
224         }
225         if (yangVersion == null) {
226             if (other.yangVersion != null) {
227                 return false;
228             }
229         } else if (!yangVersion.equals(other.yangVersion)) {
230             return false;
231         }
232         return true;
233     }
234
235     private static <T extends SchemaNode> Set<T> toImmutableSortedSet(final Set<T> original) {
236         NavigableSet<T> sorted = new TreeSet<>(Comparators.SCHEMA_NODE_COMP);
237         sorted.addAll(original);
238         return Collections.unmodifiableSet(sorted);
239     }
240
241     @Override
242     public String toString() {
243         StringBuilder sb = new StringBuilder(ModuleImpl.class.getSimpleName());
244         sb.append("[");
245         sb.append("name=").append(name);
246         sb.append(", namespace=").append(getNamespace());
247         sb.append(", revision=").append(getRevision());
248         sb.append(", prefix=").append(prefix);
249         sb.append(", yangVersion=").append(yangVersion);
250         sb.append("]");
251         return sb.toString();
252     }
253
254     @Override
255     public QNameModule getQNameModule() {
256         return qnameModule;
257     }
258 }