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