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