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;
22 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
25 private GeneratedTransferObject extendsType;
26 private final ArrayList<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
27 private final ArrayList<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
28 private final ArrayList<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;
35 public GeneratedTOBuilderImpl(final String packageName, final String name) {
36 super(packageName, name);
41 public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
42 if (genTransObj == null) {
43 throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
45 extendsType = genTransObj;
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)}
61 * @return <code>new</code> instance of Method Signature Builder.
64 public MethodSignatureBuilder addMethod(final String name) {
65 final MethodSignatureBuilder builder = super.addMethod(name);
66 builder.setAbstract(false);
71 public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
72 equalsProperties.add(property);
77 public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
78 hashProperties.add(property);
83 public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
84 toStringProperties.add(property);
89 protected GeneratedTOBuilder thisInstance() {
94 public void setRestrictions(final Restrictions restrictions) {
95 this.restrictions = restrictions;
99 public void setSUID(final GeneratedPropertyBuilder suid) {
104 public GeneratedTransferObject toInstance() {
105 // FIXME: can we compact the arrays now? It needs to be thread-safe, though
106 return new GeneratedTransferObjectImpl(this);
110 public String toString() {
111 StringBuilder builder = new StringBuilder();
112 builder.append("GeneratedTransferObject [packageName=");
113 builder.append(getPackageName());
114 builder.append(", name=");
115 builder.append(getName());
116 builder.append(", comment=");
117 builder.append(getComment());
118 builder.append(", constants=");
119 builder.append(getConstants());
120 builder.append(", enumerations=");
121 builder.append(getEnumerations());
122 builder.append(", equalsProperties=");
123 builder.append(equalsProperties);
124 builder.append(", hashCodeProperties=");
125 builder.append(hashProperties);
126 builder.append(", stringProperties=");
127 builder.append(toStringProperties);
128 builder.append(", annotations=");
129 builder.append(getAnnotations());
130 builder.append(", methods=");
131 builder.append(getMethodDefinitions());
133 return builder.toString();
137 public void setTypedef(final boolean isTypedef) {
138 this.isTypedef = isTypedef;
142 public void setIsUnion(final boolean isUnion) {
143 this.isUnionType = isUnion;
147 public void setIsUnionBuilder(final boolean isUnionTypeBuilder) {
148 this.isUnionTypeBuilder = isUnionTypeBuilder;
151 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
152 GeneratedTransferObject {
154 private final List<GeneratedProperty> equalsProperties;
155 private final List<GeneratedProperty> hashCodeProperties;
156 private final List<GeneratedProperty> stringProperties;
157 private final GeneratedTransferObject extendsType;
158 private final boolean isTypedef;
159 private final boolean isUnionType;
160 private final boolean isUnionTypeBuilder;
161 private final Restrictions restrictions;
162 private final GeneratedProperty SUID;
164 public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
166 this.extendsType = builder.extendsType;
167 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
168 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
169 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
170 this.isTypedef = builder.isTypedef;
171 this.isUnionType = builder.isUnionType;
172 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
173 this.restrictions = builder.restrictions;
174 if (builder.SUID == null) {
177 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
182 public boolean isTypedef() {
187 public boolean isUnionType() {
192 public boolean isUnionTypeBuilder() {
193 return isUnionTypeBuilder;
197 public GeneratedTransferObject getSuperType() {
202 public List<GeneratedProperty> getEqualsIdentifiers() {
203 return equalsProperties;
207 public List<GeneratedProperty> getHashCodeIdentifiers() {
208 return hashCodeProperties;
212 public List<GeneratedProperty> getToStringIdentifiers() {
213 return stringProperties;
217 public Restrictions getRestrictions() {
222 public GeneratedProperty getSUID() {
227 public String toString() {
229 return serializeTypedef(this);
231 StringBuilder builder = new StringBuilder();
232 builder.append("GeneratedTransferObject [packageName=");
233 builder.append(getPackageName());
234 builder.append(", name=");
235 builder.append(getName());
236 builder.append(", comment=");
237 builder.append(", annotations=");
238 builder.append(getAnnotations());
239 builder.append(getComment());
240 builder.append(", extends=");
241 builder.append(getSuperType());
242 builder.append(", implements=");
243 builder.append(getImplements());
244 builder.append(", enclosedTypes=");
245 builder.append(getEnclosedTypes());
246 builder.append(", constants=");
247 builder.append(getConstantDefinitions());
248 builder.append(", enumerations=");
249 builder.append(getEnumerations());
250 builder.append(", properties=");
251 builder.append(getProperties());
252 builder.append(", equalsProperties=");
253 builder.append(equalsProperties);
254 builder.append(", hashCodeProperties=");
255 builder.append(hashCodeProperties);
256 builder.append(", stringProperties=");
257 builder.append(stringProperties);
258 builder.append(", methods=");
259 builder.append(getMethodDefinitions());
261 return builder.toString();
264 public String serializeTypedef(final Type type) {
265 if (type instanceof ParameterizedType) {
266 ParameterizedType parameterizedType = (ParameterizedType) type;
267 StringBuffer sb = new StringBuffer();
268 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
270 boolean first = true;
271 for (Type parameter : parameterizedType.getActualTypeArguments()) {
277 sb.append(serializeTypedef(parameter));
280 return sb.toString();
282 return type.getFullyQualifiedName();