6eadb766f4df359114d5f35c223e735faf5192a1
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / main / java / org / opendaylight / controller / sal / binding / generator / impl / EnumerationBuilderImpl.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.sal.binding.generator.impl;\r
9 \r
10 import java.util.ArrayList;\r
11 import java.util.Collections;\r
12 import java.util.List;\r
13 \r
14 import org.opendaylight.controller.sal.binding.model.api.Enumeration;\r
15 import org.opendaylight.controller.sal.binding.model.api.Type;\r
16 import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;\r
17 \r
18 final class EnumerationBuilderImpl implements EnumBuilder {\r
19     private final String packageName;\r
20     private final String name;\r
21     private final List<Enumeration.Pair> values;\r
22 \r
23     public EnumerationBuilderImpl(final String packageName, final String name) {\r
24         super();\r
25         this.packageName = packageName;\r
26         this.name = name;\r
27         values = new ArrayList<Enumeration.Pair>();\r
28     }\r
29 \r
30     @Override\r
31     public void addValue(final String name, final Integer value) {\r
32         values.add(new EnumPairImpl(name, value));\r
33     }\r
34 \r
35     @Override\r
36     public Enumeration toInstance(final Type definingType) {\r
37         return new EnumerationImpl(definingType, packageName, name, values);\r
38     }\r
39 \r
40     /*\r
41      * (non-Javadoc)\r
42      * \r
43      * @see java.lang.Object#hashCode()\r
44      */\r
45     @Override\r
46     public int hashCode() {\r
47         final int prime = 31;\r
48         int result = 1;\r
49         result = prime * result + ((name == null) ? 0 : name.hashCode());\r
50         result = prime * result\r
51                 + ((packageName == null) ? 0 : packageName.hashCode());\r
52         return result;\r
53     }\r
54 \r
55     /*\r
56      * (non-Javadoc)\r
57      * \r
58      * @see java.lang.Object#equals(java.lang.Object)\r
59      */\r
60     @Override\r
61     public boolean equals(Object obj) {\r
62         if (this == obj) {\r
63             return true;\r
64         }\r
65         if (obj == null) {\r
66             return false;\r
67         }\r
68         if (getClass() != obj.getClass()) {\r
69             return false;\r
70         }\r
71         EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;\r
72         if (name == null) {\r
73             if (other.name != null) {\r
74                 return false;\r
75             }\r
76         } else if (!name.equals(other.name)) {\r
77             return false;\r
78         }\r
79         if (packageName == null) {\r
80             if (other.packageName != null) {\r
81                 return false;\r
82             }\r
83         } else if (!packageName.equals(other.packageName)) {\r
84             return false;\r
85         }\r
86         return true;\r
87     }\r
88 \r
89     /*\r
90      * (non-Javadoc)\r
91      * \r
92      * @see java.lang.Object#toString()\r
93      */\r
94     @Override\r
95     public String toString() {\r
96         StringBuilder builder = new StringBuilder();\r
97         builder.append("EnumerationBuilderImpl [packageName=");\r
98         builder.append(packageName);\r
99         builder.append(", name=");\r
100         builder.append(name);\r
101         builder.append(", values=");\r
102         builder.append(values);\r
103         builder.append("]");\r
104         return builder.toString();\r
105     }\r
106 \r
107     private static final class EnumPairImpl implements Enumeration.Pair {\r
108 \r
109         private final String name;\r
110         private final Integer value;\r
111 \r
112         public EnumPairImpl(String name, Integer value) {\r
113             super();\r
114             this.name = name;\r
115             this.value = value;\r
116         }\r
117 \r
118         @Override\r
119         public String getName() {\r
120             return name;\r
121         }\r
122 \r
123         @Override\r
124         public Integer getValue() {\r
125             return value;\r
126         }\r
127 \r
128         /*\r
129          * (non-Javadoc)\r
130          * \r
131          * @see java.lang.Object#hashCode()\r
132          */\r
133         @Override\r
134         public int hashCode() {\r
135             final int prime = 31;\r
136             int result = 1;\r
137             result = prime * result + ((name == null) ? 0 : name.hashCode());\r
138             result = prime * result + ((value == null) ? 0 : value.hashCode());\r
139             return result;\r
140         }\r
141 \r
142         /*\r
143          * (non-Javadoc)\r
144          * \r
145          * @see java.lang.Object#equals(java.lang.Object)\r
146          */\r
147         @Override\r
148         public boolean equals(Object obj) {\r
149             if (this == obj) {\r
150                 return true;\r
151             }\r
152             if (obj == null) {\r
153                 return false;\r
154             }\r
155             if (getClass() != obj.getClass()) {\r
156                 return false;\r
157             }\r
158             EnumPairImpl other = (EnumPairImpl) obj;\r
159             if (name == null) {\r
160                 if (other.name != null) {\r
161                     return false;\r
162                 }\r
163             } else if (!name.equals(other.name)) {\r
164                 return false;\r
165             }\r
166             if (value == null) {\r
167                 if (other.value != null) {\r
168                     return false;\r
169                 }\r
170             } else if (!value.equals(other.value)) {\r
171                 return false;\r
172             }\r
173             return true;\r
174         }\r
175 \r
176         /*\r
177          * (non-Javadoc)\r
178          * \r
179          * @see java.lang.Object#toString()\r
180          */\r
181         @Override\r
182         public String toString() {\r
183             StringBuilder builder = new StringBuilder();\r
184             builder.append("EnumPairImpl [name=");\r
185             builder.append(name);\r
186             builder.append(", value=");\r
187             builder.append(value);\r
188             builder.append("]");\r
189             return builder.toString();\r
190         }\r
191     }\r
192 \r
193     private static final class EnumerationImpl implements Enumeration {\r
194 \r
195         private final Type definingType;\r
196         private final String packageName;\r
197         private final String name;\r
198         private final List<Pair> values;\r
199 \r
200         public EnumerationImpl(final Type definingType,\r
201                 final String packageName, final String name,\r
202                 final List<Pair> values) {\r
203             super();\r
204             this.definingType = definingType;\r
205             this.packageName = packageName;\r
206             this.name = name;\r
207             this.values = Collections.unmodifiableList(values);\r
208         }\r
209 \r
210         @Override\r
211         public Type getDefiningType() {\r
212             return definingType;\r
213         }\r
214 \r
215         @Override\r
216         public String getPackageName() {\r
217             return packageName;\r
218         }\r
219 \r
220         @Override\r
221         public String getName() {\r
222             return name;\r
223         }\r
224 \r
225         @Override\r
226         public List<Pair> getValues() {\r
227             return values;\r
228         }\r
229 \r
230         @Override\r
231         public String toFormattedString() {\r
232             StringBuilder builder = new StringBuilder();\r
233             builder.append("public enum");\r
234             builder.append(" ");\r
235             builder.append(name);\r
236             builder.append(" {");\r
237             builder.append("\n");\r
238 \r
239             int i = 0;\r
240             for (final Enumeration.Pair valPair : values) {\r
241                 builder.append("\t");\r
242                 builder.append(" ");\r
243                 builder.append(valPair.getName());\r
244                 builder.append(" (");\r
245                 builder.append(valPair.getValue());\r
246 \r
247                 if (i == (values.size() - 1)) {\r
248                     builder.append(" );");\r
249                 } else {\r
250                     builder.append(" ),");\r
251                 }\r
252                 ++i;\r
253             }\r
254             return builder.toString();\r
255         }\r
256 \r
257         /*\r
258          * (non-Javadoc)\r
259          * \r
260          * @see java.lang.Object#hashCode()\r
261          */\r
262         @Override\r
263         public int hashCode() {\r
264             final int prime = 31;\r
265             int result = 1;\r
266             result = prime * result + ((name == null) ? 0 : name.hashCode());\r
267             result = prime * result\r
268                     + ((packageName == null) ? 0 : packageName.hashCode());\r
269             result = prime * result\r
270                     + ((values == null) ? 0 : values.hashCode());\r
271 \r
272             if (definingType != null) {\r
273                 result = prime\r
274                         * result\r
275                         + ((definingType.getPackageName() == null) ? 0\r
276                                 : definingType.getPackageName().hashCode());\r
277                 result = prime\r
278                         * result\r
279                         + ((definingType.getName() == null) ? 0 : definingType\r
280                                 .getName().hashCode());\r
281             }\r
282 \r
283             return result;\r
284         }\r
285 \r
286         /*\r
287          * (non-Javadoc)\r
288          * \r
289          * @see java.lang.Object#equals(java.lang.Object)\r
290          */\r
291         @Override\r
292         public boolean equals(Object obj) {\r
293             if (this == obj) {\r
294                 return true;\r
295             }\r
296             if (obj == null) {\r
297                 return false;\r
298             }\r
299             if (getClass() != obj.getClass()) {\r
300                 return false;\r
301             }\r
302             EnumerationImpl other = (EnumerationImpl) obj;\r
303             if (name == null) {\r
304                 if (other.name != null) {\r
305                     return false;\r
306                 }\r
307             } else if (!name.equals(other.name)) {\r
308                 return false;\r
309             }\r
310             if (packageName == null) {\r
311                 if (other.packageName != null) {\r
312                     return false;\r
313                 }\r
314             } else if (!packageName.equals(other.packageName)) {\r
315                 return false;\r
316             }\r
317             if (values == null) {\r
318                 if (other.values != null) {\r
319                     return false;\r
320                 }\r
321             } else if (!values.equals(other.values)) {\r
322                 return false;\r
323             }\r
324             if (definingType == null) {\r
325                 if (other.definingType != null) {\r
326                     return false;\r
327                 }\r
328             } else if ((definingType != null) && (other.definingType != null)) {\r
329                 if (!definingType.getPackageName().equals(\r
330                         other.definingType.getPackageName())\r
331                         && !definingType.getName().equals(\r
332                                 other.definingType.getName())) {\r
333                     return false;\r
334                 }\r
335             }\r
336             return true;\r
337         }\r
338 \r
339         /*\r
340          * (non-Javadoc)\r
341          * \r
342          * @see java.lang.Object#toString()\r
343          */\r
344         @Override\r
345         public String toString() {\r
346             StringBuilder builder = new StringBuilder();\r
347             builder.append("EnumerationImpl [packageName=");\r
348             builder.append(packageName);\r
349             if (definingType != null) {\r
350                 builder.append(", definingType=");\r
351                 builder.append(definingType.getPackageName());\r
352                 builder.append(".");\r
353                 builder.append(definingType.getName());\r
354             } else {\r
355                 builder.append(", definingType= null");\r
356             }\r
357             builder.append(", name=");\r
358             builder.append(name);\r
359             builder.append(", values=");\r
360             builder.append(values);\r
361             builder.append("]");\r
362             return builder.toString();\r
363         }\r
364     }\r
365 }\r