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 java.util.ArrayList;
11 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.yang.common.QName;
23 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
26 private GeneratedTransferObject extendsType;
27 private final ArrayList<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
28 private final ArrayList<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
29 private final ArrayList<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
30 private boolean isTypedef = false;
31 private boolean isUnionType = false;
32 private boolean isUnionTypeBuilder = false;
33 private Restrictions restrictions;
34 private GeneratedPropertyBuilder SUID;
35 private String reference;
36 private String description;
37 private String moduleName;
38 private Iterable<QName> schemaPath;
40 public GeneratedTOBuilderImpl(final String packageName, final String name) {
41 super(packageName, name);
46 public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
47 if (genTransObj == null) {
48 throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
50 extendsType = genTransObj;
55 * Add new Method Signature definition for Generated Type Builder and
56 * returns Method Signature Builder for specifying all Method parameters. <br>
57 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
58 * the method SHOULD throw {@link IllegalArgumentException} <br>
59 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
60 * {@link MethodSignatureBuilder#setAbstract(boolean)},
61 * {TypeMemberBuilder#setFinal(boolean)} and
62 * {TypeMemberBuilder#setAccessModifier(boolean)}
66 * @return <code>new</code> instance of Method Signature Builder.
69 public MethodSignatureBuilder addMethod(final String name) {
70 final MethodSignatureBuilder builder = super.addMethod(name);
71 builder.setAbstract(false);
76 public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
77 equalsProperties.add(property);
82 public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
83 hashProperties.add(property);
88 public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
89 toStringProperties.add(property);
94 protected GeneratedTOBuilder thisInstance() {
99 public void setRestrictions(final Restrictions restrictions) {
100 this.restrictions = restrictions;
104 public void setSUID(final GeneratedPropertyBuilder suid) {
109 public GeneratedTransferObject toInstance() {
110 // FIXME: can we compact the arrays now? It needs to be thread-safe,
112 return new GeneratedTransferObjectImpl(this);
116 public String toString() {
117 StringBuilder builder = new StringBuilder();
118 builder.append("GeneratedTransferObject [packageName=");
119 builder.append(getPackageName());
120 builder.append(", name=");
121 builder.append(getName());
122 builder.append(", comment=");
123 builder.append(getComment());
124 builder.append(", constants=");
125 builder.append(getConstants());
126 builder.append(", enumerations=");
127 builder.append(getEnumerations());
128 builder.append(", equalsProperties=");
129 builder.append(equalsProperties);
130 builder.append(", hashCodeProperties=");
131 builder.append(hashProperties);
132 builder.append(", stringProperties=");
133 builder.append(toStringProperties);
134 builder.append(", annotations=");
135 builder.append(getAnnotations());
136 builder.append(", methods=");
137 builder.append(getMethodDefinitions());
139 return builder.toString();
143 public void setTypedef(final boolean isTypedef) {
144 this.isTypedef = isTypedef;
148 public void setIsUnion(final boolean isUnion) {
149 this.isUnionType = isUnion;
153 public void setIsUnionBuilder(final boolean isUnionTypeBuilder) {
154 this.isUnionTypeBuilder = isUnionTypeBuilder;
158 public void setDescription(String description) {
159 this.description = description;
163 public void setModuleName(String moduleName) {
164 this.moduleName = moduleName;
168 public void setSchemaPath(Iterable<QName> schemaPath) {
169 this.schemaPath = schemaPath;
173 public void setReference(String reference) {
174 this.reference = reference;
177 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
178 GeneratedTransferObject {
180 private final List<GeneratedProperty> equalsProperties;
181 private final List<GeneratedProperty> hashCodeProperties;
182 private final List<GeneratedProperty> stringProperties;
183 private final GeneratedTransferObject extendsType;
184 private final boolean isTypedef;
185 private final boolean isUnionType;
186 private final boolean isUnionTypeBuilder;
187 private final Restrictions restrictions;
188 private final GeneratedProperty SUID;
189 private final String reference;
190 private final String description;
191 private final String moduleName;
192 private final Iterable<QName> schemaPath;
194 public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
196 this.extendsType = builder.extendsType;
197 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
198 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
199 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
200 this.isTypedef = builder.isTypedef;
201 this.isUnionType = builder.isUnionType;
202 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
203 this.restrictions = builder.restrictions;
204 this.reference = builder.reference;
205 this.description = builder.description;
206 this.moduleName = builder.moduleName;
207 this.schemaPath = builder.schemaPath;
209 if (builder.SUID == null) {
212 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
217 public boolean isTypedef() {
222 public boolean isUnionType() {
227 public boolean isUnionTypeBuilder() {
228 return isUnionTypeBuilder;
232 public GeneratedTransferObject getSuperType() {
237 public List<GeneratedProperty> getEqualsIdentifiers() {
238 return equalsProperties;
242 public List<GeneratedProperty> getHashCodeIdentifiers() {
243 return hashCodeProperties;
247 public List<GeneratedProperty> getToStringIdentifiers() {
248 return stringProperties;
252 public Restrictions getRestrictions() {
257 public GeneratedProperty getSUID() {
262 public String toString() {
264 return serializeTypedef(this);
266 StringBuilder builder = new StringBuilder();
267 builder.append("GeneratedTransferObject [packageName=");
268 builder.append(getPackageName());
269 builder.append(", name=");
270 builder.append(getName());
271 builder.append(", comment=");
272 builder.append(", annotations=");
273 builder.append(getAnnotations());
274 builder.append(getComment());
275 builder.append(", extends=");
276 builder.append(getSuperType());
277 builder.append(", implements=");
278 builder.append(getImplements());
279 builder.append(", enclosedTypes=");
280 builder.append(getEnclosedTypes());
281 builder.append(", constants=");
282 builder.append(getConstantDefinitions());
283 builder.append(", enumerations=");
284 builder.append(getEnumerations());
285 builder.append(", properties=");
286 builder.append(getProperties());
287 builder.append(", equalsProperties=");
288 builder.append(equalsProperties);
289 builder.append(", hashCodeProperties=");
290 builder.append(hashCodeProperties);
291 builder.append(", stringProperties=");
292 builder.append(stringProperties);
293 builder.append(", methods=");
294 builder.append(getMethodDefinitions());
296 return builder.toString();
299 public String serializeTypedef(final Type type) {
300 if (type instanceof ParameterizedType) {
301 ParameterizedType parameterizedType = (ParameterizedType) type;
302 StringBuffer sb = new StringBuffer();
303 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
305 boolean first = true;
306 for (Type parameter : parameterizedType.getActualTypeArguments()) {
312 sb.append(serializeTypedef(parameter));
315 return sb.toString();
317 return type.getFullyQualifiedName();
322 public String getDescription() {
327 public String getReference() {
332 public Iterable<QName> getSchemaPath() {
337 public String getModuleName() {