2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
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;
26 * @deprecated Use {@link org.opendaylight.mdsal.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl} instead.
29 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements GeneratedTOBuilder {
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;
46 public GeneratedTOBuilderImpl(final String packageName, final String name) {
47 super(packageName, name);
52 public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
53 Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
54 extendsType = genTransObj;
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)}
70 * @return <code>new</code> instance of Method Signature Builder.
73 public MethodSignatureBuilder addMethod(final String name) {
74 final MethodSignatureBuilder builder = super.addMethod(name);
75 builder.setAbstract(false);
80 public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
81 equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
86 public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
87 hashProperties = LazyCollections.lazyAdd(hashProperties, property);
92 public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
93 toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
98 protected GeneratedTOBuilder thisInstance() {
103 public void setRestrictions(final Restrictions restrictions) {
104 this.restrictions = restrictions;
108 public void setSUID(final GeneratedPropertyBuilder suid) {
113 public GeneratedTransferObject toInstance() {
114 return new GeneratedTransferObjectImpl(this);
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());
141 return builder.toString();
145 public void setTypedef(final boolean isTypedef) {
146 this.isTypedef = isTypedef;
150 public void setBaseType(final TypeDefinition<?> typeDef) {
151 this.baseType = typeDef;
155 public void setIsUnion(final boolean isUnion) {
156 this.isUnionType = isUnion;
160 public void setIsUnionBuilder(final boolean isUnionTypeBuilder) {
161 this.isUnionTypeBuilder = isUnionTypeBuilder;
165 public void setDescription(String description) {
166 this.description = description;
170 public void setModuleName(String moduleName) {
171 this.moduleName = moduleName;
175 public void setSchemaPath(Iterable<QName> schemaPath) {
176 this.schemaPath = schemaPath;
180 public void setReference(String reference) {
181 this.reference = reference;
184 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
185 GeneratedTransferObject {
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;
202 public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
204 this.extendsType = builder.extendsType;
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);
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;
222 if (builder.SUID == null) {
225 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
230 public boolean isTypedef() {
235 public TypeDefinition<?> getBaseType() {
240 public boolean isUnionType() {
245 public boolean isUnionTypeBuilder() {
246 return isUnionTypeBuilder;
250 public GeneratedTransferObject getSuperType() {
255 public List<GeneratedProperty> getEqualsIdentifiers() {
256 return equalsProperties;
260 public List<GeneratedProperty> getHashCodeIdentifiers() {
261 return hashCodeProperties;
265 public List<GeneratedProperty> getToStringIdentifiers() {
266 return stringProperties;
270 public Restrictions getRestrictions() {
275 public GeneratedProperty getSUID() {
280 public String toString() {
282 return serializeTypedef(this);
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());
314 return builder.toString();
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());
323 boolean first = true;
324 for (Type parameter : parameterizedType.getActualTypeArguments()) {
330 sb.append(serializeTypedef(parameter));
333 return sb.toString();
335 return type.getFullyQualifiedName();
340 public String getDescription() {
345 public String getReference() {
350 public Iterable<QName> getSchemaPath() {
355 public String getModuleName() {