Maping of union leaf a bits leaf YANG type to JAVA inner classes.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-util / src / main / java / org / opendaylight / controller / binding / generator / util / generated / type / builder / GeneratedTOBuilderImpl.java
index e2cb0aa38133f43bca3adde8d539c7e6a9353d92..571bc4aaaed8559875e9822ea18da81d3ad89fc7 100644 (file)
  */
 package org.opendaylight.controller.binding.generator.util.generated.type.builder;
 
+import org.opendaylight.controller.sal.binding.model.api.*;
+import org.opendaylight.controller.sal.binding.model.api.type.builder.*;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-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;
-
-public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
-    private String packageName;
-    private final String name;
-    private String comment = "";
-
-    private final List<EnumBuilder> enumerations = new ArrayList<EnumBuilder>();
-    private final List<GeneratedPropertyBuilder> properties = new ArrayList<GeneratedPropertyBuilder>();
-    private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<GeneratedPropertyBuilder>();
-    private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<GeneratedPropertyBuilder>();
-    private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<GeneratedPropertyBuilder>();
+public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {
 
-    private final List<ConstantBuilder> constantDefintions = new ArrayList<ConstantBuilder>();
-    private final List<MethodSignatureBuilder> methodDefinitions = new ArrayList<MethodSignatureBuilder>();
-    private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<AnnotationTypeBuilder>();
+    private GeneratedTransferObject extendsType;
+    private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();
+    private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
+    private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
+    private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
+    private boolean isUnionType = false;
 
     public GeneratedTOBuilderImpl(String packageName, String name) {
-        super();
-        this.packageName = packageName;
-        this.name = name;
-    }
-
-    @Override
-    public String getPackageName() {
-        return packageName;
+        super(packageName, name);
+        setAbstract(false);
     }
 
     @Override
-    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;
-            }
+    public void setExtendsType(final GeneratedTransferObject genTransObj) {
+        if (genTransObj == null) {
+            throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
         }
-        return null;
+        extendsType = genTransObj;
     }
 
     @Override
