2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.controller.sal.binding.generator.impl;
\r
10 import java.util.ArrayList;
\r
11 import java.util.Arrays;
\r
12 import java.util.Collections;
\r
13 import java.util.HashSet;
\r
14 import java.util.List;
\r
15 import java.util.Set;
\r
17 import org.opendaylight.controller.sal.binding.model.api.AccessModifier;
\r
18 import org.opendaylight.controller.sal.binding.model.api.Constant;
\r
19 import org.opendaylight.controller.sal.binding.model.api.Enumeration;
\r
20 import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty;
\r
21 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
\r
22 import org.opendaylight.controller.sal.binding.model.api.MethodSignature;
\r
23 import org.opendaylight.controller.sal.binding.model.api.Type;
\r
24 import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder;
\r
25 import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;
\r
26 import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
\r
27 import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder;
\r
29 final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
\r
31 private static final String[] SET_VALUES = new String[] { "abstract",
\r
32 "assert", "boolean", "break", "byte", "case", "catch", "char",
\r
33 "class", "const", "continue", "default", "double", "do", "else",
\r
34 "enum", "extends", "false", "final", "finally", "float", "for",
\r
35 "goto", "if", "implements", "import", "instanceof", "int",
\r
36 "interface", "long", "native", "new", "null", "package", "private",
\r
37 "protected", "public", "return", "short", "static", "strictfp",
\r
38 "super", "switch", "synchronized", "this", "throw", "throws",
\r
39 "transient", "true", "try", "void", "volatile", "while" };
\r
41 public static final Set<String> JAVA_RESERVED_WORDS = new HashSet<String>(
\r
42 Arrays.asList(SET_VALUES));
\r
44 private String packageName;
\r
45 private final String name;
\r
47 private final List<EnumBuilder> enumerations = new ArrayList<EnumBuilder>();
\r
48 private final List<GeneratedPropertyBuilder> properties = new ArrayList<GeneratedPropertyBuilder>();
\r
49 private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<GeneratedPropertyBuilder>();
\r
50 private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<GeneratedPropertyBuilder>();
\r
51 private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<GeneratedPropertyBuilder>();
\r
53 public GeneratedTOBuilderImpl(String packageName, String name) {
\r
55 this.packageName = GeneratedTypeBuilderImpl.validatePackage(packageName);
\r
60 public String getPackageName() {
\r
65 public String getName() {
\r
70 public EnumBuilder addEnumeration(String name) {
\r
71 final EnumBuilder builder = new EnumerationBuilderImpl(packageName,
\r
73 enumerations.add(builder);
\r
78 public GeneratedPropertyBuilder addProperty(String name) {
\r
79 final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(
\r
81 properties.add(builder);
\r
86 public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
\r
87 return equalsProperties.add(property);
\r
91 public boolean addHashIdentity(GeneratedPropertyBuilder property) {
\r
92 return hashProperties.add(property);
\r
96 public boolean addToStringProperty(GeneratedPropertyBuilder property) {
\r
97 return toStringProperties.add(property);
\r
101 public GeneratedTransferObject toInstance() {
\r
103 return new GeneratedTransferObjectImpl(packageName, name, enumerations,
\r
104 properties, equalsProperties, hashProperties,
\r
105 toStringProperties);
\r
108 private static final class GeneratedPropertyBuilderImpl implements
\r
109 GeneratedPropertyBuilder {
\r
111 private final String name;
\r
112 private Type returnType;
\r
113 private final List<MethodSignature.Parameter> parameters;
\r
114 private String comment = "";
\r
115 private AccessModifier accessModifier;
\r
116 private boolean isFinal;
\r
117 private boolean isReadOnly;
\r
119 public GeneratedPropertyBuilderImpl(final String name) {
\r
122 parameters = new ArrayList<MethodSignature.Parameter>();
\r
124 this.isReadOnly = true;
\r
125 accessModifier = AccessModifier.PUBLIC;
\r
128 public String getName() {
\r
133 public boolean addReturnType(Type returnType) {
\r
134 if (returnType != null) {
\r
135 this.returnType = returnType;
\r
136 this.parameters.add(new MethodParameterImpl(name, returnType));
\r
143 public void accessorModifier(final AccessModifier modifier) {
\r
144 accessModifier = modifier;
\r
148 public void addComment(String comment) {
\r
149 if (comment != null) {
\r
150 this.comment = comment;
\r
155 public void setFinal(boolean isFinal) {
\r
156 this.isFinal = isFinal;
\r
160 public void setReadOnly(boolean isReadOnly) {
\r
161 this.isReadOnly = isReadOnly;
\r
165 public GeneratedProperty toInstance(final Type definingType) {
\r
166 return new GeneratedPropertyImpl(name, comment, definingType,
\r
167 returnType, isFinal, isReadOnly, parameters, accessModifier);
\r
171 private static final class GeneratedPropertyImpl implements
\r
172 GeneratedProperty {
\r
174 private final String name;
\r
175 private final String comment;
\r
176 private final Type parent;
\r
177 private final Type returnType;
\r
178 private final boolean isFinal;
\r
179 private final boolean isReadOnly;
\r
180 private final List<MethodSignature.Parameter> parameters;
\r
181 private final AccessModifier modifier;
\r
183 public GeneratedPropertyImpl(final String name, final String comment,
\r
184 final Type parent, final Type returnType,
\r
185 final boolean isFinal, final boolean isReadOnly,
\r
186 final List<Parameter> parameters, final AccessModifier modifier) {
\r
189 this.comment = comment;
\r
190 this.parent = parent;
\r
191 this.returnType = returnType;
\r
192 this.isFinal = isFinal;
\r
193 this.isReadOnly = isReadOnly;
\r
194 this.parameters = Collections.unmodifiableList(parameters);
\r
195 this.modifier = modifier;
\r
199 public String getName() {
\r
204 public String getComment() {
\r
209 public Type getDefiningType() {
\r
214 public Type getReturnType() {
\r
219 public List<Parameter> getParameters() {
\r
224 public AccessModifier getAccessModifier() {
\r
229 public boolean isReadOnly() {
\r
234 public boolean isFinal() {
\r
239 public int hashCode() {
\r
240 final int prime = 31;
\r
242 result = prime * result
\r
243 + ((comment == null) ? 0 : comment.hashCode());
\r
244 result = prime * result + (isFinal ? 1231 : 1237);
\r
245 result = prime * result + (isReadOnly ? 1231 : 1237);
\r
246 result = prime * result
\r
247 + ((modifier == null) ? 0 : modifier.hashCode());
\r
248 result = prime * result + ((name == null) ? 0 : name.hashCode());
\r
249 result = prime * result
\r
250 + ((parameters == null) ? 0 : parameters.hashCode());
\r
252 if (parent != null) {
\r
255 + ((parent.getPackageName() == null) ? 0 : parent
\r
256 .getPackageName().hashCode());
\r
259 + ((parent.getName() == null) ? 0 : parent.getName()
\r
263 result = prime * result
\r
264 + ((returnType == null) ? 0 : returnType.hashCode());
\r
269 public boolean equals(Object obj) {
\r
276 if (getClass() != obj.getClass()) {
\r
279 GeneratedPropertyImpl other = (GeneratedPropertyImpl) obj;
\r
280 if (comment == null) {
\r
281 if (other.comment != null) {
\r
284 } else if (!comment.equals(other.comment)) {
\r
287 if (isFinal != other.isFinal) {
\r
290 if (isReadOnly != other.isReadOnly) {
\r
293 if (modifier != other.modifier) {
\r
296 if (name == null) {
\r
297 if (other.name != null) {
\r
300 } else if (!name.equals(other.name)) {
\r
303 if (parameters == null) {
\r
304 if (other.parameters != null) {
\r
307 } else if (!parameters.equals(other.parameters)) {
\r
310 if (parent == null) {
\r
311 if (other.parent != null) {
\r
314 } else if ((parent != null) && (other.parent != null)) {
\r
315 if (!parent.getPackageName().equals(
\r
316 other.parent.getPackageName())
\r
317 && !parent.getName().equals(other.parent.getName())) {
\r
321 if (returnType == null) {
\r
322 if (other.returnType != null) {
\r
325 } else if (!returnType.equals(other.returnType)) {
\r
332 public String toString() {
\r
333 StringBuilder builder = new StringBuilder();
\r
334 builder.append("GeneratedPropertyImpl [name=");
\r
335 builder.append(name);
\r
336 builder.append(", comment=");
\r
337 builder.append(comment);
\r
338 if (parent != null) {
\r
339 builder.append(", parent=");
\r
340 builder.append(parent.getPackageName());
\r
341 builder.append(".");
\r
342 builder.append(parent.getName());
\r
344 builder.append(", parent= null");
\r
346 builder.append(", returnType=");
\r
347 builder.append(returnType);
\r
348 builder.append(", isFinal=");
\r
349 builder.append(isFinal);
\r
350 builder.append(", isReadOnly=");
\r
351 builder.append(isReadOnly);
\r
352 builder.append(", parameters=");
\r
353 builder.append(parameters);
\r
354 builder.append(", modifier=");
\r
355 builder.append(modifier);
\r
356 builder.append("]");
\r
357 return builder.toString();
\r
361 private static final class GeneratedTransferObjectImpl implements
\r
362 GeneratedTransferObject {
\r
364 private final String packageName;
\r
365 private final String name;
\r
366 // private final List<Constant> constants;
\r
367 private final List<Enumeration> enumerations;
\r
368 private final List<GeneratedProperty> properties;
\r
369 private final List<GeneratedProperty> equalsProperties;
\r
370 private final List<GeneratedProperty> hashCodeProperties;
\r
371 private final List<GeneratedProperty> stringProperties;
\r
373 private List<Enumeration> toUnmodifiableEnumerations(
\r
374 final List<EnumBuilder> enumBuilders) {
\r
375 final List<Enumeration> enumerations = new ArrayList<Enumeration>();
\r
376 for (final EnumBuilder builder : enumBuilders) {
\r
377 enumerations.add(builder.toInstance(this));
\r
379 return Collections.unmodifiableList(enumerations);
\r
382 private List<Constant> toUnmodifiableConstant(
\r
383 final List<ConstantBuilder> constBuilders) {
\r
384 final List<Constant> constants = new ArrayList<Constant>();
\r
385 for (final ConstantBuilder builder : constBuilders) {
\r
386 constants.add(builder.toInstance(this));
\r
388 return Collections.unmodifiableList(constants);
\r
391 private List<GeneratedProperty> toUnmodifiableProperties(
\r
392 final List<GeneratedPropertyBuilder> propBuilders) {
\r
393 final List<GeneratedProperty> constants = new ArrayList<GeneratedProperty>();
\r
394 for (final GeneratedPropertyBuilder builder : propBuilders) {
\r
395 constants.add(builder.toInstance(this));
\r
397 return Collections.unmodifiableList(constants);
\r
400 public GeneratedTransferObjectImpl(String packageName, String name,
\r
401 List<EnumBuilder> enumBuilders,
\r
402 List<GeneratedPropertyBuilder> propBuilers,
\r
403 List<GeneratedPropertyBuilder> equalsBuilers,
\r
404 List<GeneratedPropertyBuilder> hashCodeBuilers,
\r
405 List<GeneratedPropertyBuilder> stringBuilers) {
\r
407 this.packageName = packageName;
\r
409 this.enumerations = toUnmodifiableEnumerations(enumBuilders);
\r
410 this.properties = toUnmodifiableProperties(propBuilers);
\r
411 this.equalsProperties = toUnmodifiableProperties(equalsBuilers);
\r
412 this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers);
\r
413 this.stringProperties = toUnmodifiableProperties(stringBuilers);
\r
417 public String getPackageName() {
\r
418 return packageName;
\r
422 public String getName() {
\r
427 public List<Enumeration> getEnumDefintions() {
\r
428 return enumerations;
\r
432 public List<GeneratedProperty> getProperties() {
\r
437 public List<GeneratedProperty> getEqualsIdentifiers() {
\r
438 return equalsProperties;
\r
442 public List<GeneratedProperty> getHashCodeIdentifiers() {
\r
443 return hashCodeProperties;
\r
447 public List<GeneratedProperty> getToStringIdentifiers() {
\r
448 return stringProperties;
\r
454 * @see java.lang.Object#hashCode()
\r
457 public int hashCode() {
\r
458 final int prime = 31;
\r
460 result = prime * result
\r
461 + ((enumerations == null) ? 0 : enumerations.hashCode());
\r
464 + ((equalsProperties == null) ? 0 : equalsProperties
\r
468 + ((hashCodeProperties == null) ? 0 : hashCodeProperties
\r
470 result = prime * result + ((name == null) ? 0 : name.hashCode());
\r
471 result = prime * result
\r
472 + ((packageName == null) ? 0 : packageName.hashCode());
\r
473 result = prime * result
\r
474 + ((properties == null) ? 0 : properties.hashCode());
\r
477 + ((stringProperties == null) ? 0 : stringProperties
\r
485 * @see java.lang.Object#equals(java.lang.Object)
\r
488 public boolean equals(Object obj) {
\r
495 if (getClass() != obj.getClass()) {
\r
498 GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) obj;
\r
499 if (enumerations == null) {
\r
500 if (other.enumerations != null) {
\r
503 } else if (!enumerations.equals(other.enumerations)) {
\r
506 if (equalsProperties == null) {
\r
507 if (other.equalsProperties != null) {
\r
510 } else if (!equalsProperties.equals(other.equalsProperties)) {
\r
513 if (hashCodeProperties == null) {
\r
514 if (other.hashCodeProperties != null) {
\r
517 } else if (!hashCodeProperties.equals(other.hashCodeProperties)) {
\r
520 if (name == null) {
\r
521 if (other.name != null) {
\r
524 } else if (!name.equals(other.name)) {
\r
527 if (packageName == null) {
\r
528 if (other.packageName != null) {
\r
531 } else if (!packageName.equals(other.packageName)) {
\r
534 if (properties == null) {
\r
535 if (other.properties != null) {
\r
538 } else if (!properties.equals(other.properties)) {
\r
541 if (stringProperties == null) {
\r
542 if (other.stringProperties != null) {
\r
545 } else if (!stringProperties.equals(other.stringProperties)) {
\r
554 * @see java.lang.Object#toString()
\r
557 public String toString() {
\r
558 StringBuilder builder = new StringBuilder();
\r
559 builder.append("GeneratedTransferObjectImpl [packageName=");
\r
560 builder.append(packageName);
\r
561 builder.append(", name=");
\r
562 builder.append(name);
\r
563 builder.append(", enumerations=");
\r
564 builder.append(enumerations);
\r
565 builder.append(", properties=");
\r
566 builder.append(properties);
\r
567 builder.append(", equalsProperties=");
\r
568 builder.append(equalsProperties);
\r
569 builder.append(", hashCodeProperties=");
\r
570 builder.append(hashCodeProperties);
\r
571 builder.append(", stringProperties=");
\r
572 builder.append(stringProperties);
\r
573 builder.append("]");
\r
574 return builder.toString();
\r