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.mdsal.binding.model.ri.generated.type.builder;
10 import com.google.common.base.MoreObjects.ToStringHelper;
11 import com.google.common.base.Preconditions;
12 import java.util.Collections;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
15 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
16 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
17 import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
18 import org.opendaylight.mdsal.binding.model.api.Type;
19 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedPropertyBuilder;
20 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
21 import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder;
22 import org.opendaylight.yangtools.util.LazyCollections;
23 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
25 abstract class AbstractGeneratedTOBuilder extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder>
26 implements GeneratedTOBuilder {
28 // FIXME are these three referenced anywhere at runtime?
29 private List<GeneratedPropertyBuilder> equalsProperties = Collections.emptyList();
30 private List<GeneratedPropertyBuilder> hashProperties = Collections.emptyList();
31 private List<GeneratedPropertyBuilder> toStringProperties = Collections.emptyList();
32 private GeneratedTransferObject extendsType;
33 private boolean isTypedef = false;
34 private boolean isUnionType = false;
35 private boolean isUnionTypeBuilder = false;
36 private TypeDefinition<?> baseType = null;
38 AbstractGeneratedTOBuilder(final JavaTypeName identifier) {
44 public final GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
45 Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
46 this.extendsType = genTransObj;
51 * Add new Method Signature definition for Generated Type Builder and
52 * returns Method Signature Builder for specifying all Method parameters. <br>
53 * Name of Method cannot be <code>null</code>, if it is <code>null</code>
54 * the method SHOULD throw {@link IllegalArgumentException} <br>
55 * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
56 * {@link MethodSignatureBuilder#setAbstract(boolean)},
57 * {TypeMemberBuilder#setFinal(boolean)} and
58 * {TypeMemberBuilder#setAccessModifier(boolean)}
62 * @return <code>new</code> instance of Method Signature Builder.
65 public final MethodSignatureBuilder addMethod(final String name) {
66 final MethodSignatureBuilder builder = super.addMethod(name);
67 builder.setAbstract(false);
72 public final GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
73 this.equalsProperties = LazyCollections.lazyAdd(this.equalsProperties, property);
78 public final GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
79 this.hashProperties = LazyCollections.lazyAdd(this.hashProperties, property);
84 public final GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
85 this.toStringProperties = LazyCollections.lazyAdd(this.toStringProperties, property);
90 protected final GeneratedTOBuilder thisInstance() {
95 protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
96 return super.addToStringAttributes(toStringHelper)
97 .add("equalsProperties", equalsProperties)
98 .add("hashCodeProperties", hashProperties)
99 .add("stringProperties", toStringProperties);
103 public final void setTypedef(final boolean newIsTypedef) {
104 this.isTypedef = newIsTypedef;
108 public final void setBaseType(final TypeDefinition<?> typeDef) {
109 this.baseType = typeDef;
113 public final void setIsUnion(final boolean newIsUnion) {
114 this.isUnionType = newIsUnion;
118 public final boolean isUnion() {
123 public final void setIsUnionBuilder(final boolean newIsUnionTypeBuilder) {
124 this.isUnionTypeBuilder = newIsUnionTypeBuilder;
127 abstract static class AbstractGeneratedTransferObject extends AbstractGeneratedType implements
128 GeneratedTransferObject {
130 private final List<GeneratedProperty> equalsProperties;
131 private final List<GeneratedProperty> hashCodeProperties;
132 private final List<GeneratedProperty> stringProperties;
133 private final GeneratedTransferObject extendsType;
134 private final boolean isTypedef;
135 private final TypeDefinition<?> baseType;
136 private final boolean isUnionType;
137 private final boolean isUnionTypeBuilder;
139 AbstractGeneratedTransferObject(final AbstractGeneratedTOBuilder builder) {
141 this.extendsType = builder.extendsType;
143 // FIXME: if these fields were guaranteed to be constant, we could perhaps
144 // cache and reuse them between instances...
145 this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
146 this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
147 this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
149 this.isTypedef = builder.isTypedef;
150 this.baseType = builder.baseType;
151 this.isUnionType = builder.isUnionType;
152 this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
156 public final boolean isTypedef() {
157 return this.isTypedef;
161 public final TypeDefinition<?> getBaseType() {
162 return this.baseType;
166 public final boolean isUnionType() {
167 return this.isUnionType;
171 public final boolean isUnionTypeBuilder() {
172 return this.isUnionTypeBuilder;
176 public final GeneratedTransferObject getSuperType() {
177 return this.extendsType;
181 public final List<GeneratedProperty> getEqualsIdentifiers() {
182 return this.equalsProperties;
186 public final List<GeneratedProperty> getHashCodeIdentifiers() {
187 return this.hashCodeProperties;
191 public final List<GeneratedProperty> getToStringIdentifiers() {
192 return this.stringProperties;
196 protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
197 return super.addToStringAttributes(toStringHelper)
199 .add("annotations", getAnnotations())
200 .add("comment", getComment())
201 .add("extends", getSuperType())
202 .add("implements", getImplements())
203 .add("enclosedTypes", getEnclosedTypes())
204 .add("constants", getConstantDefinitions())
205 .add("enumerations", getEnumerations())
206 .add("properties", getProperties())
207 .add("equalsProperties", equalsProperties)
208 .add("hashCodeProperties", hashCodeProperties)
209 .add("stringProperties", stringProperties)
210 .add("methods", getMethodDefinitions());
213 public static final String serializeTypedef(final Type type) {
214 if (!(type instanceof ParameterizedType)) {
215 return type.getFullyQualifiedName();
218 final ParameterizedType parameterizedType = (ParameterizedType) type;
219 final StringBuilder sb = new StringBuilder();
220 sb.append(parameterizedType.getRawType().getFullyQualifiedName()).append('<');
221 boolean first = true;
222 for (final Type parameter : parameterizedType.getActualTypeArguments()) {
228 sb.append(serializeTypedef(parameter));
230 return sb.append('>').toString();