2 * Copyright (c) 2017 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.binding.javav2.generator.util.generated.type.builder;
11 import com.google.common.annotations.Beta;
12 import com.google.common.base.Preconditions;
13 import com.google.common.collect.ImmutableList;
15 import java.util.List;
16 import java.util.Optional;
18 import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
19 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
20 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
21 import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType;
22 import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions;
23 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
24 import org.opendaylight.mdsal.binding.javav2.model.api.TypeComment;
25 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder;
26 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
27 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
28 import org.opendaylight.yangtools.util.LazyCollections;
29 import org.opendaylight.yangtools.yang.common.QName;
30 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
33 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
36 private GeneratedTransferObject extendsType;
37 private List<GeneratedPropertyBuilder> equalsProperties = ImmutableList.of();
38 private List<GeneratedPropertyBuilder> hashProperties = ImmutableList.of();
39 private List<GeneratedPropertyBuilder> toStringProperties = ImmutableList.of();
40 private boolean isTypedef = false;
41 private boolean isUnionType = false;
42 private boolean isUnionTypeBuilder = false;
43 private TypeDefinition<?> baseType = null;
44 private Restrictions restrictions;
45 private GeneratedPropertyBuilder suid;
46 private String reference;
47 private String description;
48 private String moduleName;
49 private List<QName> schemaPath;
51 public GeneratedTOBuilderImpl(final String packageName, final String name, ModuleContext context) {
52 super(packageName, name, context);
56 public GeneratedTOBuilderImpl(final String packageName, final String name, final boolean isNormalized) {
57 super(packageName, name, true, null);
60 public GeneratedTOBuilderImpl(final String packageName, final String name, final boolean isPkNameNormalized,
61 final boolean isTypeNormalized, ModuleContext context) {
62 super(packageName, name, isPkNameNormalized, isTypeNormalized, context);
67 public GeneratedTOBuilder setExtendsType(GeneratedTransferObject genTransObj) {
68 Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
69 extendsType = genTransObj;
74 * Add new MethodSignature definition for GeneratedTypeBuilder and
75 * returns MethodSignatureBuilder for specifying all Method parameters. <br>
76 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
77 * the method SHOULD throw {@link IllegalArgumentException} <br>
78 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
79 * {@link MethodSignatureBuilder#setAbstract(boolean)},
80 * {TypeMemberBuilder#setFinal(boolean)} and
81 * {TypeMemberBuilder#setAccessModifier(boolean)}
83 * @param name Name of Method
84 * @return <code>new</code> instance of Method Signature Builder.
87 public MethodSignatureBuilder addMethod(final String name) {
88 final MethodSignatureBuilder builder = super.addMethod(name);
89 builder.setAbstract(false);
94 public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
95 equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
100 public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
101 hashProperties = LazyCollections.lazyAdd(hashProperties, property);
106 public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
107 toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
112 public void setRestrictions(Restrictions restrictions) {
113 this.restrictions = restrictions;
117 public GeneratedTransferObject toInstance() {
118 return new GeneratedTransferObjectImpl(this);
122 public void setTypedef(boolean typedefOrNot) {
123 this.isTypedef = typedefOrNot;
127 public void setBaseType(TypeDefinition<?> typeDef) {
128 this.baseType = typeDef;
132 public void setIsUnion(boolean isUnion) {
133 this.isUnionType = isUnion;
137 public void setIsUnionBuilder(boolean unionTypeBuilderOrNot) {
138 this.isUnionTypeBuilder = unionTypeBuilderOrNot;
142 public void setSUID(GeneratedPropertyBuilder suidBuilder) {
143 this.suid = suidBuilder;
147 public void setDescription(String description) {
148 this.description = description;
152 public void setModuleName(String moduleName) {
153 this.moduleName = moduleName;
157 public void setSchemaPath(List<QName> schemaPath) {
158 this.schemaPath = schemaPath;
162 public void setReference(String reference) {
163 this.reference = reference;
167 protected GeneratedTOBuilderImpl thisInstance() {
172 public String toString() {
173 StringBuilder builder = new StringBuilder();
174 builder.append("GeneratedTransferObject [packageName=");
175 builder.append(getPackageName());
176 builder.append(", name=");
177 builder.append(getName());
178 builder.append(", comment=");
179 builder.append(getComment());
180 builder.append(", constants=");
181 builder.append(getConstants());
182 builder.append(", enumerations=");
183 builder.append(getEnumerations());
184 builder.append(", equalsProperties=");
185 builder.append(equalsProperties);
186 builder.append(", hashCodeProperties=");
187 builder.append(hashProperties);
188 builder.append(", stringProperties=");
189 builder.append(toStringProperties);
190 builder.append(", annotations=");
191 builder.append(getAnnotations());
192 builder.append(", methods=");
193 builder.append(getMethodDefinitions());
195 return builder.toString();
198 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
199 GeneratedTransferObject {
201 private final List<GeneratedProperty> equalsProperties;
202 private final List<GeneratedProperty> hashCodeProperties;
203 private final List<GeneratedProperty> stringProperties;
204 private final GeneratedTransferObject extendsType;
205 private final boolean isTypedef;
206 private final TypeDefinition<?> baseType;
207 private final boolean isUnionType;
208 private final boolean isUnionTypeBuilder;
209 private final Restrictions restrictions;
210 private final GeneratedProperty innerSuid;
211 private final String reference;
212 private final String description;
213 private final String moduleName;
214 private final List<QName> schemaPath;
216 GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
219 this.extendsType = builder.extendsType;
220 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
221 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
222 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
224 this.isTypedef = builder.isTypedef;
225 this.baseType = builder.baseType;
226 this.isUnionType = builder.isUnionType;
227 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
228 this.restrictions = builder.restrictions;
229 this.reference = builder.reference;
230 this.description = builder.description;
231 this.moduleName = builder.moduleName;
232 this.schemaPath = builder.schemaPath;
234 if (builder.suid == null) {
235 this.innerSuid = null;
237 this.innerSuid = builder.suid.toInstance(GeneratedTransferObjectImpl.this);
242 public GeneratedProperty getSUID() {
247 public GeneratedTransferObject getSuperType() {
252 public List<GeneratedProperty> getEqualsIdentifiers() {
253 return equalsProperties;
257 public List<GeneratedProperty> getHashCodeIdentifiers() {
258 return hashCodeProperties;
262 public List<GeneratedProperty> getToStringIdentifiers() {
263 return stringProperties;
267 public boolean isTypedef() {
272 public TypeDefinition<?> getBaseType() {
277 public boolean isUnionType() {
282 public boolean isUnionTypeBuilder() {
283 return isUnionTypeBuilder;
287 public Restrictions getRestrictions() {
292 public Optional<String> getDescription() {
293 return Optional.ofNullable(this.description);
297 public Optional<String> getReference() {
298 return Optional.ofNullable(this.reference);
302 public List<QName> getSchemaPath() {
307 public String getModuleName() {
312 public String toString() {
314 return serializeTypedef(this);
316 StringBuilder builder = new StringBuilder();
317 builder.append("GeneratedTransferObject [packageName=");
318 builder.append(getPackageName());
319 builder.append(", name=");
320 builder.append(getName());
321 builder.append(", annotations=");
322 builder.append(getAnnotations());
323 final TypeComment comment = getComment();
324 if (comment != null) {
325 builder.append(", comment=");
326 builder.append(comment.getJavadoc());
328 builder.append(", extends=");
329 builder.append(getSuperType());
330 builder.append(", implements=");
331 builder.append(getImplements());
332 builder.append(", enclosedTypes=");
333 builder.append(getEnclosedTypes());
334 builder.append(", constants=");
335 builder.append(getConstantDefinitions());
336 builder.append(", enumerations=");
337 builder.append(getEnumerations());
338 builder.append(", properties=");
339 builder.append(getProperties());
340 builder.append(", equalsProperties=");
341 builder.append(equalsProperties);
342 builder.append(", hashCodeProperties=");
343 builder.append(hashCodeProperties);
344 builder.append(", stringProperties=");
345 builder.append(stringProperties);
346 builder.append(", methods=");
347 builder.append(getMethodDefinitions());
349 return builder.toString();
352 private String serializeTypedef(final Type type) {
353 if (type instanceof ParameterizedType) {
354 ParameterizedType parameterizedType = (ParameterizedType) type;
355 StringBuilder sb = new StringBuilder();
356 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
358 boolean first = true;
359 for (Type parameter : parameterizedType.getActualTypeArguments()) {
365 sb.append(serializeTypedef(parameter));
368 return sb.toString();
370 return type.getFullyQualifiedName();