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