-    public EnumBuilder addEnumeration(String name) {
-        final EnumBuilder builder = new EnumerationBuilderImpl(packageName,
-                name);
-        enumerations.add(builder);
+    public GeneratedPropertyBuilder addProperty(String name) {
+        final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);
+        builder.setAccessModifier(AccessModifier.PUBLIC);
+        properties.add(builder);
         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;
+    public boolean containsProperty(String name) {
+        if (name == null) {
+            throw new IllegalArgumentException("Parameter name can't be null");
+        }
+        for (GeneratedPropertyBuilder property : properties) {
+            if (name.equals(property.getName())) {
+                return true;
+            }
+        }
+        return false;
     }
 
+    /**
+     * Add new Method Signature definition for Generated Type Builder and
+     * returns Method Signature Builder for specifying all Method parameters. <br>
+     * Name of Method cannot be <code>null</code>, if it is <code>null</code>
+     * the method SHOULD throw {@link IllegalArgumentException} <br>
+     * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as
+     * {@link MethodSignatureBuilder#setAbstract(false)},
+     * {@link MethodSignatureBuilder#setFinal(false)} and
+     * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}
+     * 
+     * @param name
+     *            Name of Method
+     * @return <code>new</code> instance of Method Signature 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(
-                name);
-        properties.add(builder);
+        final MethodSignatureBuilder builder = super.addMethod(name);
+        builder.setAbstract(false);
         return builder;
     }
 
@@ -129,374 +95,91 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
 
     @Override
     public GeneratedTransferObject toInstance() {
-        return new GeneratedTransferObjectImpl(packageName, name, comment, 
-                annotationBuilders, constantDefintions, enumerations,
-                methodDefinitions, properties, equalsProperties,
-                hashProperties, toStringProperties);
+        return new GeneratedTransferObjectImpl(null, getPackageName(), getName(), getComment(), getAnnotations(),
+                isAbstract(), extendsType, getImplementsTypes(), getEnclosedTypes(), getEnclosedTransferObjects(),
+                getConstants(), getEnumerations(), getMethodDefinitions(), properties, equalsProperties,
+                hashProperties, toStringProperties, isUnionType);
     }
 
-    private static final class GeneratedPropertyBuilderImpl implements
-            GeneratedPropertyBuilder {
-
-        private final String name;
-        private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<AnnotationTypeBuilder>();
-        private Type returnType;
-        private final List<MethodSignature.Parameter> parameters;
-        private String comment = "";
-        private AccessModifier accessModifier;
-        private boolean isFinal;
-        private boolean isReadOnly;
-
-        public GeneratedPropertyBuilderImpl(final String name) {
-            super();
-            this.name = name;
-            parameters = new ArrayList<MethodSignature.Parameter>();
-            isFinal = true;
-            this.isReadOnly = true;
-            accessModifier = AccessModifier.PUBLIC;
-        }
-
-        public String getName() {
-            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) {
-                this.returnType = returnType;
-                this.parameters.add(new MethodParameterImpl(name, returnType));
-                return true;
-            }
-            return false;
-        }
-
-        @Override
-        public void accessorModifier(final AccessModifier modifier) {
-            accessModifier = modifier;
-        }
-
-        @Override
-        public void addComment(String comment) {
-            if (comment != null) {
-                this.comment = comment;
-            }
-        }
-
-        @Override
-        public void setFinal(boolean isFinal) {
-            this.isFinal = isFinal;
-        }
-
-        @Override
-        public void setReadOnly(boolean isReadOnly) {
-            this.isReadOnly = isReadOnly;
-        }
-
-        @Override
-        public GeneratedProperty toInstance(final Type definingType) {
-            return new GeneratedPropertyImpl(name, comment, annotationBuilders, definingType,
-                    returnType, isFinal, isReadOnly, parameters, accessModifier);
-        }
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("GeneratedTransferObject [packageName=");
+        builder.append(getPackageName());
+        builder.append(", name=");
+        builder.append(getName());
+        builder.append(", comment=");
+        builder.append(getComment());
+        builder.append(", constants=");
+        builder.append(getConstants());
+        builder.append(", enumerations=");
+        builder.append(getEnumerations());
+        builder.append(", properties=");
+        builder.append(properties);
+        builder.append(", equalsProperties=");
+        builder.append(equalsProperties);
+        builder.append(", hashCodeProperties=");
+        builder.append(hashProperties);
+        builder.append(", stringProperties=");
+        builder.append(toStringProperties);
+        builder.append(", annotations=");
+        builder.append(getAnnotations());
+        builder.append(", methods=");
+        builder.append(getMethodDefinitions());
+        builder.append("]");
+        return builder.toString();
     }
 
-    private static final class GeneratedPropertyImpl implements
-            GeneratedProperty {
-
-        private final String name;
-        private List<AnnotationType> annotations;
-        private final String comment;
-        private final Type parent;
-        private final Type returnType;
-        private final boolean isFinal;
-        private final boolean isReadOnly;
-        private final List<MethodSignature.Parameter> parameters;
-        private final AccessModifier modifier;
-        
-        public GeneratedPropertyImpl(final String name, final String comment,
-                final List<AnnotationTypeBuilder> annotationBuilders, final Type parent, final Type returnType,
-                final boolean isFinal, final boolean isReadOnly,
-                final List<Parameter> parameters, final AccessModifier modifier) {
-            super();
-            this.name = name;
-            this.annotations = new ArrayList<AnnotationType>();
-            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;
-            this.isFinal = isFinal;
-            this.isReadOnly = isReadOnly;
-            this.parameters = Collections.unmodifiableList(parameters);
-            this.modifier = modifier;
-        }
-
-        @Override
-        public String getName() {
-            return name;
-        }
-
-        @Override
-        public String getComment() {
-            return comment;
-        }
-
-        @Override
-        public Type getDefiningType() {
-            return parent;
-        }
-
-        @Override
-        public List<AnnotationType> getAnnotations() {
-            return annotations;
-        }
-        
-        @Override
-        public Type getReturnType() {
-            return returnType;
-        }
-
-        @Override
-        public List<Parameter> getParameters() {
-            return parameters;
-        }
-
-        @Override
-        public AccessModifier getAccessModifier() {
-            return modifier;
-        }
-
-        @Override
-        public boolean isReadOnly() {
-            return isReadOnly;
-        }
-
-        @Override
-        public boolean isFinal() {
-            return isFinal;
-        }
-
-        
-
-        @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;
-            }
-            GeneratedPropertyImpl other = (GeneratedPropertyImpl) 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.getPackageName().equals(other.returnType.getPackageName())) {
-                return false;
-            } else if (!returnType.getName().equals(other.returnType.getName())) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            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) {
-                builder.append(", parent=");
-                builder.append(parent.getPackageName());
-                builder.append(".");
-                builder.append(parent.getName());
-            } else {
-                builder.append(", parent=null");
-            }
-            builder.append(", returnType=");
-            builder.append(returnType);
-            builder.append(", isFinal=");
-            builder.append(isFinal);
-            builder.append(", isReadOnly=");
-            builder.append(isReadOnly);
-            builder.append(", parameters=");
-            builder.append(parameters);
-            builder.append(", modifier=");
-            builder.append(modifier);
-            builder.append("]");
-            return builder.toString();
-        }
+    @Override
+    public void setIsUnion(boolean isUnion) {
+        this.isUnionType = isUnion;
     }
 
-    private static final class GeneratedTransferObjectImpl implements
+    private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
             GeneratedTransferObject {
 
-        private final String packageName;
-        private final String name;
-        private final String comment;
-        private final List<Constant> constants;
-        private final List<Enumeration> enumerations;
         private final List<GeneratedProperty> properties;
         private final List<GeneratedProperty> equalsProperties;
         private final List<GeneratedProperty> hashCodeProperties;
         private final List<GeneratedProperty> stringProperties;
-        private final List<AnnotationType> annotations;
-        private final List<MethodSignature> methods;
-
-        public GeneratedTransferObjectImpl(final String packageName,
-                final String name,
-                final String comment,
-                final List<AnnotationTypeBuilder> annotationBuilders,
-                final List<ConstantBuilder> constantBuilders,
-                final List<EnumBuilder> enumBuilders,
-                final List<MethodSignatureBuilder> methodBuilders,
-                final List<GeneratedPropertyBuilder> propBuilers,
-                final List<GeneratedPropertyBuilder> equalsBuilers,
-                final List<GeneratedPropertyBuilder> hashCodeBuilers,
-                final List<GeneratedPropertyBuilder> 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<AnnotationType> toUnmodifiableAnnotations(
-                final List<AnnotationTypeBuilder> annotationBuilders) {
-            final List<AnnotationType> annotations = new ArrayList<AnnotationType>();
-            for (final AnnotationTypeBuilder builder : annotationBuilders) {
-                annotations.add(builder.toInstance());
-            }
-            return Collections.unmodifiableList(annotations);
-        }
-
-        private List<Enumeration> toUnmodifiableEnumerations(
-                final List<EnumBuilder> enumBuilders) {
-            final List<Enumeration> enumerations = new ArrayList<Enumeration>();
-            for (final EnumBuilder builder : enumBuilders) {
-                enumerations.add(builder.toInstance(this));
-            }
-            return Collections.unmodifiableList(enumerations);
-        }
-
-        private List<Constant> toUnmodifiableConstant(
-                final List<ConstantBuilder> constBuilders) {
-            final List<Constant> constants = new ArrayList<Constant>();
-            for (final ConstantBuilder builder : constBuilders) {
-                constants.add(builder.toInstance(this));
-            }
-            return Collections.unmodifiableList(constants);
-        }
-
-        private List<MethodSignature> toUnmodifiableMethods(
-                final List<MethodSignatureBuilder> methodBuilders) {
-            final List<MethodSignature> methods = new ArrayList<MethodSignature>();
-            for (final MethodSignatureBuilder builder : methodBuilders) {
-                methods.add(builder.toInstance(this));
-            }
-            return Collections.unmodifiableList(methods);
-        }
-
-        private List<GeneratedProperty> toUnmodifiableProperties(
-                final List<GeneratedPropertyBuilder> propBuilders) {
-            final List<GeneratedProperty> constants = new ArrayList<GeneratedProperty>();
+        private final GeneratedTransferObject extendsType;
+        private final boolean isUnionType;
+
+        GeneratedTransferObjectImpl(final Type parent, final String packageName, final String name,
+                final String comment, final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
+                final GeneratedTransferObject extendsType, final List<Type> implementsTypes,
+                final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
+                final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<Constant> constants,
+                final List<EnumBuilder> enumBuilders, final List<MethodSignatureBuilder> methodBuilders,
+                final List<GeneratedPropertyBuilder> propBuilders, final List<GeneratedPropertyBuilder> equalsBuilders,
+                final List<GeneratedPropertyBuilder> hashCodeBuilders,
+                final List<GeneratedPropertyBuilder> stringBuilders, final boolean isUnionType) {
+            super(parent, packageName, name, comment, annotationBuilders, isAbstract, implementsTypes,
+                    enclosedGenTypeBuilders, enclosedGenTOBuilders, enumBuilders, constants, methodBuilders);
+            this.extendsType = extendsType;
+            this.properties = toUnmodifiableProperties(propBuilders);
+            this.equalsProperties = toUnmodifiableProperties(equalsBuilders);
+            this.hashCodeProperties = toUnmodifiableProperties(hashCodeBuilders);
+            this.stringProperties = toUnmodifiableProperties(stringBuilders);
+            this.isUnionType = isUnionType;
+        }
+
+        @Override
+        public boolean isUnionType() {
+            return isUnionType;
+        }
+
+        private List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> propBuilders) {
+            final List<GeneratedProperty> properties = new ArrayList<>();
             for (final GeneratedPropertyBuilder builder : propBuilders) {
-                constants.add(builder.toInstance(this));
+                properties.add(builder.toInstance(this));
             }
-            return Collections.unmodifiableList(constants);
-        }
-
-        @Override
-        public String getPackageName() {
-            return packageName;
-        }
-
-        @Override
-        public String getName() {
-            return name;
-        }
-
-        @Override
-        public Type getParentType() {
-            return null;
-        }
-        
-        @Override
-        public String getComment() {
-            return comment;
-        }
-        
-        @Override
-        public List<AnnotationType> getAnnotations() {
-            return annotations;
+            return Collections.unmodifiableList(properties);
         }
 
         @Override
-        public List<Enumeration> getEnumDefintions() {
-            return enumerations;
-        }
-
-        @Override
-        public List<Constant> getConstantDefinitions() {
-            return constants;
-        }
-
-        @Override
-        public List<MethodSignature> getMethodDefinitions() {
-            return methods;
+        public GeneratedTransferObject getExtends() {
+            return extendsType;
         }
 
         @Override
@@ -519,58 +202,27 @@ public final class GeneratedTOBuilderImpl implements GeneratedTOBuilder {
             return stringProperties;
         }
 
-        @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;
-            }
-            GeneratedTransferObjectImpl other = (GeneratedTransferObjectImpl) 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("GeneratedTransferObject [packageName=");
-            builder.append(packageName);
+            builder.append(getPackageName());
             builder.append(", name=");
-            builder.append(name);
+            builder.append(getName());
             builder.append(", comment=");
-            builder.append(comment);
+            builder.append(", annotations=");
+            builder.append(getAnnotations());
+            builder.append(getComment());
+            builder.append(", extends=");
+            builder.append(getExtends());
+            builder.append(", implements=");
+            builder.append(getImplements());
+            builder.append(", enclosedTypes=");
+            builder.append(getEnclosedTypes());
             builder.append(", constants=");
-            builder.append(constants);
+            builder.append(getConstantDefinitions());
             builder.append(", enumerations=");
-            builder.append(enumerations);
+            builder.append(getEnumerations());
             builder.append(", properties=");
             builder.append(properties);
             builder.append(", equalsProperties=");
@@ -579,10 +231,8 @@ public 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(getMethodDefinitions());
             builder.append("]");
             return builder.toString();
         }