X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fgenerator%2Fimpl%2FGeneratedTypeBuilderImpl.java;fp=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fbinding-generator-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fbinding%2Fgenerator%2Fimpl%2FGeneratedTypeBuilderImpl.java;h=c861b545918cce0caf0670bf3c2e6ed9d3a54446;hp=0000000000000000000000000000000000000000;hb=42210c03b0a4c54706320ba9f55794c0abd4d201;hpb=7576b38152b393793b1c9ec3df0ff86685f95236 diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypeBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypeBuilderImpl.java new file mode 100644 index 0000000000..c861b54591 --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypeBuilderImpl.java @@ -0,0 +1,503 @@ +/* + * 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.sal.binding.generator.impl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.opendaylight.controller.sal.binding.model.api.AccessModifier; +import org.opendaylight.controller.sal.binding.model.api.Constant; +import org.opendaylight.controller.sal.binding.model.api.Enumeration; +import org.opendaylight.controller.sal.binding.model.api.GeneratedType; +import org.opendaylight.controller.sal.binding.model.api.MethodSignature; +import org.opendaylight.controller.sal.binding.model.api.Type; +import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTypeBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.MethodSignatureBuilder; + +public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { + + private final String packageName; + private String comment; + private final String name; + private final List enumDefinitions = new ArrayList(); + private final List constantDefintions = new ArrayList(); + private final List methodDefinitions = new ArrayList(); + + public GeneratedTypeBuilderImpl(final String packageName, final String name) { + this.packageName = packageName; + this.name = name; + } + + @Override + public Type getParentType() { + return this; + } + + @Override + public String getPackageName() { + return packageName; + } + + @Override + public String getName() { + return name; + } + + @Override + public void addComment(String comment) { + this.comment = comment; + } + + @Override + public ConstantBuilder addConstant(Type type, String name, Object value) { + final ConstantBuilder builder = new ConstantBuilderImpl(type, name, + value); + constantDefintions.add(builder); + + return builder; + } + + @Override + public EnumBuilder addEnumeration(final String name) { + final EnumBuilder builder = new EnumerationBuilderImpl(packageName, + name); + enumDefinitions.add(builder); + return builder; + } + + @Override + public MethodSignatureBuilder addMethod(final String name) { + final MethodSignatureBuilder builder = new MethodSignatureBuilderImpl( + this, name); + methodDefinitions.add(builder); + return builder; + } + + @Override + public GeneratedType toInstance() { + return new GeneratedTypeImpl(this, packageName, name, enumDefinitions, + constantDefintions, methodDefinitions); + } + + private static final class MethodSignatureBuilderImpl implements + MethodSignatureBuilder { + + private final String name; + private Type returnType; + private final List parameters; + private String comment = ""; + private final Type parent; + + public MethodSignatureBuilderImpl(final Type parent, final String name) { + super(); + this.name = name; + this.parent = parent; + parameters = new ArrayList(); + } + + @Override + public void addReturnType(Type returnType) { + if (returnType != null) { + this.returnType = returnType; + } + } + + @Override + public void addParameter(Type type, String name) { + parameters.add(new MethodParameterImpl(name, type)); + } + + @Override + public void addComment(String comment) { + this.comment = comment; + } + + @Override + public MethodSignature toInstance(Type definingType) { + return new MethodSignatureImpl(definingType, name, comment, + returnType, parameters); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MethodSignatureBuilderImpl other = (MethodSignatureBuilderImpl) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("MethodBuilderImpl [name="); + builder.append(name); + builder.append(", returnType="); + builder.append(returnType); + builder.append(", parameters="); + builder.append(parameters); + builder.append(", comment="); + builder.append(comment); + builder.append(", parent="); + builder.append(parent.getName()); + builder.append("]"); + return builder.toString(); + } + + } + + private static final class MethodSignatureImpl implements MethodSignature { + + private final String name; + private final String comment; + private final Type definingType; + private final Type returnType; + private final List params; + + public MethodSignatureImpl(final Type definingType, final String name, + final String comment, final Type returnType, + final List params) { + super(); + this.name = name; + this.comment = comment; + this.definingType = definingType; + this.returnType = returnType; + this.params = Collections.unmodifiableList(params); + } + + @Override + public String getName() { + return name; + } + + @Override + public String getComment() { + return comment; + } + + @Override + public Type getDefiningType() { + return definingType; + } + + @Override + public Type getReturnType() { + return returnType; + } + + @Override + public List getParameters() { + return params; + } + + @Override + public AccessModifier getAccessModifier() { + return AccessModifier.PUBLIC; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((comment == null) ? 0 : comment.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + + ((params == null) ? 0 : params.hashCode()); + result = prime * result + + ((returnType == null) ? 0 : returnType.hashCode()); + + if (definingType != null) { + result = prime + * result + + ((definingType.getPackageName() == null) ? 0 + : definingType.getPackageName().hashCode()); + result = prime + * result + + ((definingType.getName() == null) ? 0 : definingType + .getName().hashCode()); + } + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + MethodSignatureImpl other = (MethodSignatureImpl) obj; + if (comment == null) { + if (other.comment != null) { + return false; + } + } else if (!comment.equals(other.comment)) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + if (params == null) { + if (other.params != null) { + return false; + } + } else if (!params.equals(other.params)) { + return false; + } + if (definingType == null) { + if (other.definingType != null) { + return false; + } + } else if ((definingType != null) && (other.definingType != null)) { + if (!definingType.getPackageName().equals( + other.definingType.getPackageName()) + && !definingType.getName().equals( + other.definingType.getName())) { + return false; + } + } + if (returnType == null) { + if (other.returnType != null) { + return false; + } + } else if (!returnType.equals(other.returnType)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("MethodImpl [name="); + builder.append(name); + builder.append(", comment="); + builder.append(comment); + if (definingType != null) { + builder.append(", definingType="); + builder.append(definingType.getPackageName()); + builder.append("."); + builder.append(definingType.getName()); + } else { + builder.append(", definingType= null"); + } + builder.append(", returnType="); + builder.append(returnType); + builder.append(", params="); + builder.append(params); + builder.append("]"); + return builder.toString(); + } + } + + private static final class GeneratedTypeImpl implements GeneratedType { + + private final Type parent; + private final String packageName; + private final String name; + private final List enumDefinitions; + private final List constantDefintions; + private final List methodDefinitions; + + public GeneratedTypeImpl(final Type parent, final String packageName, + final String name, final List enumBuilders, + final List constantBuilders, + final List methodBuilders) { + super(); + this.parent = parent; + this.packageName = packageName; + this.name = name; + + this.constantDefintions = toUnmodifiableConstants(constantBuilders); + this.enumDefinitions = toUnmodifiableEnums(enumBuilders); + this.methodDefinitions = toUnmodifiableMethods(methodBuilders); + } + + private List toUnmodifiableMethods( + List methodBuilders) { + final List methods = new ArrayList(); + for (final MethodSignatureBuilder methodBuilder : methodBuilders) { + methods.add(methodBuilder.toInstance(this)); + } + return Collections.unmodifiableList(methods); + } + + private List toUnmodifiableEnums( + List enumBuilders) { + final List enums = new ArrayList(); + for (final EnumBuilder enumBuilder : enumBuilders) { + enums.add(enumBuilder.toInstance(this)); + } + return Collections.unmodifiableList(enums); + } + + private List toUnmodifiableConstants( + List constantBuilders) { + final List constants = new ArrayList(); + for (final ConstantBuilder enumBuilder : constantBuilders) { + constants.add(enumBuilder.toInstance(this)); + } + return Collections.unmodifiableList(constants); + } + + @Override + public String getPackageName() { + return packageName; + } + + @Override + public String getName() { + return name; + } + + @Override + public Type getParentType() { + return parent; + } + + @Override + public List getEnumDefintions() { + return enumDefinitions; + } + + @Override + public List getConstantDefinitions() { + return constantDefintions; + } + + @Override + public List getMethodDefinitions() { + return methodDefinitions; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime + * result + + ((constantDefintions == null) ? 0 : constantDefintions + .hashCode()); + result = prime + * result + + ((enumDefinitions == null) ? 0 : enumDefinitions + .hashCode()); + result = prime + * result + + ((methodDefinitions == null) ? 0 : methodDefinitions + .hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + + ((packageName == null) ? 0 : packageName.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + GeneratedTypeImpl other = (GeneratedTypeImpl) obj; + if (constantDefintions == null) { + if (other.constantDefintions != null) { + return false; + } + } else if (!constantDefintions.equals(other.constantDefintions)) { + return false; + } + if (enumDefinitions == null) { + if (other.enumDefinitions != null) { + return false; + } + } else if (!enumDefinitions.equals(other.enumDefinitions)) { + return false; + } + if (methodDefinitions == null) { + if (other.methodDefinitions != null) { + return false; + } + } else if (!methodDefinitions.equals(other.methodDefinitions)) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + if (packageName == null) { + if (other.packageName != null) { + return false; + } + } else if (!packageName.equals(other.packageName)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("GeneratedTypeImpl [parent="); + builder.append(parent.getName()); + builder.append(", packageName="); + builder.append(packageName); + builder.append(", name="); + builder.append(name); + builder.append(", enumDefinitions="); + builder.append(enumDefinitions); + builder.append(", constantDefintions="); + builder.append(constantDefintions); + builder.append(", methodDefinitions="); + builder.append(methodDefinitions); + builder.append("]"); + return builder.toString(); + } + } +}