Fixed bug in generating of package names in BindingGeneratorImpl;
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-impl / src / main / java / org / opendaylight / controller / sal / binding / generator / impl / GeneratedTOBuilderImpl.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.AccessModifier;
15 import org.opendaylight.controller.sal.binding.model.api.Constant;
16 import org.opendaylight.controller.sal.binding.model.api.Enumeration;
17 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
18 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
19 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
20 import org.opendaylight.controller.sal.binding.model.api.Type;
21 import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder;
22 import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;
23 import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
24 import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder;
25
26 final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
27     private String packageName;
28     private final String name;
29
30     private final List<EnumBuilder> enumerations = new ArrayList<EnumBuilder>();
31     private final List<GeneratedPropertyBuilder> properties = new ArrayList<GeneratedPropertyBuilder>();
32     private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<GeneratedPropertyBuilder>();
33     private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<GeneratedPropertyBuilder>();
34     private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<GeneratedPropertyBuilder>();
35
36     public GeneratedTOBuilderImpl(String packageName, String name) {
37         super();
38         this.packageName = packageName;
39         this.name = name;
40     }
41     
42     @Override
43     public String getPackageName() {
44         return packageName;
45     }
46
47     @Override
48     public String getName() {
49         return name;
50     }
51     
52     @Override
53     public EnumBuilder addEnumeration(String name) {
54         final EnumBuilder builder = new EnumerationBuilderImpl(packageName,
55                 name);
56         enumerations.add(builder);
57         return builder;
58     }
59
60     @Override
61     public GeneratedPropertyBuilder addProperty(String name) {
62         final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(
63                 name);
64         properties.add(builder);
65         return builder;
66     }
67
68     @Override
69     public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
70         return equalsProperties.add(property);
71     }
72
73     @Override
74     public boolean addHashIdentity(GeneratedPropertyBuilder property) {
75         return hashProperties.add(property);
76     }
77
78     @Override
79     public boolean addToStringProperty(GeneratedPropertyBuilder property) {
80         return toStringProperties.add(property);
81     }
82
83     @Override
84     public GeneratedTransferObject toInstance() {
85         return new GeneratedTransferObjectImpl(packageName, name, enumerations,
86                 properties, equalsProperties, hashProperties,
87                 toStringProperties);
88     }
89
90     private static final class GeneratedPropertyBuilderImpl implements
91             GeneratedPropertyBuilder {
92
93         private final String name;
94         private Type returnType;
95         private final List<MethodSignature.Parameter> parameters;
96         private String comment = "";
97         private AccessModifier accessModifier;
98         private boolean isFinal;
99         private boolean isReadOnly;
100
101         public GeneratedPropertyBuilderImpl(final String name) {
102             super();
103             this.name = name;
104             parameters = new ArrayList<MethodSignature.Parameter>();
105             isFinal = true;
106             this.isReadOnly = true;
107             accessModifier = AccessModifier.PUBLIC;
108         }
109
110         public String getName() {
111             return name;
112         }
113
114         @Override
115         public boolean addReturnType(Type returnType) {
116             if (returnType != null) {
117                 this.returnType = returnType;
118                 this.parameters.add(new MethodParameterImpl(name, returnType));
119                 return true;
120             }
121             return false;
122         }
123
124         @Override
125         public void accessorModifier(final AccessModifier modifier) {
126             accessModifier = modifier;
127         }
128
129         @Override
130         public void addComment(String comment) {
131             if (comment != null) {
132                 this.comment = comment;
133             }
134         }
135
136         @Override
137         public void setFinal(boolean isFinal) {
138             this.isFinal = isFinal;
139         }
140
141         @Override
142         public void setReadOnly(boolean isReadOnly) {
143             this.isReadOnly = isReadOnly;
144         }
145
146         @Override
147         public GeneratedProperty toInstance(final Type definingType) {
148             return new GeneratedPropertyImpl(name, comment, definingType,
149                     returnType, isFinal, isReadOnly, parameters, accessModifier);
150         }
151     }
152
153     private static final class GeneratedPropertyImpl implements
154             GeneratedProperty {
155
156         private final String name;
157         private final String comment;
158         private final Type parent;
159         private final Type returnType;
160         private final boolean isFinal;
161         private final boolean isReadOnly;
162         private final List<MethodSignature.Parameter> parameters;
163         private final AccessModifier modifier;
164
165         public GeneratedPropertyImpl(final String name, final String comment,
166                 final Type parent, final Type returnType,
167                 final boolean isFinal, final boolean isReadOnly,
168                 final List<Parameter> parameters, final AccessModifier modifier) {
169             super();
170             this.name = name;
171             this.comment = comment;
172             this.parent = parent;
173             this.returnType = returnType;
174             this.isFinal = isFinal;
175             this.isReadOnly = isReadOnly;
176             this.parameters = Collections.unmodifiableList(parameters);
177             this.modifier = modifier;
178         }
179
180         @Override
181         public String getName() {
182             return name;
183         }
184
185         @Override
186         public String getComment() {
187             return comment;
188         }
189
190         @Override
191         public Type getDefiningType() {
192             return parent;
193         }
194
195         @Override
196         public Type getReturnType() {
197             return returnType;
198         }
199
200         @Override
201         public List<Parameter> getParameters() {
202             return parameters;
203         }
204
205         @Override
206         public AccessModifier getAccessModifier() {
207             return modifier;
208         }
209
210         @Override
211         public boolean isReadOnly() {
212             return isReadOnly;
213         }
214
215         @Override
216         public boolean isFinal() {
217             return isFinal;
218         }
219
220         @Override
221         public int hashCode() {
222             final int prime = 31;
223             int result = 1;
224             result = prime * result
225                     + ((comment == null) ? 0 : comment.hashCode());
226             result = prime * result + (isFinal ? 1231 : 1237);
227             result = prime * result + (isReadOnly ? 1231 : 1237);
228             result = prime * result
229                     + ((modifier == null) ? 0 : modifier.hashCode());
230             result = prime * result + ((name == null) ? 0 : name.hashCode());
231             result = prime * result
232                     + ((parameters == null) ? 0 : parameters.hashCode());
233
234             if (parent != null) {
235                 result = prime
236                         * result
237                         + ((parent.getPackageName() == null) ? 0 : parent
238                                 .getPackageName().hashCode());
239                 result = prime
240                         * result
241                         + ((parent.getName() == null) ? 0 : parent.getName()
242                                 .hashCode());
243             }
244
245             result = prime * result
246                     + ((returnType == null) ? 0 : returnType.hashCode());
247             return result;
248         }
249
250         @Override
251         public boolean equals(Object obj) {
252             if (this == obj) {
253                 return true;
254             }
255             if (obj == null) {
256                 return false;
257             }
258             if (getClass() != obj.getClass()) {
259                 return false;
260             }
261             GeneratedPropertyImpl other = (GeneratedPropertyImpl) obj;
262             if (comment == null) {
263                 if (other.comment != null) {
264                     return false;
265                 }
266             } else if (!comment.equals(other.comment)) {
267                 return false;
268             }
269             if (isFinal != other.isFinal) {
270                 return false;
271             }
272             if (isReadOnly != other.isReadOnly) {
273                 return false;
274             }
275             if (modifier != other.modifier) {
276                 return false;
277             }
278             if (name == null) {
279                 if (other.name != null) {
280                     return false;
281                 }
282             } else if (!name.equals(other.name)) {
283                 return false;
284             }
285             if (parameters == null) {
286                 if (other.parameters != null) {
287                     return false;
288                 }
289             } else if (!parameters.equals(other.parameters)) {
290                 return false;
291             }
292             if (parent == null) {
293                 if (other.parent != null) {
294                     return false;
295                 }
296             } else if ((parent != null) && (other.parent != null)) {
297                 if (!parent.getPackageName().equals(
298                         other.parent.getPackageName())
299                         && !parent.getName().equals(other.parent.getName())) {
300                     return false;
301                 }
302             }
303             if (returnType == null) {
304                 if (other.returnType != null) {
305                     return false;
306                 }
307             } else if (!returnType.equals(other.returnType)) {
308                 return false;
309             }
310             return true;
311         }
312
313         @Override
314         public String toString() {
315             StringBuilder builder = new StringBuilder();
316             builder.append("GeneratedPropertyImpl [name=");
317             builder.append(name);
318             builder.append(", comment=");
319             builder.append(comment);
320             if (parent != null) {
321                 builder.append(", parent=");
322                 builder.append(parent.getPackageName());
323                 builder.append(".");
324                 builder.append(parent.getName());
325             } else {
326                 builder.append(", parent= null");
327             }
328             builder.append(", returnType=");
329             builder.append(returnType);
330             builder.append(", isFinal=");
331             builder.append(isFinal);
332             builder.append(", isReadOnly=");
333             builder.append(isReadOnly);
334             builder.append(", parameters=");
335             builder.append(parameters);
336             builder.append(", modifier=");
337             builder.append(modifier);
338             builder.append("]");
339             return builder.toString();
340         }
341     }
342
343     private static final class GeneratedTransferObjectImpl implements
344             GeneratedTransferObject {
345
346         private final String packageName;
347         private final String name;
348         // private final List<Constant> constants;
349         private final List<Enumeration> enumerations;
350         private final List<GeneratedProperty> properties;
351         private final List<GeneratedProperty> equalsProperties;
352         private final List<GeneratedProperty> hashCodeProperties;
353         private final List<GeneratedProperty> stringProperties;
354
355         private List<Enumeration> toUnmodifiableEnumerations(
356                 final List<EnumBuilder> enumBuilders) {
357             final List<Enumeration> enumerations = new ArrayList<Enumeration>();
358             for (final EnumBuilder builder : enumBuilders) {
359                 enumerations.add(builder.toInstance(this));
360             }
361             return Collections.unmodifiableList(enumerations);
362         }
363
364         private List<Constant> toUnmodifiableConstant(
365                 final List<ConstantBuilder> constBuilders) {
366             final List<Constant> constants = new ArrayList<Constant>();
367             for (final ConstantBuilder builder : constBuilders) {
368                 constants.add(builder.toInstance(this));
369             }
370             return Collections.unmodifiableList(constants);
371         }
372
373         private List<GeneratedProperty> toUnmodifiableProperties(
374                 final List<GeneratedPropertyBuilder> propBuilders) {
375             final List<GeneratedProperty> constants = new ArrayList<GeneratedProperty>();
376             for (final GeneratedPropertyBuilder builder : propBuilders) {
377                 constants.add(builder.toInstance(this));
378             }
379             return Collections.unmodifiableList(constants);
380         }
381
382         public GeneratedTransferObjectImpl(String packageName, String name,
383                 List<EnumBuilder> enumBuilders,
384                 List<GeneratedPropertyBuilder> propBuilers,
385                 List<GeneratedPropertyBuilder> equalsBuilers,
386                 List<GeneratedPropertyBuilder> hashCodeBuilers,
387                 List<GeneratedPropertyBuilder> stringBuilers) {
388             super();
389             this.packageName = packageName;
390             this.name = name;
391             this.enumerations = toUnmodifiableEnumerations(enumBuilders);
392             this.properties = toUnmodifiableProperties(propBuilers);
393             this.equalsProperties = toUnmodifiableProperties(equalsBuilers);
394             this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers);
395             this.stringProperties = toUnmodifiableProperties(stringBuilers);
396         }
397
398         @Override
399         public String getPackageName() {
400             return packageName;
401         }
402
403         @Override
404         public String getName() {
405             return name;
406         }
407
408         @Override
409         public List<Enumeration> getEnumDefintions() {
410             return enumerations;
411         }
412
413         @Override
414         public List<GeneratedProperty> getProperties() {
415             return properties;
416         }
417
418         @Override
419         public List<GeneratedProperty> getEqualsIdentifiers() {
420             return equalsProperties;
421         }
422
423         @Override
424         public List<GeneratedProperty> getHashCodeIdentifiers() {
425             return hashCodeProperties;
426         }
427
428         @Override
429         public List<GeneratedProperty> getToStringIdentifiers() {
430             return stringProperties;
431         }
432
433         /*
434          * (non-Javadoc)
435          * 
436          * @see java.lang.Object#hashCode()
437          */
438         @Override
439         public int hashCode() {
440             final int prime = 31;
441             int result = 1;
442             result = prime * result
443                     + ((enumerations == null) ? 0 : enumerations.hashCode());
444             result = prime
445                     * result
446                     + ((equalsProperties == null) ? 0 : equalsProperties
447                             .hashCode());
448             result = prime
449                     * result
450                     + ((hashCodeProperties == null) ? 0 : hashCodeProperties
451                             .hashCode());
452             result = prime * result + ((name == null) ? 0 : name.hashCode());
453             result = prime * result
454                     + ((packageName == null) ? 0 : packageName.hashCode());
455             result = prime * result
456                     + ((properties == null) ? 0 : properties.hashCode());
457             result = prime
458                     * result
459                     + ((stringProperties == null) ? 0 : stringProperties
460                             .hashCode());
461             return result;
462         }
463
464         /*
465          * (non-Javadoc)
466          * 
467          * @see java.lang.Object#equals(java.lang.Object)
468          */
469         @Override
470         public boolean equals(Object obj) {
471             if (this == obj) {
472                 return true;
473             }
474             if (obj == null) {
475                 return false;
476             }
477             if (getClass() != obj.getClass()) {
478                 return false;
479             }
480             GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) obj;
481             if (enumerations == null) {
482                 if (other.enumerations != null) {
483                     return false;
484                 }
485             } else if (!enumerations.equals(other.enumerations)) {
486                 return false;
487             }
488             if (equalsProperties == null) {
489                 if (other.equalsProperties != null) {
490                     return false;
491                 }
492             } else if (!equalsProperties.equals(other.equalsProperties)) {
493                 return false;
494             }
495             if (hashCodeProperties == null) {
496                 if (other.hashCodeProperties != null) {
497                     return false;
498                 }
499             } else if (!hashCodeProperties.equals(other.hashCodeProperties)) {
500                 return false;
501             }
502             if (name == null) {
503                 if (other.name != null) {
504                     return false;
505                 }
506             } else if (!name.equals(other.name)) {
507                 return false;
508             }
509             if (packageName == null) {
510                 if (other.packageName != null) {
511                     return false;
512                 }
513             } else if (!packageName.equals(other.packageName)) {
514                 return false;
515             }
516             if (properties == null) {
517                 if (other.properties != null) {
518                     return false;
519                 }
520             } else if (!properties.equals(other.properties)) {
521                 return false;
522             }
523             if (stringProperties == null) {
524                 if (other.stringProperties != null) {
525                     return false;
526                 }
527             } else if (!stringProperties.equals(other.stringProperties)) {
528                 return false;
529             }
530             return true;
531         }
532
533         /*
534          * (non-Javadoc)
535          * 
536          * @see java.lang.Object#toString()
537          */
538         @Override
539         public String toString() {
540             StringBuilder builder = new StringBuilder();
541             builder.append("GeneratedTransferObjectImpl [packageName=");
542             builder.append(packageName);
543             builder.append(", name=");
544             builder.append(name);
545             builder.append(", enumerations=");
546             builder.append(enumerations);
547             builder.append(", properties=");
548             builder.append(properties);
549             builder.append(", equalsProperties=");
550             builder.append(equalsProperties);
551             builder.append(", hashCodeProperties=");
552             builder.append(hashCodeProperties);
553             builder.append(", stringProperties=");
554             builder.append(stringProperties);
555             builder.append("]");
556             return builder.toString();
557         }
558     }
559 }