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