From: lsedlak Date: Thu, 25 Apr 2013 15:39:25 +0000 (+0200) Subject: Added support for annotations in generated APIs. X-Git-Tag: releasepom-0.1.0~521^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=4221068644c7e8d08880b4d54e2a099a646796b9 Added support for annotations in generated APIs. Added AnnotationType and AnnotationTypeBuilder into binding-model-api; Modified GeneratedTransferObject -> now extending from GeneratedType - implementation modified accordingly; Added getAnnotations property into: Enumeration, GeneratedType, GeneratedTransferObject and MethodSignature interfaces; Added addAnnotation method into EnumBuilder, GeneratedPropertyBuilder, GeneratedTOBuilder, GeneratedTypeBuilder, MethodSignatureBuilder; Added implementation of AnnotationType into all builder implementations in binding-generator-impl project part; Added AnnotationTypeTest into binding-generator-impl; Package name in src/test/java for binding-generator-impl changed to org.opendaylight.controller.sal.binding.generator.impl to test package protected classes; In binding-java-api-generator CompositeKeyGenerator renamed to ClassCodeGenerator; Added implementation to write annotations for interface and class *.java files; Added support methods for annotations to Generator Util class; Signed-off-by: Lukas Sedlak --- diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationTypeBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationTypeBuilderImpl.java new file mode 100644 index 0000000000..ef64214a6a --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationTypeBuilderImpl.java @@ -0,0 +1,327 @@ +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.AnnotationType; +import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder; + +final class AnnotationTypeBuilderImpl implements AnnotationTypeBuilder { + + private final String packageName; + private final String name; + private final List annotationBuilders; + private final List parameters; + + public AnnotationTypeBuilderImpl(final String packageName, final String name) { + super(); + this.packageName = packageName; + this.name = name; + + annotationBuilders = new ArrayList(); + parameters = new ArrayList(); + } + + @Override + public String getPackageName() { + return packageName; + } + + @Override + public String getName() { + return name; + } + + @Override + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + + @Override + public boolean addParameter(String paramName, String value) { + if ((paramName != null) && (value != null)) { + return parameters.add(new ParameterImpl(paramName, value)); + } + return false; + } + + @Override + public boolean addParameters(String paramName, List values) { + if ((paramName != null) && (values != null)) { + return parameters.add(new ParameterImpl(paramName, values)); + } + return false; + } + + @Override + public AnnotationType toInstance() { + return new AnnotationTypeImpl(packageName, name, annotationBuilders, parameters); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + 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; + } + AnnotationTypeBuilderImpl other = (AnnotationTypeBuilderImpl) obj; + 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("AnnotationTypeBuilder [packageName="); + builder.append(packageName); + builder.append(", name="); + builder.append(name); + builder.append(", annotationBuilders="); + builder.append(annotationBuilders); + builder.append(", parameters="); + builder.append(parameters); + builder.append("]"); + return builder.toString(); + } + + private static final class AnnotationTypeImpl implements AnnotationType { + + private final String packageName; + private final String name; + private List annotations; + private final List parameters; + private List paramNames; + + public AnnotationTypeImpl(String packageName, String name, + List annotationBuilders, + List parameters) { + super(); + this.packageName = packageName; + this.name = name; + + this.annotations = new ArrayList(); + for (final AnnotationTypeBuilder builder : annotationBuilders) { + annotations.add(builder.toInstance()); + } + + this.annotations = Collections.unmodifiableList(annotations); + this.parameters = Collections.unmodifiableList(parameters); + + paramNames = new ArrayList(); + for (final AnnotationType.Parameter parameter : parameters) { + paramNames.add(parameter.getName()); + } + this.paramNames = Collections.unmodifiableList(paramNames); + } + + @Override + public String getPackageName() { + return packageName; + } + + @Override + public String getName() { + return name; + } + + @Override + public List getAnnotations() { + return annotations; + } + + @Override + public Parameter getParameter(final String paramName) { + if (paramName != null) { + for (final AnnotationType.Parameter parameter : parameters) { + if (parameter.getName().equals(paramName)) { + return parameter; + } + } + } + return null; + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public List getParameterNames() { + return paramNames; + } + + @Override + public boolean containsParameters() { + return !parameters.isEmpty(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + 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; + } + AnnotationTypeImpl other = (AnnotationTypeImpl) obj; + 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("AnnotationType [packageName="); + builder.append(packageName); + builder.append(", name="); + builder.append(name); + builder.append(", annotations="); + builder.append(annotations); + builder.append(", parameters="); + builder.append(parameters); + builder.append("]"); + return builder.toString(); + } + } + + private static final class ParameterImpl implements AnnotationType.Parameter { + + private final String name; + private final String value; + private final List values; + + public ParameterImpl(String name, String value) { + super(); + this.name = name; + this.value = value; + this.values = Collections.emptyList(); + } + + public ParameterImpl(String name, List values) { + super(); + this.name = name; + this.values = values; + this.value = null; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getValue() { + return value; + } + + @Override + public List getValues() { + return values; + } + + @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; + } + ParameterImpl other = (ParameterImpl) 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("ParameterImpl [name="); + builder.append(name); + builder.append(", value="); + builder.append(value); + builder.append(", values="); + builder.append(values); + builder.append("]"); + return builder.toString(); + } + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/ConstantBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/ConstantBuilderImpl.java index cb2fc872b9..cbe704aff1 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/ConstantBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/ConstantBuilderImpl.java @@ -1,189 +1,166 @@ -/* - * 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 org.opendaylight.controller.sal.binding.model.api.Constant; -import org.opendaylight.controller.sal.binding.model.api.Type; -import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder; - -final class ConstantBuilderImpl implements ConstantBuilder { - - private final Type type; - private final String name; - private Object value; - - public ConstantBuilderImpl(Type type, String name, Object value) { - super(); - this.type = type; - this.name = name; - this.value = value; - } - - public ConstantBuilderImpl(Type type, String name) { - super(); - this.type = type; - this.name = name; - } - - @Override - public void assignValue(Object value) { - this.value = value; - } - - @Override - public Constant toInstance(final Type definingType) { - return new ConstantImpl(definingType, type, name, value); - } - - private static final class ConstantImpl implements Constant { - - final Type definingType; - private final Type type; - private final String name; - private final Object value; - - public ConstantImpl(final Type definingType, final Type type, - final String name, final Object value) { - super(); - this.definingType = definingType; - this.type = type; - this.name = name; - this.value = value; - } - - @Override - public Type getDefiningType() { - return definingType; - } - - @Override - public Type getType() { - return type; - } - - @Override - public String getName() { - return name; - } - - @Override - public Object getValue() { - return value; - } - - @Override - public String toFormattedString() { - StringBuilder builder = new StringBuilder(); - builder.append(type); - builder.append(" "); - builder.append(name); - builder.append(" "); - builder.append(value); - return builder.toString(); - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - result = prime * result + ((value == null) ? 0 : value.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; - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - ConstantImpl other = (ConstantImpl) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - if (type == null) { - if (other.type != null) { - return false; - } - } else if (!type.equals(other.type)) { - return false; - } - if (value == null) { - if (other.value != null) { - return false; - } - } else if (!value.equals(other.value)) { - 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; - } - } - return true; - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("ConstantImpl [type="); - builder.append(type); - builder.append(", name="); - builder.append(name); - builder.append(", value="); - builder.append(value); - if (definingType != null) { - builder.append(", definingType="); - builder.append(definingType.getPackageName()); - builder.append("."); - builder.append(definingType.getName()); - } else { - builder.append(", definingType= null"); - } - builder.append("]"); - return builder.toString(); - } - } -} +/* + * 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 org.opendaylight.controller.sal.binding.model.api.Constant; +import org.opendaylight.controller.sal.binding.model.api.Type; +import org.opendaylight.controller.sal.binding.model.api.type.builder.ConstantBuilder; + +final class ConstantBuilderImpl implements ConstantBuilder { + + private final Type type; + private final String name; + private Object value; + + public ConstantBuilderImpl(Type type, String name, Object value) { + super(); + this.type = type; + this.name = name; + this.value = value; + } + + public ConstantBuilderImpl(Type type, String name) { + super(); + this.type = type; + this.name = name; + } + + @Override + public void assignValue(Object value) { + this.value = value; + } + + @Override + public Constant toInstance(final Type definingType) { + return new ConstantImpl(definingType, type, name, value); + } + + private static final class ConstantImpl implements Constant { + + final Type definingType; + private final Type type; + private final String name; + private final Object value; + + public ConstantImpl(final Type definingType, final Type type, + final String name, final Object value) { + super(); + this.definingType = definingType; + this.type = type; + this.name = name; + this.value = value; + } + + @Override + public Type getDefiningType() { + return definingType; + } + + @Override + public Type getType() { + return type; + } + + @Override + public String getName() { + return name; + } + + @Override + public Object getValue() { + return value; + } + + @Override + public String toFormattedString() { + StringBuilder builder = new StringBuilder(); + builder.append(type); + builder.append(" "); + builder.append(name); + builder.append(" "); + builder.append(value); + return builder.toString(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + ConstantImpl other = (ConstantImpl) obj; + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + if (type == null) { + if (other.type != null) { + return false; + } + } else if (!type.equals(other.type)) { + return false; + } + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Constant [type="); + builder.append(type); + builder.append(", name="); + builder.append(name); + builder.append(", value="); + builder.append(value); + if (definingType != null) { + builder.append(", definingType="); + builder.append(definingType.getPackageName()); + builder.append("."); + builder.append(definingType.getName()); + } else { + builder.append(", definingType= null"); + } + builder.append("]"); + return builder.toString(); + } + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/EnumerationBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/EnumerationBuilderImpl.java index 4dde459911..45d363db39 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/EnumerationBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/EnumerationBuilderImpl.java @@ -11,15 +11,18 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.opendaylight.controller.sal.binding.model.api.AnnotationType; import org.opendaylight.controller.sal.binding.model.api.Enumeration; import org.opendaylight.controller.sal.binding.model.api.Type; +import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder; import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder; final class EnumerationBuilderImpl implements EnumBuilder { private final String packageName; private final String name; private final List values; - + private final List annotationBuilders = new ArrayList(); + public EnumerationBuilderImpl(final String packageName, final String name) { super(); this.packageName = packageName; @@ -37,6 +40,17 @@ final class EnumerationBuilderImpl implements EnumBuilder { return name; } + @Override + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + @Override public void addValue(final String name, final Integer value) { values.add(new EnumPairImpl(name, value)); @@ -44,9 +58,9 @@ final class EnumerationBuilderImpl implements EnumBuilder { @Override public Enumeration toInstance(final Type definingType) { - return new EnumerationImpl(definingType, packageName, name, values); + return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values); } - + /* * (non-Javadoc) * @@ -191,7 +205,7 @@ final class EnumerationBuilderImpl implements EnumBuilder { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("EnumPairImpl [name="); + builder.append("EnumPair [name="); builder.append(name); builder.append(", value="); builder.append(value); @@ -206,12 +220,18 @@ final class EnumerationBuilderImpl implements EnumBuilder { private final String packageName; private final String name; private final List values; - + private List annotations = new ArrayList(); + public EnumerationImpl(final Type definingType, + final List annotationBuilders, final String packageName, final String name, final List values) { super(); this.definingType = definingType; + for (final AnnotationTypeBuilder builder : annotationBuilders) { + annotations.add(builder.toInstance()); + } + this.annotations = Collections.unmodifiableList(annotations); this.packageName = packageName; this.name = name; this.values = Collections.unmodifiableList(values); @@ -236,6 +256,11 @@ final class EnumerationBuilderImpl implements EnumBuilder { public List getValues() { return values; } + + @Override + public List getAnnotations() { + return annotations; + } @Override public String toFormattedString() { @@ -279,17 +304,6 @@ final class EnumerationBuilderImpl implements EnumBuilder { result = prime * result + ((values == null) ? 0 : values.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; } @@ -331,18 +345,6 @@ final class EnumerationBuilderImpl implements EnumBuilder { } else if (!values.equals(other.values)) { 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; - } - } return true; } @@ -354,7 +356,7 @@ final class EnumerationBuilderImpl implements EnumBuilder { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("EnumerationImpl [packageName="); + builder.append("Enumeration [packageName="); builder.append(packageName); if (definingType != null) { builder.append(", definingType="); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTOBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTOBuilderImpl.java index ff232f7763..f84c3cf012 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTOBuilderImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTOBuilderImpl.java @@ -12,20 +12,24 @@ 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.AnnotationType; 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.GeneratedProperty; import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; 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.AnnotationTypeBuilder; 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.GeneratedPropertyBuilder; import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.MethodSignatureBuilder; final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private String packageName; private final String name; + private String comment = ""; private final List enumerations = new ArrayList(); private final List properties = new ArrayList(); @@ -33,12 +37,16 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private final List hashProperties = new ArrayList(); private final List toStringProperties = new ArrayList(); + private final List constantDefintions = new ArrayList(); + private final List methodDefinitions = new ArrayList(); + private final List annotationBuilders = new ArrayList(); + public GeneratedTOBuilderImpl(String packageName, String name) { super(); this.packageName = packageName; this.name = name; } - + @Override public String getPackageName() { return packageName; @@ -48,7 +56,30 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { public String getName() { return name; } - + + @Override + public Type getParentType() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void addComment(final String comment) { + this.comment = comment; + } + + @Override + public AnnotationTypeBuilder addAnnotation(String packageName, String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl( + packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + @Override public EnumBuilder addEnumeration(String name) { final EnumBuilder builder = new EnumerationBuilderImpl(packageName, @@ -57,6 +88,22 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return builder; } + @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 MethodSignatureBuilder addMethod(String name) { + final MethodSignatureBuilder builder = new MethodSignatureBuilderImpl( + this, name); + methodDefinitions.add(builder); + return builder; + } + @Override public GeneratedPropertyBuilder addProperty(String name) { final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl( @@ -82,15 +129,17 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { @Override public GeneratedTransferObject toInstance() { - return new GeneratedTransferObjectImpl(packageName, name, enumerations, - properties, equalsProperties, hashProperties, - toStringProperties); + return new GeneratedTransferObjectImpl(packageName, name, comment, + annotationBuilders, constantDefintions, enumerations, + methodDefinitions, properties, equalsProperties, + hashProperties, toStringProperties); } private static final class GeneratedPropertyBuilderImpl implements GeneratedPropertyBuilder { private final String name; + private final List annotationBuilders = new ArrayList(); private Type returnType; private final List parameters; private String comment = ""; @@ -111,6 +160,19 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return name; } + @Override + public AnnotationTypeBuilder addAnnotation(String packageName, + String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl( + packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + @Override public boolean addReturnType(Type returnType) { if (returnType != null) { @@ -145,7 +207,7 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { @Override public GeneratedProperty toInstance(final Type definingType) { - return new GeneratedPropertyImpl(name, comment, definingType, + return new GeneratedPropertyImpl(name, comment, annotationBuilders, definingType, returnType, isFinal, isReadOnly, parameters, accessModifier); } } @@ -154,6 +216,7 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { GeneratedProperty { private final String name; + private List annotations; private final String comment; private final Type parent; private final Type returnType; @@ -161,13 +224,18 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private final boolean isReadOnly; private final List parameters; private final AccessModifier modifier; - + public GeneratedPropertyImpl(final String name, final String comment, - final Type parent, final Type returnType, + final List annotationBuilders, final Type parent, final Type returnType, final boolean isFinal, final boolean isReadOnly, final List parameters, final AccessModifier modifier) { super(); this.name = name; + this.annotations = new ArrayList(); + for (final AnnotationTypeBuilder builder : annotationBuilders) { + this.annotations.add(builder.toInstance()); + } + this.annotations = Collections.unmodifiableList(this.annotations); this.comment = comment; this.parent = parent; this.returnType = returnType; @@ -192,6 +260,11 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return parent; } + @Override + public List getAnnotations() { + return annotations; + } + @Override public Type getReturnType() { return returnType; @@ -217,31 +290,15 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return isFinal; } + + @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + ((comment == null) ? 0 : comment.hashCode()); - result = prime * result + (isFinal ? 1231 : 1237); - result = prime * result + (isReadOnly ? 1231 : 1237); - result = prime * result - + ((modifier == null) ? 0 : modifier.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((parameters == null) ? 0 : parameters.hashCode()); - - if (parent != null) { - result = prime - * result - + ((parent.getPackageName() == null) ? 0 : parent - .getPackageName().hashCode()); - result = prime - * result - + ((parent.getName() == null) ? 0 : parent.getName() - .hashCode()); - } - result = prime * result + ((returnType == null) ? 0 : returnType.hashCode()); return result; @@ -259,22 +316,6 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return false; } GeneratedPropertyImpl other = (GeneratedPropertyImpl) obj; - if (comment == null) { - if (other.comment != null) { - return false; - } - } else if (!comment.equals(other.comment)) { - return false; - } - if (isFinal != other.isFinal) { - return false; - } - if (isReadOnly != other.isReadOnly) { - return false; - } - if (modifier != other.modifier) { - return false; - } if (name == null) { if (other.name != null) { return false; @@ -289,22 +330,13 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { } else if (!parameters.equals(other.parameters)) { return false; } - if (parent == null) { - if (other.parent != null) { - return false; - } - } else if ((parent != null) && (other.parent != null)) { - if (!parent.getPackageName().equals( - other.parent.getPackageName()) - && !parent.getName().equals(other.parent.getName())) { - return false; - } - } if (returnType == null) { if (other.returnType != null) { return false; } - } else if (!returnType.equals(other.returnType)) { + } else if (!returnType.getPackageName().equals(other.returnType.getPackageName())) { + return false; + } else if (!returnType.getName().equals(other.returnType.getName())) { return false; } return true; @@ -315,6 +347,8 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { StringBuilder builder = new StringBuilder(); builder.append("GeneratedPropertyImpl [name="); builder.append(name); + builder.append(", annotations="); + builder.append(annotations); builder.append(", comment="); builder.append(comment); if (parent != null) { @@ -323,7 +357,7 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { builder.append("."); builder.append(parent.getName()); } else { - builder.append(", parent= null"); + builder.append(", parent=null"); } builder.append(", returnType="); builder.append(returnType); @@ -345,12 +379,49 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { private final String packageName; private final String name; - // private final List constants; + private final String comment; + private final List constants; private final List enumerations; private final List properties; private final List equalsProperties; private final List hashCodeProperties; private final List stringProperties; + private final List annotations; + private final List methods; + + public GeneratedTransferObjectImpl(final String packageName, + final String name, + final String comment, + final List annotationBuilders, + final List constantBuilders, + final List enumBuilders, + final List methodBuilders, + final List propBuilers, + final List equalsBuilers, + final List hashCodeBuilers, + final List stringBuilers) { + super(); + this.packageName = packageName; + this.name = name; + this.comment = comment; + this.annotations = toUnmodifiableAnnotations(annotationBuilders); + this.constants = toUnmodifiableConstant(constantBuilders); + this.enumerations = toUnmodifiableEnumerations(enumBuilders); + this.properties = toUnmodifiableProperties(propBuilers); + this.methods = toUnmodifiableMethods(methodBuilders); + this.equalsProperties = toUnmodifiableProperties(equalsBuilers); + this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers); + this.stringProperties = toUnmodifiableProperties(stringBuilers); + } + + private List toUnmodifiableAnnotations( + final List annotationBuilders) { + final List annotations = new ArrayList(); + for (final AnnotationTypeBuilder builder : annotationBuilders) { + annotations.add(builder.toInstance()); + } + return Collections.unmodifiableList(annotations); + } private List toUnmodifiableEnumerations( final List enumBuilders) { @@ -370,6 +441,15 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return Collections.unmodifiableList(constants); } + private List toUnmodifiableMethods( + final List methodBuilders) { + final List methods = new ArrayList(); + for (final MethodSignatureBuilder builder : methodBuilders) { + methods.add(builder.toInstance(this)); + } + return Collections.unmodifiableList(methods); + } + private List toUnmodifiableProperties( final List propBuilders) { final List constants = new ArrayList(); @@ -379,22 +459,6 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return Collections.unmodifiableList(constants); } - public GeneratedTransferObjectImpl(String packageName, String name, - List enumBuilders, - List propBuilers, - List equalsBuilers, - List hashCodeBuilers, - List stringBuilers) { - super(); - this.packageName = packageName; - this.name = name; - this.enumerations = toUnmodifiableEnumerations(enumBuilders); - this.properties = toUnmodifiableProperties(propBuilers); - this.equalsProperties = toUnmodifiableProperties(equalsBuilers); - this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilers); - this.stringProperties = toUnmodifiableProperties(stringBuilers); - } - @Override public String getPackageName() { return packageName; @@ -405,11 +469,36 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return name; } + @Override + public Type getParentType() { + return null; + } + + @Override + public String getComment() { + return comment; + } + + @Override + public List getAnnotations() { + return annotations; + } + @Override public List getEnumDefintions() { return enumerations; } + @Override + public List getConstantDefinitions() { + return constants; + } + + @Override + public List getMethodDefinitions() { + return methods; + } + @Override public List getProperties() { return properties; @@ -430,42 +519,16 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return stringProperties; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#hashCode() - */ @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result - + ((enumerations == null) ? 0 : enumerations.hashCode()); - result = prime - * result - + ((equalsProperties == null) ? 0 : equalsProperties - .hashCode()); - result = prime - * result - + ((hashCodeProperties == null) ? 0 : hashCodeProperties - .hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((packageName == null) ? 0 : packageName.hashCode()); - result = prime * result - + ((properties == null) ? 0 : properties.hashCode()); - result = prime - * result - + ((stringProperties == null) ? 0 : stringProperties - .hashCode()); return result; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#equals(java.lang.Object) - */ @Override public boolean equals(Object obj) { if (this == obj) { @@ -478,27 +541,6 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { return false; } GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) obj; - if (enumerations == null) { - if (other.enumerations != null) { - return false; - } - } else if (!enumerations.equals(other.enumerations)) { - return false; - } - if (equalsProperties == null) { - if (other.equalsProperties != null) { - return false; - } - } else if (!equalsProperties.equals(other.equalsProperties)) { - return false; - } - if (hashCodeProperties == null) { - if (other.hashCodeProperties != null) { - return false; - } - } else if (!hashCodeProperties.equals(other.hashCodeProperties)) { - return false; - } if (name == null) { if (other.name != null) { return false; @@ -513,35 +555,20 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { } else if (!packageName.equals(other.packageName)) { return false; } - if (properties == null) { - if (other.properties != null) { - return false; - } - } else if (!properties.equals(other.properties)) { - return false; - } - if (stringProperties == null) { - if (other.stringProperties != null) { - return false; - } - } else if (!stringProperties.equals(other.stringProperties)) { - return false; - } return true; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("GeneratedTransferObjectImpl [packageName="); + builder.append("GeneratedTransferObject [packageName="); builder.append(packageName); builder.append(", name="); builder.append(name); + builder.append(", comment="); + builder.append(comment); + builder.append(", constants="); + builder.append(constants); builder.append(", enumerations="); builder.append(enumerations); builder.append(", properties="); @@ -552,6 +579,10 @@ final class GeneratedTOBuilderImpl implements GeneratedTOBuilder { builder.append(hashCodeProperties); builder.append(", stringProperties="); builder.append(stringProperties); + builder.append(", annotations="); + builder.append(annotations); + builder.append(", methods="); + builder.append(methods); builder.append("]"); return builder.toString(); } 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 index 2e4ed89c7b..1b8246ab2b 100644 --- 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 @@ -11,12 +11,13 @@ 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.AnnotationType; 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.AnnotationTypeBuilder; 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; @@ -25,8 +26,9 @@ import org.opendaylight.controller.sal.binding.model.api.type.builder.MethodSign public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { private final String packageName; - private String comment; + private String comment = ""; private final String name; + private final List annotationBuilders = new ArrayList(); private final List enumDefinitions = new ArrayList(); private final List constantDefintions = new ArrayList(); private final List methodDefinitions = new ArrayList(); @@ -56,20 +58,31 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { this.comment = comment; } + @Override + public AnnotationTypeBuilder addAnnotation(String packageName, String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl( + packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + @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 String innerPackageName = packageName + "." + this.name; - final EnumBuilder builder = new EnumerationBuilderImpl(innerPackageName, - name); + final EnumBuilder builder = new EnumerationBuilderImpl( + innerPackageName, name); enumDefinitions.add(builder); return builder; } @@ -84,251 +97,9 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { @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(); - // TODO: move implementation elsewhere! - - } - - @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(); - } + return new GeneratedTypeImpl(this, packageName, name, comment, + annotationBuilders, enumDefinitions, constantDefintions, + methodDefinitions); } private static final class GeneratedTypeImpl implements GeneratedType { @@ -336,24 +107,38 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { private final Type parent; private final String packageName; private final String name; + private final String comment; + private final List annotations; 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 String name, final String comment, + final List annotationBuilders, + final List enumBuilders, final List constantBuilders, final List methodBuilders) { super(); this.parent = parent; this.packageName = packageName; this.name = name; - + this.comment = comment; + this.annotations = toUnmodifiableAnnotations(annotationBuilders); this.constantDefintions = toUnmodifiableConstants(constantBuilders); this.enumDefinitions = toUnmodifiableEnums(enumBuilders); this.methodDefinitions = toUnmodifiableMethods(methodBuilders); } + private List toUnmodifiableAnnotations( + final List annotationBuilders) { + final List annotations = new ArrayList(); + for (final AnnotationTypeBuilder builder : annotationBuilders) { + annotations.add(builder.toInstance()); + } + return Collections.unmodifiableList(annotations); + } + private List toUnmodifiableMethods( List methodBuilders) { final List methods = new ArrayList(); @@ -396,6 +181,16 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { return parent; } + @Override + public String getComment() { + return comment; + } + + @Override + public List getAnnotations() { + return annotations; + } + @Override public List getEnumDefintions() { return enumDefinitions; @@ -486,12 +281,22 @@ public final class GeneratedTypeBuilderImpl implements GeneratedTypeBuilder { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("GeneratedTypeImpl [parent="); - builder.append(parent.getName()); - builder.append(", packageName="); + builder.append("GeneratedType [packageName="); builder.append(packageName); builder.append(", name="); builder.append(name); + if (parent != null) { + builder.append(", parent="); + builder.append(parent.getPackageName()); + builder.append("."); + builder.append(parent.getName()); + } else { + builder.append(", parent=null"); + } + builder.append(", comment="); + builder.append(comment); + builder.append(", annotations="); + builder.append(annotations); builder.append(", enumDefinitions="); builder.append(enumDefinitions); builder.append(", constantDefintions="); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodParameterImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodParameterImpl.java index 08eab6007a..c17ff2b756 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodParameterImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodParameterImpl.java @@ -87,7 +87,7 @@ final class MethodParameterImpl implements Parameter { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("MethodParameterImpl [name="); + builder.append("MethodParameter [name="); builder.append(name); builder.append(", type="); builder.append(type.getPackageName()); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodSignatureBuilderImpl.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodSignatureBuilderImpl.java new file mode 100644 index 0000000000..4e00bf24ed --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/main/java/org/opendaylight/controller/sal/binding/generator/impl/MethodSignatureBuilderImpl.java @@ -0,0 +1,273 @@ +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.AnnotationType; +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.AnnotationTypeBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.MethodSignatureBuilder; + +final class MethodSignatureBuilderImpl implements MethodSignatureBuilder { + private final String name; + private Type returnType; + private final List parameters; + private final List annotationBuilders; + private String comment = ""; + private final Type parent; + + public MethodSignatureBuilderImpl(final Type parent, final String name) { + super(); + this.name = name; + this.parent = parent; + this.parameters = new ArrayList(); + this.annotationBuilders = new ArrayList(); + } + + @Override + public AnnotationTypeBuilder addAnnotation(String packageName, String name) { + if (packageName != null && name != null) { + final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl( + packageName, name); + if (annotationBuilders.add(builder)) { + return builder; + } + } + return null; + } + + @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, annotationBuilders, + comment, returnType, parameters); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + + ((parameters == null) ? 0 : parameters.hashCode()); + result = prime * result + + ((returnType == null) ? 0 : returnType.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; + } + if (parameters == null) { + if (other.parameters != null) { + return false; + } + } else if (!parameters.equals(other.parameters)) { + 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("MethodSignatureBuilderImpl [name="); + builder.append(name); + builder.append(", returnType="); + builder.append(returnType); + builder.append(", parameters="); + builder.append(parameters); + builder.append(", annotationBuilders="); + builder.append(annotationBuilders); + builder.append(", comment="); + builder.append(comment); + if (parent != null) { + builder.append(", parent="); + builder.append(parent.getPackageName()); + builder.append("."); + builder.append(parent.getName()); + } else { + builder.append(", parent=null"); + } + 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; + private List annotations; + + public MethodSignatureImpl(final Type definingType, final String name, + final List annotationBuilders, + 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); + + this.annotations = new ArrayList(); + for (final AnnotationTypeBuilder builder : annotationBuilders) { + this.annotations.add(builder.toInstance()); + } + this.annotations = Collections.unmodifiableList(this.annotations); + } + + @Override + public List getAnnotations() { + return annotations; + } + + @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 + ((name == null) ? 0 : name.hashCode()); + result = prime * result + + ((params == null) ? 0 : params.hashCode()); + result = prime * result + + ((returnType == null) ? 0 : returnType.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 (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 (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("MethodSignatureImpl [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(", annotations="); + builder.append(annotations); + builder.append("]"); + return builder.toString(); + } + } +} \ No newline at end of file diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationBuilderTest.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationBuilderTest.java new file mode 100644 index 0000000000..f08b77ff7b --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/AnnotationBuilderTest.java @@ -0,0 +1,126 @@ +/* + * 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.opendaylight.controller.sal.binding.model.api.AnnotationType; +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.controller.sal.binding.model.api.GeneratedType; +import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTOBuilder; +import org.opendaylight.controller.sal.binding.model.api.type.builder.GeneratedTypeBuilder; + +public class AnnotationBuilderTest { + + @Test + public void generatedTypeAnnotationTest() { + GeneratedTypeBuilder genTypeBuilder = new GeneratedTOBuilderImpl( + "org.opendaylight.controller", "AnnotInterface"); + + genTypeBuilder.addAnnotation("javax.management", "MXBean"); + final AnnotationTypeBuilder annotDesc = genTypeBuilder.addAnnotation( + "javax.management", "Description"); + annotDesc.addParameter("description", "some sort of interface"); + + final GeneratedType genType = genTypeBuilder.toInstance(); + + assertNotNull(genType); + assertNotNull(genType.getAnnotations()); + assertEquals(2, genType.getAnnotations().size()); + + int annotCount = 0; + for (final AnnotationType annotation : genType.getAnnotations()) { + if (annotation.getPackageName().equals("javax.management") + && annotation.getName().equals("MXBean")) { + annotCount++; + assertEquals(0, annotation.getParameters().size()); + } + if (annotation.getPackageName().equals("javax.management") + && annotation.getName().equals("Description")) { + annotCount++; + assertEquals(1, annotation.getParameters().size()); + AnnotationType.Parameter param = annotation.getParameter("description"); + assertNotNull(param); + assertEquals("description", param.getName()); + assertNotNull(param.getValue()); + assertEquals("some sort of interface", param.getValue()); + assertNotNull(param.getValues()); + assertTrue(param.getValues().isEmpty()); + } + } + assertEquals(2, annotCount); + } + + @Test + public void methodSignatureAnnotationTest() { + //TODO add test for method annotations + } + + @Test + public void generatedPropertyAnnotationTest() { + //TODO add test for property annotations + } + + @Test + public void generatedTransfeObjectAnnotationTest() { + final GeneratedTOBuilder genTypeBuilder = new GeneratedTOBuilderImpl( + "org.opendaylight.controller", "AnnotClassCache"); + + genTypeBuilder.addAnnotation("javax.management", "MBean"); + final AnnotationTypeBuilder annotNotify = genTypeBuilder.addAnnotation( + "javax.management", "NotificationInfo"); + + final List notifyList = new ArrayList(); + notifyList.add("\"my.notif.type\""); + annotNotify.addParameters("types", notifyList); + annotNotify.addParameter("description", + "@Description(\"my notification\")"); + + GeneratedTransferObject genTO = genTypeBuilder.toInstance(); + + assertNotNull(genTO); + assertNotNull(genTO.getAnnotations()); + assertEquals(2, genTO.getAnnotations().size()); + + int annotCount = 0; + for (final AnnotationType annotation : genTO.getAnnotations()) { + if (annotation.getPackageName().equals("javax.management") + && annotation.getName().equals("MBean")) { + annotCount++; + assertEquals(0, annotation.getParameters().size()); + } + if (annotation.getPackageName().equals("javax.management") + && annotation.getName().equals("NotificationInfo")) { + annotCount++; + assertEquals(2, annotation.getParameters().size()); + AnnotationType.Parameter param = annotation.getParameter("types"); + assertNotNull(param); + assertEquals("types", param.getName()); + assertNull(param.getValue()); + assertNotNull(param.getValues()); + assertEquals(1, param.getValues().size()); + assertEquals("\"my.notif.type\"", param.getValues().get(0)); + + param = annotation.getParameter("description"); + assertNotNull(param); + assertEquals("description", param.getName()); + assertNotNull(param.getValue()); + assertEquals("@Description(\"my notification\")", param.getValue()); + } + } + assertEquals(2, annotCount); + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/BaseTypeProvider.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/BaseTypeProvider.java similarity index 94% rename from opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/BaseTypeProvider.java rename to opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/BaseTypeProvider.java index 0ac2a20741..c54ac0613f 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/BaseTypeProvider.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/BaseTypeProvider.java @@ -1,40 +1,40 @@ -/* - * 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.yang.types.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Ignore; -import org.junit.Test; -import org.opendaylight.controller.binding.generator.util.Types; -import org.opendaylight.controller.sal.binding.generator.spi.TypeProvider; -import org.opendaylight.controller.sal.binding.model.api.ConcreteType; -import org.opendaylight.controller.sal.binding.model.api.ParameterizedType; -import org.opendaylight.controller.sal.binding.model.api.Type; -import org.opendaylight.controller.sal.binding.yang.types.BaseYangTypes; - -public class BaseTypeProvider { - - @Test - public void test() { - TypeProvider provider = BaseYangTypes.BASE_YANG_TYPES_PROVIDER; - - Type stringType = provider.javaTypeForYangType("string"); - assertEquals("java.lang", stringType.getPackageName()); - assertEquals("String", stringType.getName()); - assertTrue(stringType instanceof ConcreteType); - ParameterizedType stringBooleanMap = Types.mapTypeFor( - provider.javaTypeForYangType("string"), - provider.javaTypeForYangType("boolean")); - assertTrue(!(stringBooleanMap instanceof ConcreteType)); - assertEquals("java.util", stringBooleanMap.getPackageName()); - assertEquals("Map", stringBooleanMap.getName()); - assertEquals(2, stringBooleanMap.getActualTypeArguments().length); - } -} +/* + * 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 static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Ignore; +import org.junit.Test; +import org.opendaylight.controller.binding.generator.util.Types; +import org.opendaylight.controller.sal.binding.generator.spi.TypeProvider; +import org.opendaylight.controller.sal.binding.model.api.ConcreteType; +import org.opendaylight.controller.sal.binding.model.api.ParameterizedType; +import org.opendaylight.controller.sal.binding.model.api.Type; +import org.opendaylight.controller.sal.binding.yang.types.BaseYangTypes; + +public class BaseTypeProvider { + + @Test + public void test() { + TypeProvider provider = BaseYangTypes.BASE_YANG_TYPES_PROVIDER; + + Type stringType = provider.javaTypeForYangType("string"); + assertEquals("java.lang", stringType.getPackageName()); + assertEquals("String", stringType.getName()); + assertTrue(stringType instanceof ConcreteType); + ParameterizedType stringBooleanMap = Types.mapTypeFor( + provider.javaTypeForYangType("string"), + provider.javaTypeForYangType("boolean")); + assertTrue(!(stringBooleanMap instanceof ConcreteType)); + assertEquals("java.util", stringBooleanMap.getPackageName()); + assertEquals("Map", stringBooleanMap.getName()); + assertEquals(2, stringBooleanMap.getActualTypeArguments().length); + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/DefinedTypesProviderTest.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/DefinedTypesProviderTest.java similarity index 82% rename from opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/DefinedTypesProviderTest.java rename to opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/DefinedTypesProviderTest.java index 3177a5508b..19972c9565 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/DefinedTypesProviderTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/DefinedTypesProviderTest.java @@ -1,12 +1,12 @@ -/* - * 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.yang.types.test; - -public class DefinedTypesProviderTest { - -} +/* + * 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; + +public class DefinedTypesProviderTest { + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/GeneratedTypesTest.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypesTest.java similarity index 98% rename from opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/GeneratedTypesTest.java rename to opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypesTest.java index 94e61892fd..aa3debff94 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/GeneratedTypesTest.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/generator/impl/GeneratedTypesTest.java @@ -5,7 +5,7 @@ * 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.yang.types.test; +package org.opendaylight.controller.sal.binding.generator.impl; import static org.junit.Assert.*; @@ -418,7 +418,7 @@ public class GeneratedTypesTest { int genTypesCount = 0; int genTOsCount = 0; for (final Type type : genTypes) { - if (type instanceof GeneratedType) { + if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) { final GeneratedType genType = (GeneratedType) type; if (genType.getName().equals("ListParentContainer")) { assertEquals(2, genType.getMethodDefinitions().size()); @@ -501,7 +501,7 @@ public class GeneratedTypesTest { int genTypesCount = 0; int genTOsCount = 0; for (final Type type : genTypes) { - if (type instanceof GeneratedType) { + if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) { genTypesCount++; } else if (type instanceof GeneratedTransferObject) { final GeneratedTransferObject genTO = (GeneratedTransferObject) type; @@ -548,7 +548,7 @@ public class GeneratedTypesTest { int genTypesCount = 0; int genTOsCount = 0; for (final Type type : genTypes) { - if (type instanceof GeneratedType) { + if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) { genTypesCount++; } else if (type instanceof GeneratedTransferObject) { genTOsCount++; diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/package-info.java b/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/package-info.java deleted file mode 100644 index 76e8a9b59e..0000000000 --- a/opendaylight/sal/yang-prototype/code-generator/binding-generator-impl/src/test/java/org/opendaylight/controller/sal/binding/yang/types/test/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - * 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.yang.types.test; \ No newline at end of file diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/CompositeKeyGenerator.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java similarity index 80% rename from opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/CompositeKeyGenerator.java rename to opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java index cc7bffa86c..8858ad35cf 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/CompositeKeyGenerator.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/ClassCodeGenerator.java @@ -1,60 +1,66 @@ -/* - * 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.java.api.generator; - -import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; -import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.List; - -import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; -import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; -import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.controller.sal.binding.model.api.Type; - -public class CompositeKeyGenerator implements CodeGenerator { - - @Override - public Writer generate(Type type) throws IOException { - final Writer writer = new StringWriter(); - if (type instanceof GeneratedTransferObject) { - GeneratedTransferObject genTO = (GeneratedTransferObject)type; - final List fields = genTO.getProperties(); - - writer.write(GeneratorUtil.createClassDeclarationWithPkgName( - type.getPackageName(), type.getName(), "")); - writer.write(NL); - writer.write(NL); - - if (fields != null) { - for (GeneratedProperty field : fields) { - writer.write(GeneratorUtil.createField(field, TAB) + NL); - } - writer.write(NL); - writer.write(GeneratorUtil.createConstructor(genTO, TAB) + NL); - writer.write(NL); - for (GeneratedProperty field : fields) { - writer.write(GeneratorUtil.createGetter(field, TAB) + NL); - } - writer.write(NL); - - writer.write(GeneratorUtil.createHashCode(genTO.getHashCodeIdentifiers(), TAB) + NL); - writer.write(GeneratorUtil.createEquals(genTO, genTO.getEqualsIdentifiers(), TAB) + NL); - writer.write(GeneratorUtil.createToString(genTO, genTO.getToStringIdentifiers(), TAB) + NL); - - writer.write(RCB); - } - } - return writer; - } - -} +/* + * 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.java.api.generator; + +import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; +import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.List; + +import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; +import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.controller.sal.binding.model.api.Type; + +public class ClassCodeGenerator implements CodeGenerator { + + @Override + public Writer generate(Type type) throws IOException { + final Writer writer = new StringWriter(); + if (type instanceof GeneratedTransferObject) { + GeneratedTransferObject genTO = (GeneratedTransferObject) type; + final List fields = genTO.getProperties(); + + writer.write(GeneratorUtil.createClassDeclarationWithPkgName(genTO, + "")); + writer.write(NL); + writer.write(NL); + + if (fields != null) { + for (GeneratedProperty field : fields) { + writer.write(GeneratorUtil.createField(field, TAB) + NL); + } + writer.write(NL); + writer.write(GeneratorUtil.createConstructor(genTO, TAB) + NL); + writer.write(NL); + for (GeneratedProperty field : fields) { + writer.write(GeneratorUtil.createGetter(field, TAB) + NL); + } + writer.write(NL); + + writer.write(GeneratorUtil.createHashCode( + genTO.getHashCodeIdentifiers(), TAB) + + NL); + writer.write(GeneratorUtil.createEquals(genTO, + genTO.getEqualsIdentifiers(), TAB) + + NL); + writer.write(GeneratorUtil.createToString(genTO, + genTO.getToStringIdentifiers(), TAB) + + NL); + + writer.write(RCB); + } + } + return writer; + } + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java index f2388fef19..32b3fa03eb 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorJavaFile.java @@ -1,153 +1,153 @@ -/* - * 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.java.api.generator; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; -import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.controller.sal.binding.model.api.GeneratedType; - -public class GeneratorJavaFile { - - private final CodeGenerator interfaceGenerator; - private final CompositeKeyGenerator classGenerator; - private final Set types; - private final Set genTransferObjects; - - public GeneratorJavaFile(final CodeGenerator codeGenerator, - final Set types) { - this.interfaceGenerator = codeGenerator; - this.types = types; - this.genTransferObjects = new HashSet(); - classGenerator = new CompositeKeyGenerator(); - } - - public GeneratorJavaFile(final Set types, - final Set genTransferObjects) { - this.interfaceGenerator = new InterfaceGenerator(); - this.classGenerator = new CompositeKeyGenerator(); - this.types = types; - this.genTransferObjects = genTransferObjects; - } - - public boolean generateToFile() { - return generateToFile(null); - } - - public boolean generateToFile(String path) { - try { - for (GeneratedType type : types) { - String parentPath = generateParentPath(path, - type.getPackageName()); - - File file = new File(parentPath, type.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = interfaceGenerator.generate(type); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } - } - } - for (GeneratedTransferObject transferObject : genTransferObjects) { - String parentPath = generateParentPath(path, - transferObject.getPackageName()); - - File file = new File(parentPath, transferObject.getName() + ".java"); - File parent = file.getParentFile(); - if (!parent.exists()) { - parent.mkdirs(); - } - - if (!file.exists()) { - FileWriter fw = null; - BufferedWriter bw = null; - - file.createNewFile(); - fw = new FileWriter(file); - bw = new BufferedWriter(fw); - Writer writer = classGenerator.generate(transferObject); - bw.write(writer.toString()); - - if (bw != null) { - try { - bw.close(); - } catch (IOException e) { - // TODO: log? - } - } - } - } - return true; - } catch (IOException e) { - // TODO: log? - return false; - } - } - - private String generateParentPath(String path, String pkg) { - List dirs = new ArrayList(); - String pkgPath = ""; - if (pkg != null) { - if (pkg.length() > 0) { - if (pkg.contains(".")) { - String[] split = pkg.split("\\."); - for (String dir : split) { - dirs.add(dir); - } - } else { - dirs.add(pkg); - } - for (int i = 0; i < dirs.size(); i++) { - if (i == 0) { - pkgPath += dirs.get(i); - } else { - pkgPath += File.separator + dirs.get(i); - } - } - } - } - String fullPath = ""; - if (path != null) { - if (path.endsWith(File.separator)) { - fullPath = path + pkgPath; - } else { - fullPath = path + File.separator + pkgPath; - } - } else { - fullPath = pkgPath; - } - return fullPath; - } - -} +/* + * 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.java.api.generator; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; +import org.opendaylight.controller.sal.binding.model.api.GeneratedType; + +public class GeneratorJavaFile { + + private final CodeGenerator interfaceGenerator; + private final ClassCodeGenerator classGenerator; + private final Set types; + private final Set genTransferObjects; + + public GeneratorJavaFile(final CodeGenerator codeGenerator, + final Set types) { + this.interfaceGenerator = codeGenerator; + this.types = types; + this.genTransferObjects = new HashSet(); + classGenerator = new ClassCodeGenerator(); + } + + public GeneratorJavaFile(final Set types, + final Set genTransferObjects) { + this.interfaceGenerator = new InterfaceGenerator(); + this.classGenerator = new ClassCodeGenerator(); + this.types = types; + this.genTransferObjects = genTransferObjects; + } + + public boolean generateToFile() { + return generateToFile(null); + } + + public boolean generateToFile(String path) { + try { + for (GeneratedType type : types) { + String parentPath = generateParentPath(path, + type.getPackageName()); + + File file = new File(parentPath, type.getName() + ".java"); + File parent = file.getParentFile(); + if (!parent.exists()) { + parent.mkdirs(); + } + + if (!file.exists()) { + FileWriter fw = null; + BufferedWriter bw = null; + + file.createNewFile(); + fw = new FileWriter(file); + bw = new BufferedWriter(fw); + Writer writer = interfaceGenerator.generate(type); + bw.write(writer.toString()); + + if (bw != null) { + try { + bw.close(); + } catch (IOException e) { + // TODO: log? + } + } + } + } + for (GeneratedTransferObject transferObject : genTransferObjects) { + String parentPath = generateParentPath(path, + transferObject.getPackageName()); + + File file = new File(parentPath, transferObject.getName() + ".java"); + File parent = file.getParentFile(); + if (!parent.exists()) { + parent.mkdirs(); + } + + if (!file.exists()) { + FileWriter fw = null; + BufferedWriter bw = null; + + file.createNewFile(); + fw = new FileWriter(file); + bw = new BufferedWriter(fw); + Writer writer = classGenerator.generate(transferObject); + bw.write(writer.toString()); + + if (bw != null) { + try { + bw.close(); + } catch (IOException e) { + // TODO: log? + } + } + } + } + return true; + } catch (IOException e) { + // TODO: log? + return false; + } + } + + private String generateParentPath(String path, String pkg) { + List dirs = new ArrayList(); + String pkgPath = ""; + if (pkg != null) { + if (pkg.length() > 0) { + if (pkg.contains(".")) { + String[] split = pkg.split("\\."); + for (String dir : split) { + dirs.add(dir); + } + } else { + dirs.add(pkg); + } + for (int i = 0; i < dirs.size(); i++) { + if (i == 0) { + pkgPath += dirs.get(i); + } else { + pkgPath += File.separator + dirs.get(i); + } + } + } + } + String fullPath = ""; + if (path != null) { + if (path.endsWith(File.separator)) { + fullPath = path + pkgPath; + } else { + fullPath = path + File.separator + pkgPath; + } + } else { + fullPath = pkgPath; + } + return fullPath; + } + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorUtil.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorUtil.java index a4018a5d5c..b4387fe803 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorUtil.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/GeneratorUtil.java @@ -1,406 +1,457 @@ -/* - * 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.java.api.generator; - -import static org.opendaylight.controller.sal.java.api.generator.Constants.CLASS; -import static org.opendaylight.controller.sal.java.api.generator.Constants.COMMA; -import static org.opendaylight.controller.sal.java.api.generator.Constants.ENUM; -import static org.opendaylight.controller.sal.java.api.generator.Constants.FINAL; -import static org.opendaylight.controller.sal.java.api.generator.Constants.GAP; -import static org.opendaylight.controller.sal.java.api.generator.Constants.IFC; -import static org.opendaylight.controller.sal.java.api.generator.Constants.LB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.LCB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; -import static org.opendaylight.controller.sal.java.api.generator.Constants.PKG; -import static org.opendaylight.controller.sal.java.api.generator.Constants.PRIVATE; -import static org.opendaylight.controller.sal.java.api.generator.Constants.PUBLIC; -import static org.opendaylight.controller.sal.java.api.generator.Constants.RB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.SC; -import static org.opendaylight.controller.sal.java.api.generator.Constants.STATIC; -import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -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.Enumeration.Pair; -import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; -import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.controller.sal.binding.model.api.MethodSignature; -import org.opendaylight.controller.sal.binding.model.api.MethodSignature.Parameter; -import org.opendaylight.controller.sal.binding.model.api.ParameterizedType; -import org.opendaylight.controller.sal.binding.model.api.Type; - -public class GeneratorUtil { - - private static final String[] SET_VALUES = new String[] { "abstract", - "assert", "boolean", "break", "byte", "case", "catch", "char", - "class", "const", "continue", "default", "double", "do", "else", - "enum", "extends", "false", "final", "finally", "float", "for", - "goto", "if", "implements", "import", "instanceof", "int", - "interface", "long", "native", "new", "null", "package", "private", - "protected", "public", "return", "short", "static", "strictfp", - "super", "switch", "synchronized", "this", "throw", "throws", - "transient", "true", "try", "void", "volatile", "while" }; - - public static final Set JAVA_RESERVED_WORDS = new HashSet( - Arrays.asList(SET_VALUES)); - - private GeneratorUtil() { - } - - private static String validateParamName(final String paramName) { - if (paramName != null) { - if (JAVA_RESERVED_WORDS.contains(paramName)) { - return "_" + paramName; - } - } - return paramName; - } - - public static String createIfcDeclarationWithPkgName( - final String packageName, final String name, final String indent) { - return createFileDeclarationWithPkgName(IFC, - packageName, validateParamName(name), indent); - } - - public static String createClassDeclarationWithPkgName( - final String packageName, final String name, final String indent) { - return createFileDeclarationWithPkgName(CLASS, - packageName, validateParamName(name), indent); - } - - private static String createFileDeclarationWithPkgName(final String type, - final String packageName, final String name, final String indent) { - final StringBuilder builder = new StringBuilder(); - builder.append(PKG + GAP + packageName + SC); - builder.append(NL); - builder.append(NL); - builder.append(PUBLIC + GAP + type + GAP + validateParamName(name) + GAP + LCB); - return builder.toString(); - } - - public static String createConstant(final Constant constant, - final String indent) { - final StringBuilder builder = new StringBuilder(); - builder.append(indent + PUBLIC + GAP + STATIC + GAP + FINAL + GAP); - builder.append(getExplicitType(constant.getType()) + GAP - + constant.getName()); - builder.append(GAP + "=" + GAP); - builder.append(constant.getValue() + SC); - return builder.toString(); - } - - public static String createField(final GeneratedProperty property, - final String indent) { - final StringBuilder builder = new StringBuilder(); - builder.append(indent + PRIVATE + GAP); - builder.append(getExplicitType(property.getReturnType()) + GAP - + property.getName()); - builder.append(SC); - return builder.toString(); - } - - /** - * Create method declaration in interface. - * - * @param method - * @param indent - * @return - */ - public static String createMethodDeclaration(final MethodSignature method, - final String indent) { - final String comment = method.getComment(); - final Type type = method.getReturnType(); - final String name = method.getName(); - final List parameters = method.getParameters(); - - final StringBuilder builder = new StringBuilder(); - createComment(builder, comment, indent); - - builder.append(indent + getExplicitType(type) + GAP + name); - builder.append(LB); - for (int i = 0; i < parameters.size(); i++) { - Parameter p = parameters.get(i); - String separator = COMMA; - if (i + 1 == parameters.size()) { - separator = ""; - } - builder.append(getExplicitType(p.getType()) + GAP + validateParamName(p.getName()) - + separator); - } - builder.append(RB); - builder.append(SC); - - return builder.toString(); - } - - public static String createConstructor( - GeneratedTransferObject genTransferObject, final String indent) { - final StringBuilder builder = new StringBuilder(); - - final List properties = genTransferObject - .getProperties(); - builder.append(indent); - builder.append(PUBLIC); - builder.append(GAP); - builder.append(genTransferObject.getName()); - builder.append(LB); - - boolean first = true; - if (properties != null) { - for (final GeneratedProperty property : properties) { - if (first) { - builder.append(getExplicitType(property.getReturnType())); - builder.append(" "); - builder.append(property.getName()); - first = false; - } else { - builder.append(", "); - builder.append(getExplicitType(property.getReturnType())); - builder.append(builder.append(" ")); - builder.append(property.getName()); - } - } - } - - builder.append(RB); - builder.append(GAP); - builder.append(LCB); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("super();"); - builder.append(NL); - - if (properties != null) { - for (final GeneratedProperty property : properties) { - builder.append(indent); - builder.append(TAB); - builder.append("this."); - builder.append(property.getName()); - builder.append(" = "); - builder.append(property.getName()); - builder.append(SC); - builder.append(NL); - } - } - - builder.append(indent); - builder.append(RCB); - - return builder.toString(); - } - - public static String createGetter(final GeneratedProperty property, - final String indent) { - final StringBuilder builder = new StringBuilder(); - - final Type type = property.getReturnType(); - final String varName = property.getName(); - final char first = Character.toUpperCase(varName.charAt(0)); - final String methodName = "get" + first + varName.substring(1); - - builder.append(indent + PUBLIC + GAP + getExplicitType(type) + GAP - + methodName); - builder.append(LB + RB + LCB + NL); - - String currentIndent = indent + TAB; - - builder.append(currentIndent + "return " + varName + SC + NL); - - builder.append(indent + RCB); - return builder.toString(); - } - - public static String createHashCode( - final List properties, final String indent) { - StringBuilder builder = new StringBuilder(); - builder.append(indent + "public int hashCode() {" + NL); - builder.append(indent + TAB + "final int prime = 31;" + NL); - builder.append(indent + TAB + "int result = 1;" + NL); - - for (GeneratedProperty property : properties) { - String fieldName = property.getName(); - builder.append(indent + TAB + "result = prime * result + ((" - + fieldName + " == null) ? 0 : " + fieldName - + ".hashCode());" + NL); - } - - builder.append(indent + TAB + "return result;" + NL); - builder.append(indent + RCB + NL); - return builder.toString(); - } - - public static String createEquals(final GeneratedTransferObject type, - final List properties, final String indent) { - StringBuilder builder = new StringBuilder(); - final String indent1 = indent + TAB; - final String indent2 = indent + TAB + TAB; - final String indent3 = indent + TAB + TAB + TAB; - - builder.append(indent + "public boolean equals(Object obj) {" + NL); - builder.append(indent1 + "if (this == obj) {" + NL); - builder.append(indent2 + "return true;" + NL); - builder.append(indent1 + "}" + NL); - builder.append(indent1 + "if (obj == null) {" + NL); - builder.append(indent2 + "return false;" + NL); - builder.append(indent1 + "}" + NL); - builder.append(indent1 + "if (getClass() != obj.getClass()) {" + NL); - builder.append(indent2 + "return false;" + NL); - builder.append(indent1 + "}" + NL); - - String typeStr = type.getPackageName() + "." + type.getName(); - builder.append(indent1 + typeStr + " other = (" + typeStr + ") obj;" - + NL); - - for (GeneratedProperty property : properties) { - String fieldName = property.getName(); - builder.append(indent1 + "if (" + fieldName + " == null) {" + NL); - builder.append(indent2 + "if (other." + fieldName + " != null) {" - + NL); - builder.append(indent3 + "return false;" + NL); - builder.append(indent2 + "}" + NL); - builder.append(indent1 + "} else if (!" + fieldName - + ".equals(other." + fieldName + ")) {" + NL); - builder.append(indent2 + "return false;" + NL); - builder.append(indent1 + "}" + NL); - } - - builder.append(indent1 + "return true;" + NL); - - builder.append(indent + RCB + NL); - return builder.toString(); - } - - public static String createToString(final GeneratedTransferObject type, - final List properties, final String indent) { - StringBuilder builder = new StringBuilder(); - builder.append(indent); - builder.append("public String toString() {"); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("StringBuilder builder = new StringBuilder();"); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("builder.append(\""); - builder.append(type.getName()); - builder.append(" ["); - - boolean first = true; - for (GeneratedProperty property : properties) { - if (first) { - builder.append(property.getName()); - builder.append("=\");"); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("builder.append("); - builder.append(property.getName()); - builder.append(");"); - first = false; - } else { - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("builder.append(\", "); - builder.append(property.getName()); - builder.append("=\");"); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("builder.append(\", "); - builder.append(property.getName()); - builder.append(");"); - } - } - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("builder.append(\"]\");"); - builder.append(NL); - builder.append(indent); - builder.append(TAB); - builder.append("return builder.toString();"); - - builder.append(NL); - builder.append(indent); - builder.append(RCB); - builder.append(NL); - return builder.toString(); - } - - public static String createEnum(final Enumeration enumeration, - final String indent) { - final StringBuilder builder = new StringBuilder(indent + ENUM + GAP - + enumeration.getName() + GAP + LCB + NL); - - String separator = COMMA; - final List values = enumeration.getValues(); - builder.append(indent + TAB); - for (int i = 0; i < values.size(); i++) { - if (i + 1 == values.size()) { - separator = SC; - } - builder.append(values.get(i).getName() + separator); - } - builder.append(NL); - builder.append(indent + RCB); - return builder.toString(); - } - - private static String getExplicitType(final Type type) { - String packageName = type.getPackageName(); - if (packageName.endsWith(".")) { - packageName = packageName.substring(0, packageName.length() - 1); - } - final StringBuilder builder = new StringBuilder(packageName + "." - + type.getName()); - if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType) type; - Type[] pTypes = pType.getActualTypeArguments(); - builder.append("<"); - builder.append(getParameters(pTypes)); - builder.append(">"); - } - if (builder.toString().equals("java.lang.Void")) { - return "void"; - } - return builder.toString(); - } - - private static String getParameters(final Type[] pTypes) { - final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < pTypes.length; i++) { - Type t = pTypes[i]; - - String separator = COMMA; - if (i + 1 == pTypes.length) { - separator = ""; - } - builder.append(getExplicitType(t) + separator); - } - return builder.toString(); - } - - private static void createComment(final StringBuilder builder, - final String comment, final String indent) { - if (comment != null && comment.length() > 0) { - builder.append(indent + "/*" + NL); - builder.append(indent + comment + NL); - builder.append(indent + "*/" + NL); - } - } - -} +/* + * 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.java.api.generator; + +import static org.opendaylight.controller.sal.java.api.generator.Constants.CLASS; +import static org.opendaylight.controller.sal.java.api.generator.Constants.COMMA; +import static org.opendaylight.controller.sal.java.api.generator.Constants.ENUM; +import static org.opendaylight.controller.sal.java.api.generator.Constants.FINAL; +import static org.opendaylight.controller.sal.java.api.generator.Constants.GAP; +import static org.opendaylight.controller.sal.java.api.generator.Constants.IFC; +import static org.opendaylight.controller.sal.java.api.generator.Constants.LB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.LCB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; +import static org.opendaylight.controller.sal.java.api.generator.Constants.PKG; +import static org.opendaylight.controller.sal.java.api.generator.Constants.PRIVATE; +import static org.opendaylight.controller.sal.java.api.generator.Constants.PUBLIC; +import static org.opendaylight.controller.sal.java.api.generator.Constants.RB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.SC; +import static org.opendaylight.controller.sal.java.api.generator.Constants.STATIC; +import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; + +import java.util.List; + +import org.opendaylight.controller.sal.binding.model.api.AnnotationType; +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.Enumeration.Pair; +import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; +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.MethodSignature.Parameter; +import org.opendaylight.controller.sal.binding.model.api.ParameterizedType; +import org.opendaylight.controller.sal.binding.model.api.Type; + +public class GeneratorUtil { + + private GeneratorUtil() { + } + + public static String createIfcDeclarationWithPkgName( + final GeneratedType genType, final String indent) { + return createFileDeclarationWithPkgName(IFC, genType, indent); + } + + public static String createClassDeclarationWithPkgName( + final GeneratedTransferObject genTransferObject, final String indent) { + return createFileDeclarationWithPkgName(CLASS, genTransferObject, + indent); + } + + private static String createFileDeclarationWithPkgName(final String type, + final GeneratedType genType, final String indent) { + final StringBuilder builder = new StringBuilder(); + builder.append(PKG + GAP + genType.getPackageName() + SC); + builder.append(NL); + builder.append(NL); + + if (!genType.getAnnotations().isEmpty()) { + final List annotations = genType.getAnnotations(); + appendAnnotations(builder, annotations); + builder.append(NL); + } + builder.append(PUBLIC + GAP + type + GAP + genType.getName() + GAP + + LCB); + return builder.toString(); + } + + private static StringBuilder appendAnnotations(final StringBuilder builder, final List annotations) { + if ((builder != null) && (annotations != null)) { + for (final AnnotationType annotation : annotations) { + builder.append("@"); + builder.append(annotation.getPackageName()); + builder.append("."); + builder.append(annotation.getName()); + + if (annotation.containsParameters()) { + builder.append("("); + final List parameters = annotation + .getParameters(); + appendAnnotationParams(builder, parameters); + builder.append(")"); + } + } + } + return builder; + } + + private static StringBuilder appendAnnotationParams( + final StringBuilder builder, + final List parameters) { + if (parameters != null) { + int i = 0; + for (final AnnotationType.Parameter param : parameters) { + if (param == null) { + continue; + } + if (i > 0) { + builder.append(", "); + } + final String paramName = param.getName(); + if (param.getValue() != null) { + builder.append(paramName); + builder.append(" = "); + builder.append(param.getValue()); + } else { + builder.append(paramName); + builder.append(" = {"); + final List values = param.getValues(); + builder.append(values.get(0)); + for (int j = 1; j < values.size(); ++j) { + builder.append(", "); + builder.append(values.get(j)); + } + builder.append("}"); + } + i++; + } + } + return builder; + } + + public static String createConstant(final Constant constant, + final String indent) { + final StringBuilder builder = new StringBuilder(); + builder.append(indent + PUBLIC + GAP + STATIC + GAP + FINAL + GAP); + builder.append(getExplicitType(constant.getType()) + GAP + + constant.getName()); + builder.append(GAP + "=" + GAP); + builder.append(constant.getValue() + SC); + return builder.toString(); + } + + public static String createField(final GeneratedProperty property, + final String indent) { + final StringBuilder builder = new StringBuilder(); + builder.append(indent); + if (!property.getAnnotations().isEmpty()) { + final List annotations = property.getAnnotations(); + appendAnnotations(builder, annotations); + builder.append(NL); + } + builder.append(indent + PRIVATE + GAP); + builder.append(getExplicitType(property.getReturnType()) + GAP + + property.getName()); + builder.append(SC); + return builder.toString(); + } + + /** + * Create method declaration in interface. + * + * @param method + * @param indent + * @return + */ + public static String createMethodDeclaration(final MethodSignature method, + final String indent) { + final String comment = method.getComment(); + final Type type = method.getReturnType(); + final String name = method.getName(); + final List parameters = method.getParameters(); + + final StringBuilder builder = new StringBuilder(); + createComment(builder, comment, indent); + builder.append(NL); + builder.append(indent); + + if (!method.getAnnotations().isEmpty()) { + final List annotations = method.getAnnotations(); + appendAnnotations(builder, annotations); + builder.append(NL); + } + + builder.append(indent + getExplicitType(type) + GAP + name); + builder.append(LB); + for (int i = 0; i < parameters.size(); i++) { + Parameter p = parameters.get(i); + String separator = COMMA; + if (i + 1 == parameters.size()) { + separator = ""; + } + builder.append(getExplicitType(p.getType()) + GAP + p.getName() + + separator); + } + builder.append(RB); + builder.append(SC); + + return builder.toString(); + } + + public static String createConstructor( + GeneratedTransferObject genTransferObject, final String indent) { + final StringBuilder builder = new StringBuilder(); + + final List properties = genTransferObject + .getProperties(); + builder.append(indent); + builder.append(PUBLIC); + builder.append(GAP); + builder.append(genTransferObject.getName()); + builder.append(LB); + + boolean first = true; + if (properties != null) { + for (final GeneratedProperty property : properties) { + if (first) { + builder.append(getExplicitType(property.getReturnType())); + builder.append(" "); + builder.append(property.getName()); + first = false; + } else { + builder.append(", "); + builder.append(getExplicitType(property.getReturnType())); + builder.append(builder.append(" ")); + builder.append(property.getName()); + } + } + } + + builder.append(RB); + builder.append(GAP); + builder.append(LCB); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("super();"); + builder.append(NL); + + if (properties != null) { + for (final GeneratedProperty property : properties) { + builder.append(indent); + builder.append(TAB); + builder.append("this."); + builder.append(property.getName()); + builder.append(" = "); + builder.append(property.getName()); + builder.append(SC); + builder.append(NL); + } + } + + builder.append(indent); + builder.append(RCB); + + return builder.toString(); + } + + public static String createGetter(final GeneratedProperty property, + final String indent) { + final StringBuilder builder = new StringBuilder(); + + final Type type = property.getReturnType(); + final String varName = property.getName(); + final char first = Character.toUpperCase(varName.charAt(0)); + final String methodName = "get" + first + varName.substring(1); + + builder.append(indent + PUBLIC + GAP + getExplicitType(type) + GAP + + methodName); + builder.append(LB + RB + LCB + NL); + + String currentIndent = indent + TAB; + + builder.append(currentIndent + "return " + varName + SC + NL); + + builder.append(indent + RCB); + return builder.toString(); + } + + public static String createHashCode( + final List properties, final String indent) { + StringBuilder builder = new StringBuilder(); + builder.append(indent + "public int hashCode() {" + NL); + builder.append(indent + TAB + "final int prime = 31;" + NL); + builder.append(indent + TAB + "int result = 1;" + NL); + + for (GeneratedProperty property : properties) { + String fieldName = property.getName(); + builder.append(indent + TAB + "result = prime * result + ((" + + fieldName + " == null) ? 0 : " + fieldName + + ".hashCode());" + NL); + } + + builder.append(indent + TAB + "return result;" + NL); + builder.append(indent + RCB + NL); + return builder.toString(); + } + + public static String createEquals(final GeneratedTransferObject type, + final List properties, final String indent) { + StringBuilder builder = new StringBuilder(); + final String indent1 = indent + TAB; + final String indent2 = indent + TAB + TAB; + final String indent3 = indent + TAB + TAB + TAB; + + builder.append(indent + "public boolean equals(Object obj) {" + NL); + builder.append(indent1 + "if (this == obj) {" + NL); + builder.append(indent2 + "return true;" + NL); + builder.append(indent1 + "}" + NL); + builder.append(indent1 + "if (obj == null) {" + NL); + builder.append(indent2 + "return false;" + NL); + builder.append(indent1 + "}" + NL); + builder.append(indent1 + "if (getClass() != obj.getClass()) {" + NL); + builder.append(indent2 + "return false;" + NL); + builder.append(indent1 + "}" + NL); + + String typeStr = type.getPackageName() + "." + type.getName(); + builder.append(indent1 + typeStr + " other = (" + typeStr + ") obj;" + + NL); + + for (GeneratedProperty property : properties) { + String fieldName = property.getName(); + builder.append(indent1 + "if (" + fieldName + " == null) {" + NL); + builder.append(indent2 + "if (other." + fieldName + " != null) {" + + NL); + builder.append(indent3 + "return false;" + NL); + builder.append(indent2 + "}" + NL); + builder.append(indent1 + "} else if (!" + fieldName + + ".equals(other." + fieldName + ")) {" + NL); + builder.append(indent2 + "return false;" + NL); + builder.append(indent1 + "}" + NL); + } + + builder.append(indent1 + "return true;" + NL); + + builder.append(indent + RCB + NL); + return builder.toString(); + } + + public static String createToString(final GeneratedTransferObject type, + final List properties, final String indent) { + StringBuilder builder = new StringBuilder(); + builder.append(indent); + builder.append("public String toString() {"); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("StringBuilder builder = new StringBuilder();"); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("builder.append(\""); + builder.append(type.getName()); + builder.append(" ["); + + boolean first = true; + for (GeneratedProperty property : properties) { + if (first) { + builder.append(property.getName()); + builder.append("=\");"); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("builder.append("); + builder.append(property.getName()); + builder.append(");"); + first = false; + } else { + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("builder.append(\", "); + builder.append(property.getName()); + builder.append("=\");"); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("builder.append(\", "); + builder.append(property.getName()); + builder.append(");"); + } + } + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("builder.append(\"]\");"); + builder.append(NL); + builder.append(indent); + builder.append(TAB); + builder.append("return builder.toString();"); + + builder.append(NL); + builder.append(indent); + builder.append(RCB); + builder.append(NL); + return builder.toString(); + } + + public static String createEnum(final Enumeration enumeration, + final String indent) { + final StringBuilder builder = new StringBuilder(indent + ENUM + GAP + + enumeration.getName() + GAP + LCB + NL); + + String separator = COMMA; + final List values = enumeration.getValues(); + builder.append(indent + TAB); + for (int i = 0; i < values.size(); i++) { + if (i + 1 == values.size()) { + separator = SC; + } + builder.append(values.get(i).getName() + separator); + } + builder.append(NL); + builder.append(indent + RCB); + return builder.toString(); + } + + private static String getExplicitType(final Type type) { + String packageName = type.getPackageName(); + if (packageName.endsWith(".")) { + packageName = packageName.substring(0, packageName.length() - 1); + } + final StringBuilder builder = new StringBuilder(packageName + "." + + type.getName()); + if (type instanceof ParameterizedType) { + ParameterizedType pType = (ParameterizedType) type; + Type[] pTypes = pType.getActualTypeArguments(); + builder.append("<"); + builder.append(getParameters(pTypes)); + builder.append(">"); + } + if (builder.toString().equals("java.lang.Void")) { + return "void"; + } + return builder.toString(); + } + + private static String getParameters(final Type[] pTypes) { + final StringBuilder builder = new StringBuilder(); + for (int i = 0; i < pTypes.length; i++) { + Type t = pTypes[i]; + + String separator = COMMA; + if (i + 1 == pTypes.length) { + separator = ""; + } + builder.append(getExplicitType(t) + separator); + } + return builder.toString(); + } + + private static void createComment(final StringBuilder builder, + final String comment, final String indent) { + if (comment != null && comment.length() > 0) { + builder.append(indent + "/*" + NL); + builder.append(indent + comment + NL); + builder.append(indent + "*/" + NL); + } + } + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceGenerator.java b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceGenerator.java index a947866e22..bb5b91b97c 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceGenerator.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/controller/sal/java/api/generator/InterfaceGenerator.java @@ -1,67 +1,69 @@ -/* - * 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.java.api.generator; - -import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; -import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; -import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; - -import java.io.IOException; -import java.io.StringWriter; -import java.io.Writer; -import java.util.List; - -import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; -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; - -public class InterfaceGenerator implements CodeGenerator { - - public Writer generate(Type type) throws IOException { - Writer writer = new StringWriter(); - if (type instanceof GeneratedType) { - GeneratedType genType = (GeneratedType) type; - - final List constants = genType.getConstantDefinitions(); - final List methods = genType.getMethodDefinitions(); - final List enums = genType.getEnumDefintions(); - - writer.write(GeneratorUtil.createIfcDeclarationWithPkgName( - type.getPackageName(), type.getName(), "")); - writer.write(NL); - - if (constants != null) { - for (Constant c : constants) { - writer.write(GeneratorUtil.createConstant(c, TAB) + NL); - } - writer.write(NL); - } - - if (methods != null) { - for (MethodSignature m : methods) { - writer.write(GeneratorUtil.createMethodDeclaration(m, TAB) + NL); - } - writer.write(NL); - } - - if (enums != null) { - for (Enumeration e : enums) { - writer.write(GeneratorUtil.createEnum(e, TAB) + NL); - } - writer.write(NL); - } - - writer.write(RCB); - } - return writer; - } - -} +/* + * 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.java.api.generator; + +import static org.opendaylight.controller.sal.java.api.generator.Constants.NL; +import static org.opendaylight.controller.sal.java.api.generator.Constants.RCB; +import static org.opendaylight.controller.sal.java.api.generator.Constants.TAB; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.List; + +import org.opendaylight.controller.sal.binding.model.api.CodeGenerator; +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; + +public class InterfaceGenerator implements CodeGenerator { + + public Writer generate(Type type) throws IOException { + Writer writer = new StringWriter(); + if (type instanceof GeneratedType) { + GeneratedType genType = (GeneratedType) type; + + final List constants = genType.getConstantDefinitions(); + final List methods = genType + .getMethodDefinitions(); + final List enums = genType.getEnumDefintions(); + + writer.write(GeneratorUtil.createIfcDeclarationWithPkgName(genType, + "")); + writer.write(NL); + + if (constants != null) { + for (Constant c : constants) { + writer.write(GeneratorUtil.createConstant(c, TAB) + NL); + } + writer.write(NL); + } + + if (methods != null) { + for (MethodSignature m : methods) { + writer.write(GeneratorUtil.createMethodDeclaration(m, TAB) + + NL); + } + writer.write(NL); + } + + if (enums != null) { + for (Enumeration e : enums) { + writer.write(GeneratorUtil.createEnum(e, TAB) + NL); + } + writer.write(NL); + } + + writer.write(RCB); + } + return writer; + } + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/AnnotationType.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/AnnotationType.java new file mode 100644 index 0000000000..7868675b1e --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/AnnotationType.java @@ -0,0 +1,33 @@ +/* + * 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.model.api; + +import java.util.List; + + +public interface AnnotationType extends Type { + + public List getAnnotations(); + + public Parameter getParameter(final String paramName); + + public List getParameters(); + + public List getParameterNames(); + + public boolean containsParameters(); + + interface Parameter { + + public String getName(); + + public String getValue(); + + public List getValues(); + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/Enumeration.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/Enumeration.java index bfce017cd5..996423bb1b 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/Enumeration.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/Enumeration.java @@ -1,26 +1,28 @@ -/* - * 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.model.api; - -import java.util.List; - -public interface Enumeration extends Type { - - public Type getDefiningType(); - - public List getValues(); - - public String toFormattedString(); - - interface Pair { - - public String getName(); - - public Integer getValue(); - } -} +/* + * 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.model.api; + +import java.util.List; + +public interface Enumeration extends Type { + + public List getAnnotations(); + + public Type getDefiningType(); + + public List getValues(); + + public String toFormattedString(); + + interface Pair { + + public String getName(); + + public Integer getValue(); + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java index 4bed98a26b..95a1ec9fb4 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedTransferObject.java @@ -8,16 +8,8 @@ package org.opendaylight.controller.sal.binding.model.api; import java.util.List; -import java.util.Set; -public interface GeneratedTransferObject extends Type { - - /** - * Returns Set of all Enumerator definitions associated with interface. - * - * @return Set of all Enumerator definitions associated with interface. - */ - public List getEnumDefintions(); +public interface GeneratedTransferObject extends GeneratedType { public List getProperties(); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java index 538231147a..2f70ac5bf5 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/GeneratedType.java @@ -1,56 +1,60 @@ -/* - * 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.model.api; - -import java.util.List; - -/** - * Every Java interface has to be specified with: - *
    - *
  • package that belongs into
  • - *
  • interface name (with commentary that SHOULD be - * present to proper define interface and base contracts specified for - * interface)
  • - *
  • enum and constant definitions (i.e. each - * constant definition is by default defined as public static final - * + type (either primitive or object) and constant name
  • - *
  • method definitions with specified input parameters (with - * types) and return values
  • - *
- * - * By the definition of the interface constant, enum and method definitions MUST - * be public, so there is no need to specify the scope of visibility. - * - * - */ -public interface GeneratedType extends Type { - - public Type getParentType(); - - /** - * Returns Set of all Enumerator definitions associated with interface. - * - * @return Set of all Enumerator definitions associated with interface. - */ - public List getEnumDefintions(); - - /** - * - * - * @return - */ - public List getConstantDefinitions(); - - /** - * - * - * @return - */ - public List getMethodDefinitions(); - -} +/* + * 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.model.api; + +import java.util.List; + +/** + * Every Java interface has to be specified with: + *
    + *
  • package that belongs into
  • + *
  • interface name (with commentary that SHOULD be + * present to proper define interface and base contracts specified for + * interface)
  • + *
  • enum and constant definitions (i.e. each + * constant definition is by default defined as public static final + * + type (either primitive or object) and constant name
  • + *
  • method definitions with specified input parameters (with + * types) and return values
  • + *
+ * + * By the definition of the interface constant, enum and method definitions MUST + * be public, so there is no need to specify the scope of visibility. + * + * + */ +public interface GeneratedType extends Type { + + public Type getParentType(); + + public String getComment(); + + public List getAnnotations(); + + /** + * Returns Set of all Enumerator definitions associated with interface. + * + * @return Set of all Enumerator definitions associated with interface. + */ + public List getEnumDefintions(); + + /** + * + * + * @return + */ + public List getConstantDefinitions(); + + /** + * + * + * @return + */ + public List getMethodDefinitions(); + +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/MethodSignature.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/MethodSignature.java index 603ffdb652..dda1f01291 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/MethodSignature.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/MethodSignature.java @@ -1,31 +1,33 @@ -/* - * 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.model.api; - -import java.util.List; - -public interface MethodSignature { - - public String getName(); - - public String getComment(); - - public Type getDefiningType(); - - public Type getReturnType(); - - public List getParameters(); - - public AccessModifier getAccessModifier(); - - interface Parameter { - public String getName(); - - public Type getType(); - } -} +/* + * 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.model.api; + +import java.util.List; + +public interface MethodSignature { + + public List getAnnotations(); + + public String getName(); + + public String getComment(); + + public Type getDefiningType(); + + public Type getReturnType(); + + public List getParameters(); + + public AccessModifier getAccessModifier(); + + interface Parameter { + public String getName(); + + public Type getType(); + } +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/AnnotationTypeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/AnnotationTypeBuilder.java new file mode 100644 index 0000000000..6016274260 --- /dev/null +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/AnnotationTypeBuilder.java @@ -0,0 +1,24 @@ +/* + * 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.model.api.type.builder; + +import java.util.List; + +import org.opendaylight.controller.sal.binding.model.api.AnnotationType; +import org.opendaylight.controller.sal.binding.model.api.Type; + +public interface AnnotationTypeBuilder extends Type { + + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + + public boolean addParameter(final String paramName, String value); + + public boolean addParameters(final String paramName, List values); + + public AnnotationType toInstance(); +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/EnumBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/EnumBuilder.java index 114a82ac0f..9716c6053e 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/EnumBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/EnumBuilder.java @@ -16,6 +16,8 @@ import org.opendaylight.controller.sal.binding.model.api.Type; */ public interface EnumBuilder extends Type { + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + public void addValue(final String name, final Integer value); public Enumeration toInstance(final Type definingType); diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedPropertyBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedPropertyBuilder.java index c01e740231..fd64cec8b7 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedPropertyBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedPropertyBuilder.java @@ -1,33 +1,35 @@ -/* - * 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.model.api.type.builder; - -import org.opendaylight.controller.sal.binding.model.api.AccessModifier; -import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; -import org.opendaylight.controller.sal.binding.model.api.Type; - -/** - - * - */ -public interface GeneratedPropertyBuilder { - - public String getName(); - - public boolean addReturnType(final Type returnType); - - public void accessorModifier(final AccessModifier modifier); - - public void addComment(final String comment); - - public void setFinal(final boolean isFinal); - - public void setReadOnly(final boolean isReadOnly); - - public GeneratedProperty toInstance(final Type definingType); -} +/* + * 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.model.api.type.builder; + +import org.opendaylight.controller.sal.binding.model.api.AccessModifier; +import org.opendaylight.controller.sal.binding.model.api.GeneratedProperty; +import org.opendaylight.controller.sal.binding.model.api.Type; + +/** + + * + */ +public interface GeneratedPropertyBuilder { + + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + + public String getName(); + + public boolean addReturnType(final Type returnType); + + public void accessorModifier(final AccessModifier modifier); + + public void addComment(final String comment); + + public void setFinal(final boolean isFinal); + + public void setReadOnly(final boolean isReadOnly); + + public GeneratedProperty toInstance(final Type definingType); +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java index ff55fe5f12..2fc4ccf02f 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTOBuilder.java @@ -1,30 +1,27 @@ -/* - * 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.model.api.type.builder; - -import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; -import org.opendaylight.controller.sal.binding.model.api.Type; - -/** - - * - */ -public interface GeneratedTOBuilder extends Type { - - public EnumBuilder addEnumeration(final String name); - - public GeneratedPropertyBuilder addProperty(final String name); - - public boolean addEqualsIdentity(final GeneratedPropertyBuilder property); - - public boolean addHashIdentity(final GeneratedPropertyBuilder property); - - public boolean addToStringProperty(final GeneratedPropertyBuilder property); - - public GeneratedTransferObject toInstance(); -} +/* + * 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.model.api.type.builder; + +import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject; + +/** + + */ +public interface GeneratedTOBuilder extends GeneratedTypeBuilder { + + public GeneratedPropertyBuilder addProperty(final String name); + + public boolean addEqualsIdentity(final GeneratedPropertyBuilder property); + + public boolean addHashIdentity(final GeneratedPropertyBuilder property); + + public boolean addToStringProperty(final GeneratedPropertyBuilder property); + + @Override + public GeneratedTransferObject toInstance(); +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java index 6b21250ac1..55c6abca6e 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/GeneratedTypeBuilder.java @@ -1,31 +1,33 @@ -/* - * 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.model.api.type.builder; - -import org.opendaylight.controller.sal.binding.model.api.GeneratedType; -import org.opendaylight.controller.sal.binding.model.api.Type; - -/** - - * - */ -public interface GeneratedTypeBuilder extends Type { - - public Type getParentType(); - - public void addComment(final String comment); - - public ConstantBuilder addConstant(final Type type, final String name, - final Object value); - - public EnumBuilder addEnumeration(final String name); - - public MethodSignatureBuilder addMethod(final String name); - - public GeneratedType toInstance(); -} +/* + * 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.model.api.type.builder; + +import org.opendaylight.controller.sal.binding.model.api.GeneratedType; +import org.opendaylight.controller.sal.binding.model.api.Type; + +/** + + * + */ +public interface GeneratedTypeBuilder extends Type { + + public Type getParentType(); + + public void addComment(final String comment); + + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + + public ConstantBuilder addConstant(final Type type, final String name, + final Object value); + + public EnumBuilder addEnumeration(final String name); + + public MethodSignatureBuilder addMethod(final String name); + + public GeneratedType toInstance(); +} diff --git a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/MethodSignatureBuilder.java b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/MethodSignatureBuilder.java index 349a342710..572d15faf4 100644 --- a/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/MethodSignatureBuilder.java +++ b/opendaylight/sal/yang-prototype/code-generator/binding-model-api/src/main/java/org/opendaylight/controller/sal/binding/model/api/type/builder/MethodSignatureBuilder.java @@ -1,23 +1,25 @@ -/** - - * - * March 2013 - * - * Copyright (c) 2013 by Cisco Systems, Inc. - * All rights reserved. - */ -package org.opendaylight.controller.sal.binding.model.api.type.builder; - -import org.opendaylight.controller.sal.binding.model.api.MethodSignature; -import org.opendaylight.controller.sal.binding.model.api.Type; - -public interface MethodSignatureBuilder { - - public void addReturnType(final Type returnType); - - public void addParameter(final Type type, final String name); - - public void addComment(final String comment); - - public MethodSignature toInstance(final Type definingType); -} +/** + + * + * March 2013 + * + * Copyright (c) 2013 by Cisco Systems, Inc. + * All rights reserved. + */ +package org.opendaylight.controller.sal.binding.model.api.type.builder; + +import org.opendaylight.controller.sal.binding.model.api.MethodSignature; +import org.opendaylight.controller.sal.binding.model.api.Type; + +public interface MethodSignatureBuilder { + + public AnnotationTypeBuilder addAnnotation(final String packageName, final String name); + + public void addReturnType(final Type returnType); + + public void addParameter(final Type type, final String name); + + public void addComment(final String comment); + + public MethodSignature toInstance(final Type definingType); +}