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.controller.binding.generator.util.generated.type.builder;
10 import org.opendaylight.controller.sal.binding.model.api.*;
11 import org.opendaylight.controller.sal.binding.model.api.type.builder.*;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
17 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {
19 private GeneratedTransferObject extendsType;
20 private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();
21 private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
22 private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
23 private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
24 private boolean isUnionType = false;
26 public GeneratedTOBuilderImpl(String packageName, String name) {
27 super(packageName, name);
32 public void setExtendsType(final GeneratedTransferObject genTransObj) {
33 if (genTransObj == null) {
34 throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
36 extendsType = genTransObj;
40 public GeneratedPropertyBuilder addProperty(String name) {
41 final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);
42 builder.setAccessModifier(AccessModifier.PUBLIC);
43 properties.add(builder);
48 public boolean containsProperty(String name) {
50 throw new IllegalArgumentException("Parameter name can't be null");
52 for (GeneratedPropertyBuilder property : properties) {
53 if (name.equals(property.getName())) {
61 * Add new Method Signature definition for Generated Type Builder and
62 * returns Method Signature Builder 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(false)},
67 * {@link MethodSignatureBuilder#setFinal(false)} and
68 * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}
72 * @return <code>new</code> instance of Method Signature Builder.
75 public MethodSignatureBuilder addMethod(String name) {
76 final MethodSignatureBuilder builder = super.addMethod(name);
77 builder.setAbstract(false);
82 public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
83 return equalsProperties.add(property);
87 public boolean addHashIdentity(GeneratedPropertyBuilder property) {
88 return hashProperties.add(property);
92 public boolean addToStringProperty(GeneratedPropertyBuilder property) {
93 return toStringProperties.add(property);
97 public GeneratedTransferObject toInstance() {
98 return new GeneratedTransferObjectImpl(null, getPackageName(), getName(), getComment(), getAnnotations(),
99 isAbstract(), extendsType, getImplementsTypes(), getEnclosedTypes(), getEnclosedTransferObjects(),
100 getConstants(), getEnumerations(), getMethodDefinitions(), properties, equalsProperties,
101 hashProperties, toStringProperties, isUnionType);
105 public String toString() {
106 StringBuilder builder = new StringBuilder();
107 builder.append("GeneratedTransferObject [packageName=");
108 builder.append(getPackageName());
109 builder.append(", name=");
110 builder.append(getName());
111 builder.append(", comment=");
112 builder.append(getComment());
113 builder.append(", constants=");
114 builder.append(getConstants());
115 builder.append(", enumerations=");
116 builder.append(getEnumerations());
117 builder.append(", properties=");
118 builder.append(properties);
119 builder.append(", equalsProperties=");
120 builder.append(equalsProperties);
121 builder.append(", hashCodeProperties=");
122 builder.append(hashProperties);
123 builder.append(", stringProperties=");
124 builder.append(toStringProperties);
125 builder.append(", annotations=");
126 builder.append(getAnnotations());
127 builder.append(", methods=");
128 builder.append(getMethodDefinitions());
130 return builder.toString();
134 public void setIsUnion(boolean isUnion) {
135 this.isUnionType = isUnion;
138 private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
139 GeneratedTransferObject {
141 private final List<GeneratedProperty> properties;
142 private final List<GeneratedProperty> equalsProperties;
143 private final List<GeneratedProperty> hashCodeProperties;
144 private final List<GeneratedProperty> stringProperties;
145 private final GeneratedTransferObject extendsType;
146 private final boolean isUnionType;
148 GeneratedTransferObjectImpl(final Type parent, final String packageName, final String name,
149 final String comment, final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
150 final GeneratedTransferObject extendsType, final List<Type> implementsTypes,
151 final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
152 final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<Constant> constants,
153 final List<EnumBuilder> enumBuilders, final List<MethodSignatureBuilder> methodBuilders,
154 final List<GeneratedPropertyBuilder> propBuilders, final List<GeneratedPropertyBuilder> equalsBuilders,
155 final List<GeneratedPropertyBuilder> hashCodeBuilders,
156 final List<GeneratedPropertyBuilder> stringBuilders, final boolean isUnionType) {
157 super(parent, packageName, name, comment, annotationBuilders, isAbstract, implementsTypes,
158 enclosedGenTypeBuilders, enclosedGenTOBuilders, enumBuilders, constants, methodBuilders);
159 this.extendsType = extendsType;
160 this.properties = toUnmodifiableProperties(propBuilders);
161 this.equalsProperties = toUnmodifiableProperties(equalsBuilders);
162 this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilders);
163 this.stringProperties = toUnmodifiableProperties(stringBuilders);
164 this.isUnionType = isUnionType;
168 public boolean isUnionType() {
172 private List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> propBuilders) {
173 final List<GeneratedProperty> properties = new ArrayList<>();
174 for (final GeneratedPropertyBuilder builder : propBuilders) {
175 properties.add(builder.toInstance(this));
177 return Collections.unmodifiableList(properties);
181 public GeneratedTransferObject getExtends() {
186 public List<GeneratedProperty> getProperties() {
191 public List<GeneratedProperty> getEqualsIdentifiers() {
192 return equalsProperties;
196 public List<GeneratedProperty> getHashCodeIdentifiers() {
197 return hashCodeProperties;
201 public List<GeneratedProperty> getToStringIdentifiers() {
202 return stringProperties;
206 public String toString() {
207 StringBuilder builder = new StringBuilder();
208 builder.append("GeneratedTransferObject [packageName=");
209 builder.append(getPackageName());
210 builder.append(", name=");
211 builder.append(getName());
212 builder.append(", comment=");
213 builder.append(", annotations=");
214 builder.append(getAnnotations());
215 builder.append(getComment());
216 builder.append(", extends=");
217 builder.append(getExtends());
218 builder.append(", implements=");
219 builder.append(getImplements());
220 builder.append(", enclosedTypes=");
221 builder.append(getEnclosedTypes());
222 builder.append(", constants=");
223 builder.append(getConstantDefinitions());
224 builder.append(", enumerations=");
225 builder.append(getEnumerations());
226 builder.append(", properties=");
227 builder.append(properties);
228 builder.append(", equalsProperties=");
229 builder.append(equalsProperties);
230 builder.append(", hashCodeProperties=");
231 builder.append(hashCodeProperties);
232 builder.append(", stringProperties=");
233 builder.append(stringProperties);
234 builder.append(", methods=");
235 builder.append(getMethodDefinitions());
237 return builder.toString();