Maping of union leaf a bits leaf YANG type to JAVA inner classes.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-util / src / main / java / org / opendaylight / controller / binding / generator / util / generated / type / builder / 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.binding.generator.util.generated.type.builder;
9
10 import org.opendaylight.controller.sal.binding.model.api.*;
11 import org.opendaylight.controller.sal.binding.model.api.type.builder.*;
12
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16
17 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {
18
19     private GeneratedTransferObject extendsType;
20     private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();
21     private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
22     private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
23     private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
24     private boolean isUnionType = false;
25
26     public GeneratedTOBuilderImpl(String packageName, String name) {
27         super(packageName, name);
28         setAbstract(false);
29     }
30
31     @Override
32     public void setExtendsType(final GeneratedTransferObject genTransObj) {
33         if (genTransObj == null) {
34             throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
35         }
36         extendsType = genTransObj;
37     }
38
39     @Override
40     public GeneratedPropertyBuilder addProperty(String name) {
41         final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);
42         builder.setAccessModifier(AccessModifier.PUBLIC);
43         properties.add(builder);
44         return builder;
45     }
46
47     @Override
48     public boolean containsProperty(String name) {
49         if (name == null) {
50             throw new IllegalArgumentException("Parameter name can't be null");
51         }
52         for (GeneratedPropertyBuilder property : properties) {
53             if (name.equals(property.getName())) {
54                 return true;
55             }
56         }
57         return false;
58     }
59
60     /**
61      * Add new Method Signature definition for Generated Type Builder and
62      * returns Method Signature Builder for specifying all Method parameters. <br>
63      * Name of Method cannot be <code>null</code>, if it is <code>null</code>
64      * the method SHOULD throw {@link IllegalArgumentException} <br>
65      * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
66      * {@link MethodSignatureBuilder#setAbstract(false)},
67      * {@link MethodSignatureBuilder#setFinal(false)} and
68      * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}
69      * 
70      * @param name
71      *            Name of Method
72      * @return <code>new</code> instance of Method Signature Builder.
73      */
74     @Override
75     public MethodSignatureBuilder addMethod(String name) {
76         final MethodSignatureBuilder builder = super.addMethod(name);
77         builder.setAbstract(false);
78         return builder;
79     }
80
81     @Override
82     public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
83         return equalsProperties.add(property);
84     }
85
86     @Override
87     public boolean addHashIdentity(GeneratedPropertyBuilder property) {
88         return hashProperties.add(property);
89     }
90
91     @Override
92     public boolean addToStringProperty(GeneratedPropertyBuilder property) {
93         return toStringProperties.add(property);
94     }
95
96     @Override
97     public GeneratedTransferObject toInstance() {
98         return new GeneratedTransferObjectImpl(null, getPackageName(), getName(), getComment(), getAnnotations(),
99                 isAbstract(), extendsType, getImplementsTypes(), getEnclosedTypes(), getEnclosedTransferObjects(),
100                 getConstants(), getEnumerations(), getMethodDefinitions(), properties, equalsProperties,
101                 hashProperties, toStringProperties, isUnionType);
102     }
103
104     @Override
105     public String toString() {
106         StringBuilder builder = new StringBuilder();
107         builder.append("GeneratedTransferObject [packageName=");
108         builder.append(getPackageName());
109         builder.append(", name=");
110         builder.append(getName());
111         builder.append(", comment=");
112         builder.append(getComment());
113         builder.append(", constants=");
114         builder.append(getConstants());
115         builder.append(", enumerations=");
116         builder.append(getEnumerations());
117         builder.append(", properties=");
118         builder.append(properties);
119         builder.append(", equalsProperties=");
120         builder.append(equalsProperties);
121         builder.append(", hashCodeProperties=");
122         builder.append(hashProperties);
123         builder.append(", stringProperties=");
124         builder.append(toStringProperties);
125         builder.append(", annotations=");
126         builder.append(getAnnotations());
127         builder.append(", methods=");
128         builder.append(getMethodDefinitions());
129         builder.append("]");
130         return builder.toString();
131     }
132
133     @Override
134     public void setIsUnion(boolean isUnion) {
135         this.isUnionType = isUnion;
136     }
137
138     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
139             GeneratedTransferObject {
140
141         private final List<GeneratedProperty> properties;
142         private final List<GeneratedProperty> equalsProperties;
143         private final List<GeneratedProperty> hashCodeProperties;
144         private final List<GeneratedProperty> stringProperties;
145         private final GeneratedTransferObject extendsType;
146         private final boolean isUnionType;
147
148         GeneratedTransferObjectImpl(final Type parent, final String packageName, final String name,
149                 final String comment, final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
150                 final GeneratedTransferObject extendsType, final List<Type> implementsTypes,
151                 final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
152                 final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<Constant> constants,
153                 final List<EnumBuilder> enumBuilders, final List<MethodSignatureBuilder> methodBuilders,
154                 final List<GeneratedPropertyBuilder> propBuilders, final List<GeneratedPropertyBuilder> equalsBuilders,
155                 final List<GeneratedPropertyBuilder> hashCodeBuilders,
156                 final List<GeneratedPropertyBuilder> stringBuilders, final boolean isUnionType) {
157             super(parent, packageName, name, comment, annotationBuilders, isAbstract, implementsTypes,
158                     enclosedGenTypeBuilders, enclosedGenTOBuilders, enumBuilders, constants, methodBuilders);
159             this.extendsType = extendsType;
160             this.properties = toUnmodifiableProperties(propBuilders);
161             this.equalsProperties = toUnmodifiableProperties(equalsBuilders);
162             this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilders);
163             this.stringProperties = toUnmodifiableProperties(stringBuilders);
164             this.isUnionType = isUnionType;
165         }
166
167         @Override
168         public boolean isUnionType() {
169             return isUnionType;
170         }
171
172         private List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> propBuilders) {
173             final List<GeneratedProperty> properties = new ArrayList<>();
174             for (final GeneratedPropertyBuilder builder : propBuilders) {
175                 properties.add(builder.toInstance(this));
176             }
177             return Collections.unmodifiableList(properties);
178         }
179
180         @Override
181         public GeneratedTransferObject getExtends() {
182             return extendsType;
183         }
184
185         @Override
186         public List<GeneratedProperty> getProperties() {
187             return properties;
188         }
189
190         @Override
191         public List<GeneratedProperty> getEqualsIdentifiers() {
192             return equalsProperties;
193         }
194
195         @Override
196         public List<GeneratedProperty> getHashCodeIdentifiers() {
197             return hashCodeProperties;
198         }
199
200         @Override
201         public List<GeneratedProperty> getToStringIdentifiers() {
202             return stringProperties;
203         }
204
205         @Override
206         public String toString() {
207             StringBuilder builder = new StringBuilder();
208             builder.append("GeneratedTransferObject [packageName=");
209             builder.append(getPackageName());
210             builder.append(", name=");
211             builder.append(getName());
212             builder.append(", comment=");
213             builder.append(", annotations=");
214             builder.append(getAnnotations());
215             builder.append(getComment());
216             builder.append(", extends=");
217             builder.append(getExtends());
218             builder.append(", implements=");
219             builder.append(getImplements());
220             builder.append(", enclosedTypes=");
221             builder.append(getEnclosedTypes());
222             builder.append(", constants=");
223             builder.append(getConstantDefinitions());
224             builder.append(", enumerations=");
225             builder.append(getEnumerations());
226             builder.append(", properties=");
227             builder.append(properties);
228             builder.append(", equalsProperties=");
229             builder.append(equalsProperties);
230             builder.append(", hashCodeProperties=");
231             builder.append(hashCodeProperties);
232             builder.append(", stringProperties=");
233             builder.append(stringProperties);
234             builder.append(", methods=");
235             builder.append(getMethodDefinitions());
236             builder.append("]");
237             return builder.toString();
238         }
239     }
240 }