Merge "BUG-1070: split off YangSourceContext"
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / UnknownType.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.model.util;
9
10 import java.util.Collections;
11 import java.util.List;
12
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
15 import org.opendaylight.yangtools.yang.model.api.Status;
16 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
18 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
19 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
20 import org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition;
21
22 public final class UnknownType implements UnknownTypeDefinition {
23
24     private final QName name;
25     private final SchemaPath path;
26     private final String description;
27     private final String reference;
28     private final List<LengthConstraint> lengthStatements;
29     private final List<PatternConstraint> patterns;
30     private final List<RangeConstraint> rangeStatements;
31     private final List<UnknownSchemaNode> extensions;
32     private final LengthConstraint lengthConstraint;
33     private final Integer fractionDigits;
34
35     private final Status status;
36     private final String units;
37     private final Object defaultValue;
38
39     public static class Builder {
40
41         private final QName name;
42         private final SchemaPath path;
43         private String description;
44         private String reference;
45
46         private List<LengthConstraint> lengthStatements = Collections.emptyList();
47         private List<PatternConstraint> patterns = Collections.emptyList();
48         private List<RangeConstraint> rangeStatements = Collections.emptyList();
49         private List<UnknownSchemaNode> extensions = Collections.emptyList();
50         private LengthConstraint lengthConstraint = null;
51         private Integer fractionDigits = null;
52
53         private Status status = Status.CURRENT;
54         private String units = "";
55         private Object defaultValue = null;
56
57         public Builder(final QName name, final String description, final String reference) {
58             this.name = name;
59             this.path = BaseTypes.schemaPath(name);
60             this.description = description;
61             this.reference = reference;
62         }
63
64         public Builder(final QName name) {
65             this.name = name;
66             this.path = BaseTypes.schemaPath(name);
67         }
68
69         public Builder description(String description) {
70             this.description = description;
71             return this;
72         }
73
74         public Builder reference(String reference) {
75             this.reference = reference;
76             return this;
77         }
78
79         public Builder lengthStatements(final List<LengthConstraint> lengthStatements) {
80             this.lengthStatements = lengthStatements;
81             return this;
82         }
83
84         public Builder patterns(final List<PatternConstraint> patterns) {
85             this.patterns = patterns;
86             return this;
87         }
88
89         public Builder rangeStatements(final List<RangeConstraint> rangeStatements) {
90             this.rangeStatements = rangeStatements;
91             return this;
92         }
93
94         public Builder extensions(final List<UnknownSchemaNode> extensions) {
95             this.extensions = extensions;
96             return this;
97         }
98
99         public Builder lengthConstraint(final LengthConstraint lengthConstraint) {
100             this.lengthConstraint = lengthConstraint;
101             return this;
102         }
103
104         public Builder fractionDigits(final Integer fractionDigits) {
105             this.fractionDigits = fractionDigits;
106             return this;
107         }
108
109         public Builder status(Status status) {
110             this.status = status;
111             return this;
112         }
113
114         public Builder units(String units) {
115             this.units = units;
116             return this;
117         }
118
119         public Builder defaultValue(final Object defaultValue) {
120             this.defaultValue = defaultValue;
121             return this;
122         }
123
124         public UnknownTypeDefinition build() {
125             return new UnknownType(this);
126         }
127     }
128
129     private UnknownType(Builder builder) {
130         this.name = builder.name;
131         this.path = builder.path;
132         this.description = builder.description;
133         this.reference = builder.reference;
134         this.lengthStatements = builder.lengthStatements;
135         this.patterns = builder.patterns;
136         this.rangeStatements = builder.rangeStatements;
137         this.extensions = builder.extensions;
138         this.lengthConstraint = builder.lengthConstraint;
139         this.status = builder.status;
140         this.units = builder.units;
141         this.defaultValue = builder.defaultValue;
142         this.fractionDigits = builder.fractionDigits;
143     }
144
145     /*
146      * (non-Javadoc)
147      *
148      * @see
149      * org.opendaylight.yangtools.yang.model.api.TypeDefinition#getBaseType()
150      */
151     @Override
152     public UnknownTypeDefinition getBaseType() {
153         return this;
154     }
155
156     /*
157      * (non-Javadoc)
158      *
159      * @see org.opendaylight.yangtools.yang.model.api.TypeDefinition#getUnits()
160      */
161     @Override
162     public String getUnits() {
163         return units;
164     }
165
166     /*
167      * (non-Javadoc)
168      *
169      * @see
170      * org.opendaylight.yangtools.yang.model.api.TypeDefinition#getDefaultValue
171      * ()
172      */
173     @Override
174     public Object getDefaultValue() {
175         return defaultValue;
176     }
177
178     /*
179      * (non-Javadoc)
180      *
181      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getQName()
182      */
183     @Override
184     public QName getQName() {
185         return name;
186     }
187
188     /*
189      * (non-Javadoc)
190      *
191      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getPath()
192      */
193     @Override
194     public SchemaPath getPath() {
195         return path;
196     }
197
198     /*
199      * (non-Javadoc)
200      *
201      * @see
202      * org.opendaylight.yangtools.yang.model.api.SchemaNode#getDescription()
203      */
204     @Override
205     public String getDescription() {
206         return description;
207     }
208
209     /*
210      * (non-Javadoc)
211      *
212      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getReference()
213      */
214     @Override
215     public String getReference() {
216         return reference;
217     }
218
219     /*
220      * (non-Javadoc)
221      *
222      * @see org.opendaylight.yangtools.yang.model.api.SchemaNode#getStatus()
223      */
224     @Override
225     public Status getStatus() {
226         return status;
227     }
228
229     /*
230      * (non-Javadoc)
231      *
232      * @see
233      * org.opendaylight.yangtools.yang.model.api.SchemaNode#getExtensionSchemaNodes
234      * ()
235      */
236     @Override
237     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
238         return extensions;
239     }
240
241     /*
242      * (non-Javadoc)
243      *
244      * @see org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition
245      * #getRangeStatements()
246      */
247     @Override
248     public List<RangeConstraint> getRangeConstraints() {
249         return rangeStatements;
250     }
251
252     /*
253      * (non-Javadoc)
254      *
255      * @see org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition
256      * #getLengthStatements()
257      */
258     @Override
259     public List<LengthConstraint> getLengthConstraints() {
260         return lengthStatements;
261     }
262
263     /*
264      * (non-Javadoc)
265      *
266      * @see org.opendaylight.yangtools.yang.model.api.type.UnknownTypeDefinition
267      * #getPatterns()
268      */
269     @Override
270     public List<PatternConstraint> getPatternConstraints() {
271         return patterns;
272     }
273
274     @Override
275     public Integer getFractionDigits() {
276         return fractionDigits;
277     }
278
279     @Override
280     public int hashCode() {
281         final int prime = 31;
282         int result = 1;
283         result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode());
284         result = prime * result + ((description == null) ? 0 : description.hashCode());
285         result = prime * result + ((extensions == null) ? 0 : extensions.hashCode());
286         result = prime * result + ((lengthConstraint == null) ? 0 : lengthConstraint.hashCode());
287         result = prime * result + ((lengthStatements == null) ? 0 : lengthStatements.hashCode());
288         result = prime * result + ((name == null) ? 0 : name.hashCode());
289         result = prime * result + ((path == null) ? 0 : path.hashCode());
290         result = prime * result + ((patterns == null) ? 0 : patterns.hashCode());
291         result = prime * result + ((rangeStatements == null) ? 0 : rangeStatements.hashCode());
292         result = prime * result + ((reference == null) ? 0 : reference.hashCode());
293         result = prime * result + ((status == null) ? 0 : status.hashCode());
294         result = prime * result + ((units == null) ? 0 : units.hashCode());
295         return result;
296     }
297
298     @Override
299     public boolean equals(Object obj) {
300         if (this == obj) {
301             return true;
302         }
303         if (obj == null) {
304             return false;
305         }
306         if (getClass() != obj.getClass()) {
307             return false;
308         }
309         UnknownType other = (UnknownType) obj;
310         if (defaultValue == null) {
311             if (other.defaultValue != null) {
312                 return false;
313             }
314         } else if (!defaultValue.equals(other.defaultValue)) {
315             return false;
316         }
317         if (description == null) {
318             if (other.description != null) {
319                 return false;
320             }
321         } else if (!description.equals(other.description)) {
322             return false;
323         }
324         if (extensions == null) {
325             if (other.extensions != null) {
326                 return false;
327             }
328         } else if (!extensions.equals(other.extensions)) {
329             return false;
330         }
331         if (lengthConstraint == null) {
332             if (other.lengthConstraint != null) {
333                 return false;
334             }
335         } else if (!lengthConstraint.equals(other.lengthConstraint)) {
336             return false;
337         }
338         if (lengthStatements == null) {
339             if (other.lengthStatements != null) {
340                 return false;
341             }
342         } else if (!lengthStatements.equals(other.lengthStatements)) {
343             return false;
344         }
345         if (name == null) {
346             if (other.name != null) {
347                 return false;
348             }
349         } else if (!name.equals(other.name)) {
350             return false;
351         }
352         if (path == null) {
353             if (other.path != null) {
354                 return false;
355             }
356         } else if (!path.equals(other.path)) {
357             return false;
358         }
359         if (patterns == null) {
360             if (other.patterns != null) {
361                 return false;
362             }
363         } else if (!patterns.equals(other.patterns)) {
364             return false;
365         }
366         if (rangeStatements == null) {
367             if (other.rangeStatements != null) {
368                 return false;
369             }
370         } else if (!rangeStatements.equals(other.rangeStatements)) {
371             return false;
372         }
373         if (reference == null) {
374             if (other.reference != null) {
375                 return false;
376             }
377         } else if (!reference.equals(other.reference)) {
378             return false;
379         }
380         if (status != other.status) {
381             return false;
382         }
383         if (units == null) {
384             if (other.units != null) {
385                 return false;
386             }
387         } else if (!units.equals(other.units)) {
388             return false;
389         }
390         return true;
391     }
392
393     @Override
394     public String toString() {
395         StringBuilder builder2 = new StringBuilder();
396         builder2.append("UnknownType [name=");
397         builder2.append(name);
398         builder2.append(", path=");
399         builder2.append(path);
400         builder2.append(", description=");
401         builder2.append(description);
402         builder2.append(", reference=");
403         builder2.append(reference);
404         builder2.append(", lengthStatements=");
405         builder2.append(lengthStatements);
406         builder2.append(", patterns=");
407         builder2.append(patterns);
408         builder2.append(", rangeStatements=");
409         builder2.append(rangeStatements);
410         builder2.append(", extensions=");
411         builder2.append(extensions);
412         builder2.append(", lengthConstraint=");
413         builder2.append(lengthConstraint);
414         builder2.append(", status=");
415         builder2.append(status);
416         builder2.append(", units=");
417         builder2.append(units);
418         builder2.append(", defaultValue=");
419         builder2.append(defaultValue);
420         builder2.append("]");
421         return builder2.toString();
422     }
423
424 }