Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / yang-prototype / yang / yang-model-util / src / main / java / org / opendaylight / controller / model / util / ExtendedType.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.yang.common.QName;\r
14 import org.opendaylight.controller.yang.model.api.ExtensionDefinition;\r
15 import org.opendaylight.controller.yang.model.api.SchemaPath;\r
16 import org.opendaylight.controller.yang.model.api.Status;\r
17 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
18 \r
19 public class ExtendedType implements TypeDefinition {\r
20 \r
21     private final QName typeName;\r
22     private final TypeDefinition<?> baseType;\r
23     private final SchemaPath path;\r
24     private final String description;\r
25     private final String reference;\r
26     private final List<ExtensionDefinition> extensions;\r
27 \r
28     private Status status;\r
29     private String units;\r
30     private Object defaultValue;\r
31 \r
32     public static class Builder {\r
33         private final QName typeName;\r
34         private final TypeDefinition<?> baseType;\r
35 \r
36         private final SchemaPath path;\r
37         private final String description;\r
38         private final String reference;\r
39 \r
40         private List<ExtensionDefinition> extensions = Collections.emptyList();;\r
41         private Status status = Status.CURRENT;\r
42         private String units = "";\r
43         private Object defaultValue = null;\r
44 \r
45         public Builder(final QName typeName, TypeDefinition<?> baseType,\r
46                 final String description, final String reference) {\r
47             this.typeName = typeName;\r
48             this.baseType = baseType;\r
49             this.path = BaseTypes.schemaPath(typeName);\r
50             this.description = description;\r
51             this.reference = reference;\r
52         }\r
53 \r
54         public Builder status(Status status) {\r
55             this.status = status;\r
56             return this;\r
57         }\r
58 \r
59         public Builder units(String units) {\r
60             this.units = units;\r
61             return this;\r
62         }\r
63 \r
64         public Builder defaultValue(final Object defaultValue) {\r
65             this.defaultValue = defaultValue;\r
66             return this;\r
67         }\r
68 \r
69         public Builder extensions(final List<ExtensionDefinition> extensions) {\r
70             this.extensions = extensions;\r
71             return this;\r
72         }\r
73 \r
74         public ExtendedType build() {\r
75             return new ExtendedType(this);\r
76         }\r
77     }\r
78 \r
79     private ExtendedType(Builder builder) {\r
80         this.typeName = builder.typeName;\r
81         this.baseType = builder.baseType;\r
82         this.path = builder.path;\r
83         this.description = builder.description;\r
84         this.reference = builder.reference;\r
85         this.extensions = builder.extensions;\r
86         this.status = builder.status;\r
87         this.units = builder.units;\r
88         this.defaultValue = builder.defaultValue;\r
89     }\r
90 \r
91     @Override\r
92     public TypeDefinition<?> getBaseType() {\r
93         return baseType;\r
94     }\r
95 \r
96     @Override\r
97     public String getUnits() {\r
98         return units;\r
99     }\r
100 \r
101     @Override\r
102     public Object getDefaultValue() {\r
103         return defaultValue;\r
104     }\r
105 \r
106     @Override\r
107     public QName getQName() {\r
108         return typeName;\r
109     }\r
110 \r
111     @Override\r
112     public SchemaPath getPath() {\r
113         return path;\r
114     }\r
115 \r
116     @Override\r
117     public String getDescription() {\r
118         return description;\r
119     }\r
120 \r
121     @Override\r
122     public String getReference() {\r
123         return reference;\r
124     }\r
125 \r
126     @Override\r
127     public Status getStatus() {\r
128         return status;\r
129     }\r
130 \r
131     @Override\r
132     public List<ExtensionDefinition> getExtensionSchemaNodes() {\r
133         return extensions;\r
134     }\r
135 \r
136     @Override\r
137     public int hashCode() {\r
138         final int prime = 31;\r
139         int result = 1;\r
140         result = prime * result\r
141                 + ((baseType == null) ? 0 : baseType.hashCode());\r
142         result = prime * result\r
143                 + ((defaultValue == null) ? 0 : defaultValue.hashCode());\r
144         result = prime * result\r
145                 + ((description == null) ? 0 : description.hashCode());\r
146         result = prime * result\r
147                 + ((extensions == null) ? 0 : extensions.hashCode());\r
148         result = prime * result + ((path == null) ? 0 : path.hashCode());\r
149         result = prime * result\r
150                 + ((reference == null) ? 0 : reference.hashCode());\r
151         result = prime * result + ((status == null) ? 0 : status.hashCode());\r
152         result = prime * result\r
153                 + ((typeName == null) ? 0 : typeName.hashCode());\r
154         result = prime * result + ((units == null) ? 0 : units.hashCode());\r
155         return result;\r
156     }\r
157 \r
158     @Override\r
159     public boolean equals(Object obj) {\r
160         if (this == obj) {\r
161             return true;\r
162         }\r
163         if (obj == null) {\r
164             return false;\r
165         }\r
166         if (getClass() != obj.getClass()) {\r
167             return false;\r
168         }\r
169         ExtendedType other = (ExtendedType) obj;\r
170         if (baseType == null) {\r
171             if (other.baseType != null) {\r
172                 return false;\r
173             }\r
174         } else if (!baseType.equals(other.baseType)) {\r
175             return false;\r
176         }\r
177         if (defaultValue == null) {\r
178             if (other.defaultValue != null) {\r
179                 return false;\r
180             }\r
181         } else if (!defaultValue.equals(other.defaultValue)) {\r
182             return false;\r
183         }\r
184         if (description == null) {\r
185             if (other.description != null) {\r
186                 return false;\r
187             }\r
188         } else if (!description.equals(other.description)) {\r
189             return false;\r
190         }\r
191         if (extensions == null) {\r
192             if (other.extensions != null) {\r
193                 return false;\r
194             }\r
195         } else if (!extensions.equals(other.extensions)) {\r
196             return false;\r
197         }\r
198         if (path == null) {\r
199             if (other.path != null) {\r
200                 return false;\r
201             }\r
202         } else if (!path.equals(other.path)) {\r
203             return false;\r
204         }\r
205         if (reference == null) {\r
206             if (other.reference != null) {\r
207                 return false;\r
208             }\r
209         } else if (!reference.equals(other.reference)) {\r
210             return false;\r
211         }\r
212         if (status != other.status) {\r
213             return false;\r
214         }\r
215         if (typeName == null) {\r
216             if (other.typeName != null) {\r
217                 return false;\r
218             }\r
219         } else if (!typeName.equals(other.typeName)) {\r
220             return false;\r
221         }\r
222         if (units == null) {\r
223             if (other.units != null) {\r
224                 return false;\r
225             }\r
226         } else if (!units.equals(other.units)) {\r
227             return false;\r
228         }\r
229         return true;\r
230     }\r
231 \r
232     @Override\r
233     public String toString() {\r
234         StringBuilder builder2 = new StringBuilder();\r
235         builder2.append("ExtendedType [typeName=");\r
236         builder2.append(typeName);\r
237         builder2.append(", baseType=");\r
238         builder2.append(baseType);\r
239         builder2.append(", path=");\r
240         builder2.append(path);\r
241         builder2.append(", description=");\r
242         builder2.append(description);\r
243         builder2.append(", reference=");\r
244         builder2.append(reference);\r
245         builder2.append(", extensions=");\r
246         builder2.append(extensions);\r
247         builder2.append(", status=");\r
248         builder2.append(status);\r
249         builder2.append(", units=");\r
250         builder2.append(units);\r
251         builder2.append(", defaultValue=");\r
252         builder2.append(defaultValue);\r
253         builder2.append("]");\r
254         return builder2.toString();\r
255     }\r
256 }\r