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