1 package org.opendaylight.yangtools.yang.parser.builder.impl;
3 import com.google.common.base.Optional;
4 import com.google.common.collect.ImmutableList;
5 import com.google.common.collect.ImmutableSet;
7 import java.util.Collections;
11 import java.util.TreeSet;
12 import org.opendaylight.yangtools.concepts.Immutable;
13 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
14 import org.opendaylight.yangtools.yang.model.api.Deviation;
15 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
16 import org.opendaylight.yangtools.yang.model.api.FeatureDefinition;
17 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.Module;
19 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
20 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
21 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
22 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
24 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainer;
25 import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
27 public final class ModuleImpl extends AbstractDocumentedDataNodeContainer implements Module, Immutable {
29 private final URI namespace;
30 private final String name;
31 private final String sourcePath;
32 private final Optional<Date> revision;
33 private final String prefix;
34 private final String yangVersion;
35 private final String organization;
36 private final String contact;
37 private final Set<ModuleImport> imports;
38 private final Set<FeatureDefinition> features;
39 private final Set<NotificationDefinition> notifications;
40 private final Set<AugmentationSchema> augmentations;
41 private final Set<RpcDefinition> rpcs;
42 private final Set<Deviation> deviations;
43 private final List<ExtensionDefinition> extensionNodes;
44 private final Set<IdentitySchemaNode> identities;
45 private final List<UnknownSchemaNode> unknownNodes;
46 private final String source;
51 * <b>Note</b>Constructor has intentionality limited visibility to package, since
52 * this class should be only instantied via builders.
58 ModuleImpl(final String name, final String sourcePath, final ModuleBuilder builder) {
61 this.sourcePath = sourcePath;
62 this.imports = ImmutableSet.<ModuleImport> copyOf(builder.imports);
63 this.namespace = builder.getNamespace();
64 this.prefix = builder.getPrefix();
65 this.revision = builder.getRevision() == null ? Optional.<Date>absent():
66 Optional.of(new Date(builder.getRevision().getTime()));
67 this.yangVersion = builder.getYangVersion();
68 this.organization = builder.getOrganization();
69 this.contact = builder.getContact();
70 this.features = toImmutableSortedSet(builder.getFeatures());
71 this.notifications = toImmutableSortedSet(builder.getNotifications());
72 this.augmentations = ImmutableSet.copyOf(builder.getAugments());
73 this.rpcs = toImmutableSortedSet(builder.getRpcs());
74 this.deviations = ImmutableSet.copyOf(builder.getDeviations());
75 this.extensionNodes = ImmutableList.copyOf(builder.getExtensions());
76 this.identities = ImmutableSet.copyOf(builder.getIdentities());
77 this.unknownNodes = ImmutableList.copyOf(builder.getExtensionInstances());
78 this.source = builder.source;
83 public String getModuleSourcePath() {
88 public URI getNamespace() {
93 public String getName() {
98 public Date getRevision() {
99 if (revision.isPresent()) {
100 return new Date(revision.get().getTime());
107 public String getPrefix() {
112 public String getYangVersion() {
117 public String getOrganization() {
122 public String getContact() {
127 public Set<ModuleImport> getImports() {
132 public Set<FeatureDefinition> getFeatures() {
137 public Set<NotificationDefinition> getNotifications() {
138 return notifications;
142 public Set<AugmentationSchema> getAugmentations() {
143 return augmentations;
147 public Set<RpcDefinition> getRpcs() {
152 public Set<Deviation> getDeviations() {
157 public List<ExtensionDefinition> getExtensionSchemaNodes() {
158 return extensionNodes;
162 public Set<IdentitySchemaNode> getIdentities() {
167 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
171 public String getSource() {
176 public int hashCode() {
177 final int prime = 31;
179 result = prime * result + ((namespace == null) ? 0 : namespace.hashCode());
180 result = prime * result + ((name == null) ? 0 : name.hashCode());
181 result = prime * result + ((revision == null) ? 0 : revision.hashCode());
182 result = prime * result + ((yangVersion == null) ? 0 : yangVersion.hashCode());
187 public boolean equals(final Object obj) {
194 if (getClass() != obj.getClass()) {
197 ModuleImpl other = (ModuleImpl) obj;
198 if (namespace == null) {
199 if (other.namespace != null) {
202 } else if (!namespace.equals(other.namespace)) {
206 if (other.name != null) {
209 } else if (!name.equals(other.name)) {
212 if (revision == null) {
213 if (other.revision != null) {
216 } else if (!revision.equals(other.revision)) {
219 if (yangVersion == null) {
220 if (other.yangVersion != null) {
223 } else if (!yangVersion.equals(other.yangVersion)) {
229 private static <T extends SchemaNode> Set<T> toImmutableSortedSet(final Set<T> original) {
230 TreeSet<T> sorted = new TreeSet<>(Comparators.SCHEMA_NODE_COMP);
231 sorted.addAll(original);
232 return Collections.unmodifiableSet(sorted);
236 public String toString() {
237 StringBuilder sb = new StringBuilder(ModuleImpl.class.getSimpleName());
239 sb.append("name=" + name);
240 sb.append(", namespace=" + namespace);
241 sb.append(", revision=" + revision);
242 sb.append(", prefix=" + prefix);
243 sb.append(", yangVersion=" + yangVersion);
245 return sb.toString();