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