Bug 735 - Part 1: Update ietf-restconf and ietf-yangtypes to newer versions
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / 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.yangtools.binding.generator.util.generated.type.builder;
9
10 import java.util.ArrayList;
11 import java.util.List;
12
13 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
14 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
15 import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType;
16 import org.opendaylight.yangtools.sal.binding.model.api.Restrictions;
17 import org.opendaylight.yangtools.sal.binding.model.api.Type;
18 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
19 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
20 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
21
22 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
23         GeneratedTOBuilder {
24
25     private GeneratedTransferObject extendsType;
26     private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
27     private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
28     private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
29     private boolean isTypedef = false;
30     private boolean isUnionType = false;
31     private boolean isUnionTypeBuilder = false;
32     private Restrictions restrictions;
33     private GeneratedPropertyBuilder SUID;
34
35     public GeneratedTOBuilderImpl(String packageName, String name) {
36         super(packageName, name);
37         setAbstract(false);
38     }
39
40     @Override
41     public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
42         if (genTransObj == null) {
43             throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
44         }
45         extendsType = genTransObj;
46         return this;
47     }
48
49     /**
50      * Add new Method Signature definition for Generated Type Builder and
51      * returns Method Signature Builder for specifying all Method parameters. <br>
52      * Name of Method cannot be <code>null</code>, if it is <code>null</code>
53      * the method SHOULD throw {@link IllegalArgumentException} <br>
54      * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
55      * {@link MethodSignatureBuilder#setAbstract(boolean)},
56      * {TypeMemberBuilder#setFinal(boolean)} and
57      * {TypeMemberBuilder#setAccessModifier(boolean)}
58      *
59      * @param name
60      *            Name of Method
61      * @return <code>new</code> instance of Method Signature Builder.
62      */
63     @Override
64     public MethodSignatureBuilder addMethod(String name) {
65         final MethodSignatureBuilder builder = super.addMethod(name);
66         builder.setAbstract(false);
67         return builder;
68     }
69
70     @Override
71     public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
72         equalsProperties.add(property);
73         return this;
74     }
75
76     @Override
77     public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
78         hashProperties.add(property);
79         return this;
80     }
81
82     @Override
83     public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
84         toStringProperties.add(property);
85         return this;
86     }
87
88     @Override
89     protected GeneratedTOBuilder thisInstance() {
90         return this;
91     }
92
93     @Override
94     public void setRestrictions(Restrictions restrictions) {
95         this.restrictions = restrictions;
96     }
97
98     @Override
99     public void setSUID(GeneratedPropertyBuilder suid) {
100         this.SUID = suid;
101     }
102
103     @Override
104     public GeneratedTransferObject toInstance() {
105         return new GeneratedTransferObjectImpl(this);
106     }
107
108     @Override
109     public String toString() {
110         StringBuilder builder = new StringBuilder();
111         builder.append("GeneratedTransferObject [packageName=");
112         builder.append(getPackageName());
113         builder.append(", name=");
114         builder.append(getName());
115         builder.append(", comment=");
116         builder.append(getComment());
117         builder.append(", constants=");
118         builder.append(getConstants());
119         builder.append(", enumerations=");
120         builder.append(getEnumerations());
121         builder.append(", equalsProperties=");
122         builder.append(equalsProperties);
123         builder.append(", hashCodeProperties=");
124         builder.append(hashProperties);
125         builder.append(", stringProperties=");
126         builder.append(toStringProperties);
127         builder.append(", annotations=");
128         builder.append(getAnnotations());
129         builder.append(", methods=");
130         builder.append(getMethodDefinitions());
131         builder.append("]");
132         return builder.toString();
133     }
134
135     @Override
136     public void setTypedef(boolean isTypedef) {
137         this.isTypedef = isTypedef;
138     }
139
140     @Override
141     public void setIsUnion(boolean isUnion) {
142         this.isUnionType = isUnion;
143     }
144
145     @Override
146     public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
147         this.isUnionTypeBuilder = isUnionTypeBuilder;
148     }
149
150     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
151             GeneratedTransferObject {
152
153         private final List<GeneratedProperty> equalsProperties;
154         private final List<GeneratedProperty> hashCodeProperties;
155         private final List<GeneratedProperty> stringProperties;
156         private final GeneratedTransferObject extendsType;
157         private final boolean isTypedef;
158         private final boolean isUnionType;
159         private final boolean isUnionTypeBuilder;
160         private final Restrictions restrictions;
161         private final GeneratedProperty SUID;
162
163         public GeneratedTransferObjectImpl(GeneratedTOBuilderImpl builder) {
164             super(builder);
165             this.extendsType = builder.extendsType;
166             this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
167             this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
168             this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
169             this.isTypedef = builder.isTypedef;
170             this.isUnionType = builder.isUnionType;
171             this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
172             this.restrictions = builder.restrictions;
173             if (builder.SUID == null) {
174                 this.SUID = null;
175             } else {
176                 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
177             }
178         }
179
180         @Override
181         public boolean isTypedef() {
182             return isTypedef;
183         }
184
185         @Override
186         public boolean isUnionType() {
187             return isUnionType;
188         }
189
190         @Override
191         public boolean isUnionTypeBuilder() {
192             return isUnionTypeBuilder;
193         }
194
195         @Override
196         public GeneratedTransferObject getSuperType() {
197             return extendsType;
198         }
199
200         @Override
201         public List<GeneratedProperty> getEqualsIdentifiers() {
202             return equalsProperties;
203         }
204
205         @Override
206         public List<GeneratedProperty> getHashCodeIdentifiers() {
207             return hashCodeProperties;
208         }
209
210         @Override
211         public List<GeneratedProperty> getToStringIdentifiers() {
212             return stringProperties;
213         }
214
215         @Override
216         public Restrictions getRestrictions() {
217             return restrictions;
218         }
219
220         @Override
221         public GeneratedProperty getSUID() {
222             return SUID;
223         }
224
225         @Override
226         public String toString() {
227             if(isTypedef) {
228                 return serializeTypedef(this);
229             }
230             StringBuilder builder = new StringBuilder();
231             builder.append("GeneratedTransferObject [packageName=");
232             builder.append(getPackageName());
233             builder.append(", name=");
234             builder.append(getName());
235             builder.append(", comment=");
236             builder.append(", annotations=");
237             builder.append(getAnnotations());
238             builder.append(getComment());
239             builder.append(", extends=");
240             builder.append(getSuperType());
241             builder.append(", implements=");
242             builder.append(getImplements());
243             builder.append(", enclosedTypes=");
244             builder.append(getEnclosedTypes());
245             builder.append(", constants=");
246             builder.append(getConstantDefinitions());
247             builder.append(", enumerations=");
248             builder.append(getEnumerations());
249             builder.append(", properties=");
250             builder.append(getProperties());
251             builder.append(", equalsProperties=");
252             builder.append(equalsProperties);
253             builder.append(", hashCodeProperties=");
254             builder.append(hashCodeProperties);
255             builder.append(", stringProperties=");
256             builder.append(stringProperties);
257             builder.append(", methods=");
258             builder.append(getMethodDefinitions());
259             builder.append("]");
260             return builder.toString();
261         }
262
263         public String serializeTypedef(Type type) {
264             if (type instanceof ParameterizedType) {
265                 ParameterizedType parameterizedType = (ParameterizedType) type;
266                 StringBuffer sb = new StringBuffer();
267                 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
268                 sb.append("<");
269                 boolean first = true;
270                 for (Type parameter : parameterizedType.getActualTypeArguments()) {
271                     if (first) {
272                         first = false;
273                     } else {
274                         sb.append(",");
275                     }
276                     sb.append(serializeTypedef(parameter));
277                 }
278                 sb.append(">");
279                 return sb.toString();
280             } else {
281                 return type.getFullyQualifiedName();
282             }
283         }
284
285     }
286 }