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