2 * Copyright (c) 2016 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
9 package org.opendaylight.mdsal.binding2.generator.util.generated.type.builder;
11 import com.google.common.annotations.Beta;
12 import com.google.common.base.Optional;
13 import com.google.common.base.Preconditions;
14 import com.google.common.collect.ImmutableList;
15 import java.util.Collections;
16 import java.util.List;
17 import org.opendaylight.mdsal.binding2.model.api.GeneratedProperty;
18 import org.opendaylight.mdsal.binding2.model.api.GeneratedTransferObject;
19 import org.opendaylight.mdsal.binding2.model.api.ParameterizedType;
20 import org.opendaylight.mdsal.binding2.model.api.Restrictions;
21 import org.opendaylight.mdsal.binding2.model.api.Type;
22 import org.opendaylight.mdsal.binding2.model.api.type.builder.GeneratedPropertyBuilder;
23 import org.opendaylight.mdsal.binding2.model.api.type.builder.GeneratedTOBuilder;
24 import org.opendaylight.mdsal.binding2.model.api.type.builder.MethodSignatureBuilder;
25 import org.opendaylight.yangtools.util.LazyCollections;
26 import org.opendaylight.yangtools.yang.common.QName;
27 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
30 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
33 private GeneratedTransferObject extendsType;
34 private List<GeneratedPropertyBuilder> equalsProperties = ImmutableList.of();
35 private List<GeneratedPropertyBuilder> hashProperties = ImmutableList.of();
36 private List<GeneratedPropertyBuilder> toStringProperties = ImmutableList.of();
37 private boolean isTypedef = false;
38 private boolean isUnionType = false;
39 private boolean isUnionTypeBuilder = false;
40 private TypeDefinition<?> baseType = null;
41 private Restrictions restrictions;
42 private GeneratedPropertyBuilder SUID;
43 private String reference;
44 private String description;
45 private String moduleName;
46 private List<QName> schemaPath;
48 public GeneratedTOBuilderImpl(final String packageName, final String name) {
49 super(packageName, name);
54 public GeneratedTOBuilder setExtendsType(GeneratedTransferObject genTransObj) {
55 Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
56 extendsType = genTransObj;
61 * Add new MethodSignature definition for GeneratedTypeBuilder and
62 * returns MethodSignatureBuilder for specifying all Method parameters. <br>
63 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
64 * the method SHOULD throw {@link IllegalArgumentException} <br>
65 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
66 * {@link MethodSignatureBuilder#setAbstract(boolean)},
67 * {TypeMemberBuilder#setFinal(boolean)} and
68 * {TypeMemberBuilder#setAccessModifier(boolean)}
72 * @return <code>new</code> instance of Method Signature Builder.
75 public MethodSignatureBuilder addMethod(final String name) {
76 final MethodSignatureBuilder builder = super.addMethod(name);
77 builder.setAbstract(false);
82 public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
83 equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
88 public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
89 hashProperties = LazyCollections.lazyAdd(hashProperties, property);
94 public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
95 toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
100 public void setRestrictions(Restrictions restrictions) {
101 this.restrictions = restrictions;
105 public GeneratedTransferObject toInstance() {
106 return new GeneratedTransferObjectImpl(this);
110 public void setTypedef(boolean isTypedef) {
111 this.isTypedef = isTypedef;
115 public void setBaseType(TypeDefinition<?> typeDef) {
116 this.baseType = typeDef;
120 public void setIsUnion(boolean isUnion) {
121 this.isUnionType = isUnion;
125 public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
126 this.isUnionTypeBuilder = isUnionTypeBuilder;
130 public void setSUID(GeneratedPropertyBuilder suid) {
135 public void setDescription(String description) {
136 this.description = description;
140 public void setModuleName(String moduleName) {
141 this.moduleName = moduleName;
145 public void setSchemaPath(List<QName> schemaPath) {
146 this.schemaPath = schemaPath;
150 public void setReference(String reference) {
151 this.reference = reference;
155 protected GeneratedTOBuilderImpl thisInstance() {
160 public String toString() {
161 StringBuilder builder = new StringBuilder();
162 builder.append("GeneratedTransferObject [packageName=");
163 builder.append(getPackageName());
164 builder.append(", name=");
165 builder.append(getName());
166 builder.append(", comment=");
167 builder.append(getComment());
168 builder.append(", constants=");
169 builder.append(getConstants());
170 builder.append(", enumerations=");
171 builder.append(getEnumerations());
172 builder.append(", equalsProperties=");
173 builder.append(equalsProperties);
174 builder.append(", hashCodeProperties=");
175 builder.append(hashProperties);
176 builder.append(", stringProperties=");
177 builder.append(toStringProperties);
178 builder.append(", annotations=");
179 builder.append(getAnnotations());
180 builder.append(", methods=");
181 builder.append(getMethodDefinitions());
183 return builder.toString();
186 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements GeneratedTransferObject {
188 private final List<GeneratedProperty> equalsProperties;
189 private final List<GeneratedProperty> hashCodeProperties;
190 private final List<GeneratedProperty> stringProperties;
191 private final GeneratedTransferObject extendsType;
192 private final boolean isTypedef;
193 private final TypeDefinition<?> baseType;
194 private final boolean isUnionType;
195 private final boolean isUnionTypeBuilder;
196 private final Restrictions restrictions;
197 private final GeneratedProperty SUID;
198 private final String reference;
199 private final String description;
200 private final String moduleName;
201 private final List<QName> schemaPath;
203 public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
206 this.extendsType = builder.extendsType;
207 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
208 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
209 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
211 this.isTypedef = builder.isTypedef;
212 this.baseType = builder.baseType;
213 this.isUnionType = builder.isUnionType;
214 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
215 this.restrictions = builder.restrictions;
216 this.reference = builder.reference;
217 this.description = builder.description;
218 this.moduleName = builder.moduleName;
219 this.schemaPath = builder.schemaPath;
221 if (builder.SUID == null) {
224 this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
229 public GeneratedProperty getSUID() {
234 public GeneratedTransferObject getSuperType() {
239 public List<GeneratedProperty> getEqualsIdentifiers() {
240 return equalsProperties;
244 public List<GeneratedProperty> getHashCodeIdentifiers() {
245 return hashCodeProperties;
249 public List<GeneratedProperty> getToStringIdentifiers() {
250 return stringProperties;
254 public boolean isTypedef() {
259 public TypeDefinition<?> getBaseType() {
264 public boolean isUnionType() {
269 public boolean isUnionTypeBuilder() {
270 return isUnionTypeBuilder;
274 public Restrictions getRestrictions() {
279 public Optional<String> getDescription() {
280 return Optional.of(description);
284 public Optional<String> getReference() {
285 return Optional.of(reference);
289 public List<QName> getSchemaPath() {
294 public String getModuleName() {
299 public String toString() {
301 return serializeTypedef(this);
303 StringBuilder builder = new StringBuilder();
304 builder.append("GeneratedTransferObject [packageName=");
305 builder.append(getPackageName());
306 builder.append(", name=");
307 builder.append(getName());
308 builder.append(", comment=");
309 builder.append(", annotations=");
310 builder.append(getAnnotations());
311 builder.append(getComment());
312 builder.append(", extends=");
313 builder.append(getSuperType());
314 builder.append(", implements=");
315 builder.append(getImplements());
316 builder.append(", enclosedTypes=");
317 builder.append(getEnclosedTypes());
318 builder.append(", constants=");
319 builder.append(getConstantDefinitions());
320 builder.append(", enumerations=");
321 builder.append(getEnumerations());
322 builder.append(", properties=");
323 builder.append(getProperties());
324 builder.append(", equalsProperties=");
325 builder.append(equalsProperties);
326 builder.append(", hashCodeProperties=");
327 builder.append(hashCodeProperties);
328 builder.append(", stringProperties=");
329 builder.append(stringProperties);
330 builder.append(", methods=");
331 builder.append(getMethodDefinitions());
333 return builder.toString();
336 private String serializeTypedef(final Type type) {
337 if (type instanceof ParameterizedType) {
338 ParameterizedType parameterizedType = (ParameterizedType) type;
339 StringBuilder sb = new StringBuilder();
340 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
342 boolean first = true;
343 for (Type parameter : parameterizedType.getActualTypeArguments()) {
349 sb.append(serializeTypedef(parameter));
352 return sb.toString();
354 return type.getFullyQualifiedName();