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