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;
14 import java.util.List;
15 import java.util.Optional;
16 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedProperty;
17 import org.opendaylight.mdsal.binding.javav2.model.api.GeneratedTransferObject;
18 import org.opendaylight.mdsal.binding.javav2.model.api.ParameterizedType;
19 import org.opendaylight.mdsal.binding.javav2.model.api.Restrictions;
20 import org.opendaylight.mdsal.binding.javav2.model.api.Type;
21 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedPropertyBuilder;
22 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTOBuilder;
23 import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.MethodSignatureBuilder;
24 import org.opendaylight.yangtools.util.LazyCollections;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
29 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
32 private GeneratedTransferObject extendsType;
33 private List<GeneratedPropertyBuilder> equalsProperties = ImmutableList.of();
34 private List<GeneratedPropertyBuilder> hashProperties = ImmutableList.of();
35 private List<GeneratedPropertyBuilder> toStringProperties = ImmutableList.of();
36 private boolean isTypedef = false;
37 private boolean isUnionType = false;
38 private boolean isUnionTypeBuilder = false;
39 private TypeDefinition<?> baseType = null;
40 private Restrictions restrictions;
41 private GeneratedPropertyBuilder suid;
42 private String reference;
43 private String description;
44 private String moduleName;
45 private List<QName> schemaPath;
47 public GeneratedTOBuilderImpl(final String packageName, final String name) {
48 super(packageName, name);
52 public GeneratedTOBuilderImpl(final String packageName, final String name, final boolean isNormalized) {
53 super(packageName, name, true);
57 public GeneratedTOBuilder setExtendsType(GeneratedTransferObject genTransObj) {
58 Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
59 extendsType = genTransObj;
64 * Add new MethodSignature definition for GeneratedTypeBuilder and
65 * returns MethodSignatureBuilder for specifying all Method parameters. <br>
66 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
67 * the method SHOULD throw {@link IllegalArgumentException} <br>
68 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
69 * {@link MethodSignatureBuilder#setAbstract(boolean)},
70 * {TypeMemberBuilder#setFinal(boolean)} and
71 * {TypeMemberBuilder#setAccessModifier(boolean)}
75 * @return <code>new</code> instance of Method Signature Builder.
78 public MethodSignatureBuilder addMethod(final String name) {
79 final MethodSignatureBuilder builder = super.addMethod(name);
80 builder.setAbstract(false);
85 public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
86 equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
91 public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
92 hashProperties = LazyCollections.lazyAdd(hashProperties, property);
97 public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
98 toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
103 public void setRestrictions(Restrictions restrictions) {
104 this.restrictions = restrictions;
108 public GeneratedTransferObject toInstance() {
109 return new GeneratedTransferObjectImpl(this);
113 public void setTypedef(boolean isTypedef) {
114 this.isTypedef = isTypedef;
118 public void setBaseType(TypeDefinition<?> typeDef) {
119 this.baseType = typeDef;
123 public void setIsUnion(boolean isUnion) {
124 this.isUnionType = isUnion;
128 public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
129 this.isUnionTypeBuilder = isUnionTypeBuilder;
133 public void setSUID(GeneratedPropertyBuilder suid) {
138 public void setDescription(String description) {
139 this.description = description;
143 public void setModuleName(String moduleName) {
144 this.moduleName = moduleName;
148 public void setSchemaPath(List<QName> schemaPath) {
149 this.schemaPath = schemaPath;
153 public void setReference(String reference) {
154 this.reference = reference;
158 protected GeneratedTOBuilderImpl thisInstance() {
163 public String toString() {
164 StringBuilder builder = new StringBuilder();
165 builder.append("GeneratedTransferObject [packageName=");
166 builder.append(getPackageName());
167 builder.append(", name=");
168 builder.append(getName());
169 builder.append(", comment=");
170 builder.append(getComment());
171 builder.append(", constants=");
172 builder.append(getConstants());
173 builder.append(", enumerations=");
174 builder.append(getEnumerations());
175 builder.append(", equalsProperties=");
176 builder.append(equalsProperties);
177 builder.append(", hashCodeProperties=");
178 builder.append(hashProperties);
179 builder.append(", stringProperties=");
180 builder.append(toStringProperties);
181 builder.append(", annotations=");
182 builder.append(getAnnotations());
183 builder.append(", methods=");
184 builder.append(getMethodDefinitions());
186 return builder.toString();
189 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements GeneratedTransferObject {
191 private final List<GeneratedProperty> equalsProperties;
192 private final List<GeneratedProperty> hashCodeProperties;
193 private final List<GeneratedProperty> stringProperties;
194 private final GeneratedTransferObject extendsType;
195 private final boolean isTypedef;
196 private final TypeDefinition<?> baseType;
197 private final boolean isUnionType;
198 private final boolean isUnionTypeBuilder;
199 private final Restrictions restrictions;
200 private final GeneratedProperty innerSuid;
201 private final String reference;
202 private final String description;
203 private final String moduleName;
204 private final List<QName> schemaPath;
206 public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
209 this.extendsType = builder.extendsType;
210 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
211 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
212 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
214 this.isTypedef = builder.isTypedef;
215 this.baseType = builder.baseType;
216 this.isUnionType = builder.isUnionType;
217 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
218 this.restrictions = builder.restrictions;
219 this.reference = builder.reference;
220 this.description = builder.description;
221 this.moduleName = builder.moduleName;
222 this.schemaPath = builder.schemaPath;
224 if (builder.suid == null) {
225 this.innerSuid = null;
227 this.innerSuid = builder.suid.toInstance(GeneratedTransferObjectImpl.this);
232 public GeneratedProperty getSUID() {
237 public GeneratedTransferObject getSuperType() {
242 public List<GeneratedProperty> getEqualsIdentifiers() {
243 return equalsProperties;
247 public List<GeneratedProperty> getHashCodeIdentifiers() {
248 return hashCodeProperties;
252 public List<GeneratedProperty> getToStringIdentifiers() {
253 return stringProperties;
257 public boolean isTypedef() {
262 public TypeDefinition<?> getBaseType() {
267 public boolean isUnionType() {
272 public boolean isUnionTypeBuilder() {
273 return isUnionTypeBuilder;
277 public Restrictions getRestrictions() {
282 public Optional<String> getDescription() {
283 return Optional.ofNullable(this.description);
287 public Optional<String> getReference() {
288 return Optional.ofNullable(this.reference);
292 public List<QName> getSchemaPath() {
297 public String getModuleName() {
302 public String toString() {
304 return serializeTypedef(this);
306 StringBuilder builder = new StringBuilder();
307 builder.append("GeneratedTransferObject [packageName=");
308 builder.append(getPackageName());
309 builder.append(", name=");
310 builder.append(getName());
311 builder.append(", comment=");
312 builder.append(", annotations=");
313 builder.append(getAnnotations());
314 builder.append(getComment());
315 builder.append(", extends=");
316 builder.append(getSuperType());
317 builder.append(", implements=");
318 builder.append(getImplements());
319 builder.append(", enclosedTypes=");
320 builder.append(getEnclosedTypes());
321 builder.append(", constants=");
322 builder.append(getConstantDefinitions());
323 builder.append(", enumerations=");
324 builder.append(getEnumerations());
325 builder.append(", properties=");
326 builder.append(getProperties());
327 builder.append(", equalsProperties=");
328 builder.append(equalsProperties);
329 builder.append(", hashCodeProperties=");
330 builder.append(hashCodeProperties);
331 builder.append(", stringProperties=");
332 builder.append(stringProperties);
333 builder.append(", methods=");
334 builder.append(getMethodDefinitions());
336 return builder.toString();
339 private String serializeTypedef(final Type type) {
340 if (type instanceof ParameterizedType) {
341 ParameterizedType parameterizedType = (ParameterizedType) type;
342 StringBuilder sb = new StringBuilder();
343 sb.append(parameterizedType.getRawType().getFullyQualifiedName());
345 boolean first = true;
346 for (Type parameter : parameterizedType.getActualTypeArguments()) {
352 sb.append(serializeTypedef(parameter));
355 return sb.toString();
357 return type.getFullyQualifiedName();