/* * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.binding.generator.util.generated.type.builder; import org.opendaylight.controller.sal.binding.model.api.*; import org.opendaylight.controller.sal.binding.model.api.type.builder.*; import java.util.ArrayList; import java.util.Collections; import java.util.List; public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder { private GeneratedTransferObject extendsType; private final List properties = new ArrayList<>(); private final List equalsProperties = new ArrayList<>(); private final List hashProperties = new ArrayList<>(); private final List toStringProperties = new ArrayList<>(); public GeneratedTOBuilderImpl(String packageName, String name) { super(packageName, name); setAbstract(false); } @Override public void setExtendsType(final GeneratedTransferObject genTransObj) { if (genTransObj == null) { throw new IllegalArgumentException("Generated Transfer Object cannot be null!"); } extendsType = genTransObj; } @Override public GeneratedPropertyBuilder addProperty(String name) { final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name); builder.setAccessModifier(AccessModifier.PUBLIC); properties.add(builder); return builder; } /** * Add new Method Signature definition for Generated Type Builder and * returns Method Signature Builder for specifying all Method parameters. *
* Name of Method cannot be null, * if it is null the method SHOULD throw {@link IllegalArgumentException} *
* By Default the MethodSignatureBuilder SHOULD be pre-set as * {@link MethodSignatureBuilder#setAbstract(false)}, {@link MethodSignatureBuilder#setFinal(false)} and * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)} * * @param name Name of Method * @return new instance of Method Signature Builder. */ @Override public MethodSignatureBuilder addMethod(String name) { final MethodSignatureBuilder builder = super.addMethod(name); builder.setAbstract(false); return builder; } @Override public boolean addEqualsIdentity(GeneratedPropertyBuilder property) { return equalsProperties.add(property); } @Override public boolean addHashIdentity(GeneratedPropertyBuilder property) { return hashProperties.add(property); } @Override public boolean addToStringProperty(GeneratedPropertyBuilder property) { return toStringProperties.add(property); } @Override public GeneratedTransferObject toInstance() { return new GeneratedTransferObjectImpl(null, getPackageName(), getName(), getComment(), getAnnotations(), isAbstract(), extendsType, getImplementsTypes(), getEnclosedTypes(), getEnclosedTransferObjects(), getConstants(), getEnumerations(), getMethodDefinitions(), properties, equalsProperties, hashProperties, toStringProperties); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("GeneratedTransferObject [packageName="); builder.append(getPackageName()); builder.append(", name="); builder.append(getName()); builder.append(", comment="); builder.append(getComment()); builder.append(", constants="); builder.append(getConstants()); builder.append(", enumerations="); builder.append(getEnumerations()); builder.append(", properties="); builder.append(properties); builder.append(", equalsProperties="); builder.append(equalsProperties); builder.append(", hashCodeProperties="); builder.append(hashProperties); builder.append(", stringProperties="); builder.append(toStringProperties); builder.append(", annotations="); builder.append(getAnnotations()); builder.append(", methods="); builder.append(getMethodDefinitions()); builder.append("]"); return builder.toString(); } private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements GeneratedTransferObject { private final List properties; private final List equalsProperties; private final List hashCodeProperties; private final List stringProperties; private final GeneratedTransferObject extendsType; GeneratedTransferObjectImpl(final Type parent, final String packageName, final String name, final String comment, final List annotationBuilders, final boolean isAbstract, final GeneratedTransferObject extendsType, final List implementsTypes, final List enclosedGenTypeBuilders, final List enclosedGenTOBuilders, final List constants, final List enumBuilders, final List methodBuilders, final List propBuilders, final List equalsBuilders, final List hashCodeBuilders, final List stringBuilders) { super(parent, packageName, name, comment, annotationBuilders, isAbstract, implementsTypes, enclosedGenTypeBuilders, enclosedGenTOBuilders, enumBuilders, constants, methodBuilders); this.extendsType = extendsType; this.properties = toUnmodifiableProperties(propBuilders); this.equalsProperties = toUnmodifiableProperties(equalsBuilders); this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilders); this.stringProperties = toUnmodifiableProperties(stringBuilders); } private List toUnmodifiableProperties( final List propBuilders) { final List properties = new ArrayList<>(); for (final GeneratedPropertyBuilder builder : propBuilders) { properties.add(builder.toInstance(this)); } return Collections.unmodifiableList(properties); } @Override public GeneratedTransferObject getExtends() { return extendsType; } @Override public List getProperties() { return properties; } @Override public List getEqualsIdentifiers() { return equalsProperties; } @Override public List getHashCodeIdentifiers() { return hashCodeProperties; } @Override public List getToStringIdentifiers() { return stringProperties; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("GeneratedTransferObject [packageName="); builder.append(getPackageName()); builder.append(", name="); builder.append(getName()); builder.append(", comment="); builder.append(", annotations="); builder.append(getAnnotations()); builder.append(getComment()); builder.append(", extends="); builder.append(getExtends()); builder.append(", implements="); builder.append(getImplements()); builder.append(", enclosedTypes="); builder.append(getEnclosedTypes()); builder.append(", constants="); builder.append(getConstantDefinitions()); builder.append(", enumerations="); builder.append(getEnumerations()); builder.append(", properties="); builder.append(properties); builder.append(", equalsProperties="); builder.append(equalsProperties); builder.append(", hashCodeProperties="); builder.append(hashCodeProperties); builder.append(", stringProperties="); builder.append(stringProperties); builder.append(", methods="); builder.append(getMethodDefinitions()); builder.append("]"); return builder.toString(); } } }