2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
\r
10 import java.util.ArrayList;
\r
11 import java.util.List;
\r
13 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
\r
14 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
\r
15 import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType;
\r
16 import org.opendaylight.yangtools.sal.binding.model.api.Restrictions;
\r
17 import org.opendaylight.yangtools.sal.binding.model.api.Type;
\r
18 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
\r
19 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
\r
20 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
\r
22 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
\r
23 GeneratedTOBuilder {
\r
25 private GeneratedTransferObject extendsType;
\r
26 private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
\r
27 private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
\r
28 private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
\r
29 private boolean isTypedef = false;
\r
30 private boolean isUnionType = false;
\r
31 private boolean isUnionTypeBuilder = false;
\r
32 private Restrictions restrictions;
\r
33 private GeneratedPropertyBuilder SUID;
\r
35 public GeneratedTOBuilderImpl(String packageName, String name) {
\r
36 super(packageName, name);
\r
41 public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
\r
42 if (genTransObj == null) {
\r
43 throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
\r
45 extendsType = genTransObj;
\r
50 * Add new Method Signature definition for Generated Type Builder and
\r
51 * returns Method Signature Builder for specifying all Method parameters. <br>
\r
52 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
\r
53 * the method SHOULD throw {@link IllegalArgumentException} <br>
\r
54 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
\r
55 * {@link MethodSignatureBuilder#setAbstract(boolean)},
\r
56 * {TypeMemberBuilder#setFinal(boolean)} and
\r
57 * {TypeMemberBuilder#setAccessModifier(boolean)}
\r
61 * @return <code>new</code> instance of Method Signature Builder.
\r
64 public MethodSignatureBuilder addMethod(String name) {
\r
65 final MethodSignatureBuilder builder = super.addMethod(name);
\r
66 builder.setAbstract(false);
\r
71 public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
\r
72 equalsProperties.add(property);
\r
77 public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
\r
78 hashProperties.add(property);
\r
83 public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
\r
84 toStringProperties.add(property);
\r
89 protected GeneratedTOBuilder thisInstance() {
\r
94 public void setRestrictions(Restrictions restrictions) {
\r
95 this.restrictions = restrictions;
\r
99 public void setSUID(GeneratedPropertyBuilder suid) {
\r
104 public GeneratedTransferObject toInstance() {
\r
105 return new GeneratedTransferObjectImpl(this);
\r
109 public String toString() {
\r
110 StringBuilder builder = new StringBuilder();
\r
111 builder.append("GeneratedTransferObject [packageName=");
\r
112 builder.append(getPackageName());
\r
113 builder.append(", name=");
\r
114 builder.append(getName());
\r
115 builder.append(", comment=");
\r
116 builder.append(getComment());
\r
117 builder.append(", constants=");
\r
118 builder.append(getConstants());
\r
119 builder.append(", enumerations=");
\r
120 builder.append(getEnumerations());
\r
121 builder.append(", equalsProperties=");
\r
122 builder.append(equalsProperties);
\r
123 builder.append(", hashCodeProperties=");
\r
124 builder.append(hashProperties);
\r
125 builder.append(", stringProperties=");
\r
126 builder.append(toStringProperties);
\r
127 builder.append(", annotations=");
\r
128 builder.append(getAnnotations());
\r
129 builder.append(", methods=");
\r
130 builder.append(getMethodDefinitions());
\r
131 builder.append("]");
\r
132 return builder.toString();
\r
136 public void setTypedef(boolean isTypedef) {
\r
137 this.isTypedef = isTypedef;
\r
141 public void setIsUnion(boolean isUnion) {
\r
142 this.isUnionType = isUnion;
\r
146 public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
\r
147 this.isUnionTypeBuilder = isUnionTypeBuilder;
\r
150 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
\r
151 GeneratedTransferObject {
\r
153 private final List<GeneratedProperty> equalsProperties;
\r
154 private final List<GeneratedProperty> hashCodeProperties;
\r
155 private final List<GeneratedProperty> stringProperties;
\r
156 private final GeneratedTransferObject extendsType;
\r
157 private final boolean isTypedef;
\r
158 private final boolean isUnionType;
\r
159 private final boolean isUnionTypeBuilder;
\r
160 private final Restrictions restrictions;
\r
161 private final GeneratedProperty SUID;
\r
163 public GeneratedTransferObjectImpl(GeneratedTOBuilderImpl builder) {
\r
165 this.extendsType = builder.extendsType;
\r
166 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
\r
167 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
\r
168 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
\r
169 this.isTypedef = builder.isTypedef;
\r
170 this.isUnionType = builder.isUnionType;
\r
171 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
\r
172 this.restrictions = builder.restrictions;
\r
173 if (builder.SUID == null) {
\r
176 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
\r
181 public boolean isTypedef() {
\r
186 public boolean isUnionType() {
\r
187 return isUnionType;
\r
191 public boolean isUnionTypeBuilder() {
\r
192 return isUnionTypeBuilder;
\r
196 public GeneratedTransferObject getSuperType() {
\r
197 return extendsType;
\r
201 public List<GeneratedProperty> getEqualsIdentifiers() {
\r
202 return equalsProperties;
\r
206 public List<GeneratedProperty> getHashCodeIdentifiers() {
\r
207 return hashCodeProperties;
\r
211 public List<GeneratedProperty> getToStringIdentifiers() {
\r
212 return stringProperties;
\r
216 public Restrictions getRestrictions() {
\r
217 return restrictions;
\r
221 public GeneratedProperty getSUID() {
\r
226 public String toString() {
\r
228 return serializeTypedef(this);
\r
230 StringBuilder builder = new StringBuilder();
\r
231 builder.append("GeneratedTransferObject [packageName=");
\r
232 builder.append(getPackageName());
\r
233 builder.append(", name=");
\r
234 builder.append(getName());
\r
235 builder.append(", comment=");
\r
236 builder.append(", annotations=");
\r
237 builder.append(getAnnotations());
\r
238 builder.append(getComment());
\r
239 builder.append(", extends=");
\r
240 builder.append(getSuperType());
\r
241 builder.append(", implements=");
\r
242 builder.append(getImplements());
\r
243 builder.append(", enclosedTypes=");
\r
244 builder.append(getEnclosedTypes());
\r
245 builder.append(", constants=");
\r
246 builder.append(getConstantDefinitions());
\r
247 builder.append(", enumerations=");
\r
248 builder.append(getEnumerations());
\r
249 builder.append(", properties=");
\r
250 builder.append(getProperties());
\r
251 builder.append(", equalsProperties=");
\r
252 builder.append(equalsProperties);
\r
253 builder.append(", hashCodeProperties=");
\r
254 builder.append(hashCodeProperties);
\r
255 builder.append(", stringProperties=");
\r
256 builder.append(stringProperties);
\r
257 builder.append(", methods=");
\r
258 builder.append(getMethodDefinitions());
\r
259 builder.append("]");
\r
260 return builder.toString();
\r
263 public String serializeTypedef(Type type) {
\r
264 if (type instanceof ParameterizedType) {
\r
265 ParameterizedType parameterizedType = (ParameterizedType) type;
\r
266 StringBuffer sb = new StringBuffer();
\r
267 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
\r
269 boolean first = true;
\r
270 for (Type parameter : parameterizedType.getActualTypeArguments()) {
\r
276 sb.append(serializeTypedef(parameter));
\r
279 return sb.toString();
\r
281 return type.getFullyQualifiedName();
\r