Bug 6859: Cleanup package names for mdsal-binding-generator-util module
[mdsal.git] / binding / mdsal-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 com.google.common.base.Preconditions;
11 import java.util.Collections;
12 import java.util.List;
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 import org.opendaylight.yangtools.util.LazyCollections;
22 import org.opendaylight.yangtools.yang.common.QName;
23 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
24
25 /**
26  * @deprecated Use {@link org.opendaylight.mdsal.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl} instead.
27  */
28 @Deprecated
29 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements GeneratedTOBuilder {
30
31     private GeneratedTransferObject extendsType;
32     private List<GeneratedPropertyBuilder> equalsProperties = Collections.emptyList();
33     private List<GeneratedPropertyBuilder> hashProperties = Collections.emptyList();
34     private List<GeneratedPropertyBuilder> toStringProperties = Collections.emptyList();
35     private boolean isTypedef = false;
36     private boolean isUnionType = false;
37     private boolean isUnionTypeBuilder = false;
38     private TypeDefinition<?> baseType = null;
39     private Restrictions restrictions;
40     private GeneratedPropertyBuilder SUID;
41     private String reference;
42     private String description;
43     private String moduleName;
44     private Iterable<QName> schemaPath;
45
46     public GeneratedTOBuilderImpl(final String packageName, final String name) {
47         super(packageName, name);
48         setAbstract(false);
49     }
50
51     @Override
52     public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
53         Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
54         extendsType = genTransObj;
55         return this;
56     }
57
58     /**
59      * Add new Method Signature definition for Generated Type Builder and
60      * returns Method Signature Builder for specifying all Method parameters. <br>
61      * Name of Method cannot be <code>null</code>, if it is <code>null</code>
62      * the method SHOULD throw {@link IllegalArgumentException} <br>
63      * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
64      * {@link MethodSignatureBuilder#setAbstract(boolean)},
65      * {TypeMemberBuilder#setFinal(boolean)} and
66      * {TypeMemberBuilder#setAccessModifier(boolean)}
67      *
68      * @param name
69      *            Name of Method
70      * @return <code>new</code> instance of Method Signature Builder.
71      */
72     @Override
73     public MethodSignatureBuilder addMethod(final String name) {
74         final MethodSignatureBuilder builder = super.addMethod(name);
75         builder.setAbstract(false);
76         return builder;
77     }
78
79     @Override
80     public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
81         equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
82         return this;
83     }
84
85     @Override
86     public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
87         hashProperties = LazyCollections.lazyAdd(hashProperties, property);
88         return this;
89     }
90
91     @Override
92     public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
93         toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
94         return this;
95     }
96
97     @Override
98     protected GeneratedTOBuilder thisInstance() {
99         return this;
100     }
101
102     @Override
103     public void setRestrictions(final Restrictions restrictions) {
104         this.restrictions = restrictions;
105     }
106
107     @Override
108     public void setSUID(final GeneratedPropertyBuilder suid) {
109         this.SUID = suid;
110     }
111
112     @Override
113     public GeneratedTransferObject toInstance() {
114         return new GeneratedTransferObjectImpl(this);
115     }
116
117     @Override
118     public String toString() {
119         StringBuilder builder = new StringBuilder();
120         builder.append("GeneratedTransferObject [packageName=");
121         builder.append(getPackageName());
122         builder.append(", name=");
123         builder.append(getName());
124         builder.append(", comment=");
125         builder.append(getComment());
126         builder.append(", constants=");
127         builder.append(getConstants());
128         builder.append(", enumerations=");
129         builder.append(getEnumerations());
130         builder.append(", equalsProperties=");
131         builder.append(equalsProperties);
132         builder.append(", hashCodeProperties=");
133         builder.append(hashProperties);
134         builder.append(", stringProperties=");
135         builder.append(toStringProperties);
136         builder.append(", annotations=");
137         builder.append(getAnnotations());
138         builder.append(", methods=");
139         builder.append(getMethodDefinitions());
140         builder.append("]");
141         return builder.toString();
142     }
143
144     @Override
145     public void setTypedef(final boolean isTypedef) {
146         this.isTypedef = isTypedef;
147     }
148
149     @Override
150     public void setBaseType(final TypeDefinition<?> typeDef) {
151         this.baseType = typeDef;
152     }
153
154     @Override
155     public void setIsUnion(final boolean isUnion) {
156         this.isUnionType = isUnion;
157     }
158
159     @Override
160     public void setIsUnionBuilder(final boolean isUnionTypeBuilder) {
161         this.isUnionTypeBuilder = isUnionTypeBuilder;
162     }
163
164     @Override
165     public void setDescription(String description) {
166         this.description = description;
167     }
168
169     @Override
170     public void setModuleName(String moduleName) {
171         this.moduleName = moduleName;
172     }
173
174     @Override
175     public void setSchemaPath(Iterable<QName> schemaPath) {
176         this.schemaPath = schemaPath;
177     }
178
179     @Override
180     public void setReference(String reference) {
181         this.reference = reference;
182     }
183
184     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
185     GeneratedTransferObject {
186
187         private final List<GeneratedProperty> equalsProperties;
188         private final List<GeneratedProperty> hashCodeProperties;
189         private final List<GeneratedProperty> stringProperties;
190         private final GeneratedTransferObject extendsType;
191         private final boolean isTypedef;
192         private final TypeDefinition<?> baseType;
193         private final boolean isUnionType;
194         private final boolean isUnionTypeBuilder;
195         private final Restrictions restrictions;
196         private final GeneratedProperty SUID;
197         private final String reference;
198         private final String description;
199         private final String moduleName;
200         private final Iterable<QName> schemaPath;
201
202         public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
203             super(builder);
204             this.extendsType = builder.extendsType;
205
206             // FIXME: if these fields were guaranteed to be constant, we could perhaps
207             //        cache and reuse them between instances...
208             this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
209             this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
210             this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
211
212             this.isTypedef = builder.isTypedef;
213             this.baseType = builder.baseType;
214             this.isUnionType = builder.isUnionType;
215             this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
216             this.restrictions = builder.restrictions;
217             this.reference = builder.reference;
218             this.description = builder.description;
219             this.moduleName = builder.moduleName;
220             this.schemaPath = builder.schemaPath;
221
222             if (builder.SUID == null) {
223                 this.SUID = null;
224             } else {
225                 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
226             }
227         }
228
229         @Override
230         public boolean isTypedef() {
231             return isTypedef;
232         }
233
234         @Override
235         public TypeDefinition<?> getBaseType() {
236             return baseType;
237         }
238
239         @Override
240         public boolean isUnionType() {
241             return isUnionType;
242         }
243
244         @Override
245         public boolean isUnionTypeBuilder() {
246             return isUnionTypeBuilder;
247         }
248
249         @Override
250         public GeneratedTransferObject getSuperType() {
251             return extendsType;
252         }
253
254         @Override
255         public List<GeneratedProperty> getEqualsIdentifiers() {
256             return equalsProperties;
257         }
258
259         @Override
260         public List<GeneratedProperty> getHashCodeIdentifiers() {
261             return hashCodeProperties;
262         }
263
264         @Override
265         public List<GeneratedProperty> getToStringIdentifiers() {
266             return stringProperties;
267         }
268
269         @Override
270         public Restrictions getRestrictions() {
271             return restrictions;
272         }
273
274         @Override
275         public GeneratedProperty getSUID() {
276             return SUID;
277         }
278
279         @Override
280         public String toString() {
281             if (isTypedef) {
282                 return serializeTypedef(this);
283             }
284             StringBuilder builder = new StringBuilder();
285             builder.append("GeneratedTransferObject [packageName=");
286             builder.append(getPackageName());
287             builder.append(", name=");
288             builder.append(getName());
289             builder.append(", comment=");
290             builder.append(", annotations=");
291             builder.append(getAnnotations());
292             builder.append(getComment());
293             builder.append(", extends=");
294             builder.append(getSuperType());
295             builder.append(", implements=");
296             builder.append(getImplements());
297             builder.append(", enclosedTypes=");
298             builder.append(getEnclosedTypes());
299             builder.append(", constants=");
300             builder.append(getConstantDefinitions());
301             builder.append(", enumerations=");
302             builder.append(getEnumerations());
303             builder.append(", properties=");
304             builder.append(getProperties());
305             builder.append(", equalsProperties=");
306             builder.append(equalsProperties);
307             builder.append(", hashCodeProperties=");
308             builder.append(hashCodeProperties);
309             builder.append(", stringProperties=");
310             builder.append(stringProperties);
311             builder.append(", methods=");
312             builder.append(getMethodDefinitions());
313             builder.append("]");
314             return builder.toString();
315         }
316
317         public String serializeTypedef(final Type type) {
318             if (type instanceof ParameterizedType) {
319                 ParameterizedType parameterizedType = (ParameterizedType) type;
320                 StringBuilder sb = new StringBuilder();
321                 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
322                 sb.append('<');
323                 boolean first = true;
324                 for (Type parameter : parameterizedType.getActualTypeArguments()) {
325                     if (first) {
326                         first = false;
327                     } else {
328                         sb.append(',');
329                     }
330                     sb.append(serializeTypedef(parameter));
331                 }
332                 sb.append('>');
333                 return sb.toString();
334             } else {
335                 return type.getFullyQualifiedName();
336             }
337         }
338
339         @Override
340         public String getDescription() {
341             return description;
342         }
343
344         @Override
345         public String getReference() {
346             return reference;
347         }
348
349         @Override
350         public Iterable<QName> getSchemaPath() {
351             return schemaPath;
352         }
353
354         @Override
355         public String getModuleName() {
356             return moduleName;
357         }
358     }
359 }