Merge "BUG 428 remove importing unnecessary imports"
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ModuleImpl.java
1 package org.opendaylight.yangtools.yang.parser.builder.impl;
2
3 import com.google.common.base.Optional;
4 import com.google.common.collect.ImmutableList;
5 import com.google.common.collect.ImmutableSet;
6 import java.net.URI;
7 import java.util.Collections;
8 import java.util.Date;
9 import java.util.List;
10 import java.util.Set;
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;
26
27 public final class ModuleImpl extends AbstractDocumentedDataNodeContainer implements Module, Immutable {
28
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;
47
48     /**
49      *
50      *
51      * <b>Note</b>Constructor has intentionality limited visibility to package, since
52      * this class should be only instantied via builders.
53      *
54      * @param name
55      * @param sourcePath
56      * @param builder
57      */
58     ModuleImpl(final String name, final String sourcePath, final ModuleBuilder builder) {
59         super(builder);
60         this.name = name;
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;
79
80     }
81
82     @Override
83     public String getModuleSourcePath() {
84         return sourcePath;
85     }
86
87     @Override
88     public URI getNamespace() {
89         return namespace;
90     }
91
92     @Override
93     public String getName() {
94         return name;
95     }
96
97     @Override
98     public Date getRevision() {
99         if (revision.isPresent()) {
100             return new Date(revision.get().getTime());
101         } else {
102             return null;
103         }
104     }
105
106     @Override
107     public String getPrefix() {
108         return prefix;
109     }
110
111     @Override
112     public String getYangVersion() {
113         return yangVersion;
114     }
115
116     @Override
117     public String getOrganization() {
118         return organization;
119     }
120
121     @Override
122     public String getContact() {
123         return contact;
124     }
125
126     @Override
127     public Set<ModuleImport> getImports() {
128         return imports;
129     }
130
131     @Override
132     public Set<FeatureDefinition> getFeatures() {
133         return features;
134     }
135
136     @Override
137     public Set<NotificationDefinition> getNotifications() {
138         return notifications;
139     }
140
141     @Override
142     public Set<AugmentationSchema> getAugmentations() {
143         return augmentations;
144     }
145
146     @Override
147     public Set<RpcDefinition> getRpcs() {
148         return rpcs;
149     }
150
151     @Override
152     public Set<Deviation> getDeviations() {
153         return deviations;
154     }
155
156     @Override
157     public List<ExtensionDefinition> getExtensionSchemaNodes() {
158         return extensionNodes;
159     }
160
161     @Override
162     public Set<IdentitySchemaNode> getIdentities() {
163         return identities;
164     }
165
166     @Override
167     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
168         return unknownNodes;
169     }
170
171     public String getSource() {
172         return source;
173     }
174
175     @Override
176     public int hashCode() {
177         final int prime = 31;
178         int result = 1;
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());
183         return result;
184     }
185
186     @Override
187     public boolean equals(final Object obj) {
188         if (this == obj) {
189             return true;
190         }
191         if (obj == null) {
192             return false;
193         }
194         if (getClass() != obj.getClass()) {
195             return false;
196         }
197         ModuleImpl other = (ModuleImpl) obj;
198         if (namespace == null) {
199             if (other.namespace != null) {
200                 return false;
201             }
202         } else if (!namespace.equals(other.namespace)) {
203             return false;
204         }
205         if (name == null) {
206             if (other.name != null) {
207                 return false;
208             }
209         } else if (!name.equals(other.name)) {
210             return false;
211         }
212         if (revision == null) {
213             if (other.revision != null) {
214                 return false;
215             }
216         } else if (!revision.equals(other.revision)) {
217             return false;
218         }
219         if (yangVersion == null) {
220             if (other.yangVersion != null) {
221                 return false;
222             }
223         } else if (!yangVersion.equals(other.yangVersion)) {
224             return false;
225         }
226         return true;
227     }
228
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);
233     }
234
235     @Override
236     public String toString() {
237         StringBuilder sb = new StringBuilder(ModuleImpl.class.getSimpleName());
238         sb.append("[");
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);
244         sb.append("]");
245         return sb.toString();
246     }
247 }