Merge "Bug 595 - Failed to maps instance-identifier (XML node) into Java InstanceIden...
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / GeneratedTOBuilderImpl.java
index 02c0ff64932bee8bcf714fae6c7d8b7a156c499f..a2ecc1018d1d765fba3a1c5a5ae67baf47bf7d2a 100644 (file)
@@ -7,21 +7,30 @@
  */
 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
 
-import org.opendaylight.yangtools.sal.binding.model.api.*;
-import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;
-
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
-public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {
+import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
+import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
+import org.opendaylight.yangtools.sal.binding.model.api.ParameterizedType;
+import org.opendaylight.yangtools.sal.binding.model.api.Restrictions;
+import org.opendaylight.yangtools.sal.binding.model.api.Type;
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
+import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
+
+public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
+        GeneratedTOBuilder {
 
     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 isTypedef = false;
     private boolean isUnionType = false;
+    private boolean isUnionTypeBuilder = false;
+    private Restrictions restrictions;
+    private GeneratedPropertyBuilder SUID;
 
     public GeneratedTOBuilderImpl(String packageName, String name) {
         super(packageName, name);
@@ -29,32 +38,12 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
     }
 
     @Override
-    public void setExtendsType(final GeneratedTransferObject genTransObj) {
+    public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
         if (genTransObj == null) {
             throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
         }
         extendsType = genTransObj;
-    }
-
-    @Override
-    public GeneratedPropertyBuilder addProperty(String name) {
-        final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);
-        builder.setAccessModifier(AccessModifier.PUBLIC);
-        properties.add(builder);
-        return builder;
-    }
-
-    @Override
-    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;
+        return this;
     }
 
     /**
@@ -63,10 +52,10 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
      * 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)}
-     * 
+     * {@link MethodSignatureBuilder#setAbstract(boolean)},
+     * {TypeMemberBuilder#setFinal(boolean)} and
+     * {TypeMemberBuilder#setAccessModifier(boolean)}
+     *
      * @param name
      *            Name of Method
      * @return <code>new</code> instance of Method Signature Builder.
@@ -79,26 +68,41 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
     }
 
     @Override
-    public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {
-        return equalsProperties.add(property);
+    public GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property) {
+        equalsProperties.add(property);
+        return this;
     }
 
     @Override
-    public boolean addHashIdentity(GeneratedPropertyBuilder property) {
-        return hashProperties.add(property);
+    public GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property) {
+        hashProperties.add(property);
+        return this;
     }
 
     @Override
-    public boolean addToStringProperty(GeneratedPropertyBuilder property) {
-        return toStringProperties.add(property);
+    public GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property) {
+        toStringProperties.add(property);
+        return this;
+    }
+
+    @Override
+    protected GeneratedTOBuilder thisInstance() {
+        return this;
+    }
+
+    @Override
+    public void setRestrictions(Restrictions restrictions) {
+        this.restrictions = restrictions;
+    }
+
+    @Override
+    public void setSUID(GeneratedPropertyBuilder suid) {
+        this.SUID = suid;
     }
 
     @Override
     public GeneratedTransferObject toInstance() {
-        return new GeneratedTransferObjectImpl(null, getPackageName(), getName(), getComment(), getAnnotations(),
-                isAbstract(), extendsType, getImplementsTypes(), getEnclosedTypes(), getEnclosedTransferObjects(),
-                getConstants(), getEnumerations(), getMethodDefinitions(), properties, equalsProperties,
-                hashProperties, toStringProperties, isUnionType);
+        return new GeneratedTransferObjectImpl(this);
     }
 
     @Override
@@ -114,8 +118,6 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
         builder.append(getConstants());
         builder.append(", enumerations=");
         builder.append(getEnumerations());
-        builder.append(", properties=");
-        builder.append(properties);
         builder.append(", equalsProperties=");
         builder.append(equalsProperties);
         builder.append(", hashCodeProperties=");
@@ -130,61 +132,69 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
         return builder.toString();
     }
 
+    @Override
+    public void setTypedef(boolean isTypedef) {
+        this.isTypedef = isTypedef;
+    }
+
     @Override
     public void setIsUnion(boolean isUnion) {
         this.isUnionType = isUnion;
     }
 
+    @Override
+    public void setIsUnionBuilder(boolean isUnionTypeBuilder) {
+        this.isUnionTypeBuilder = isUnionTypeBuilder;
+    }
+
     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
             GeneratedTransferObject {
 
-        private final List<GeneratedProperty> properties;
         private final List<GeneratedProperty> equalsProperties;
         private final List<GeneratedProperty> hashCodeProperties;
         private final List<GeneratedProperty> stringProperties;
         private final GeneratedTransferObject extendsType;
+        private final boolean isTypedef;
         private final boolean isUnionType;
+        private final boolean isUnionTypeBuilder;
+        private final Restrictions restrictions;
+        private final GeneratedProperty SUID;
 
-        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;
+        public GeneratedTransferObjectImpl(GeneratedTOBuilderImpl builder) {
+            super(builder);
+            this.extendsType = builder.extendsType;
+            this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);
+            this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);
+            this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);
+            this.isTypedef = builder.isTypedef;
+            this.isUnionType = builder.isUnionType;
+            this.isUnionTypeBuilder = builder.isUnionTypeBuilder;
+            this.restrictions = builder.restrictions;
+            if (builder.SUID == null) {
+                this.SUID = null;
+            } else {
+                this.SUID = builder.SUID.toInstance(GeneratedTransferObjectImpl.this);
+            }
         }
 
         @Override
-        public boolean isUnionType() {
-            return isUnionType;
+        public boolean isTypedef() {
+            return isTypedef;
         }
 
-        private List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> propBuilders) {
-            final List<GeneratedProperty> properties = new ArrayList<>();
-            for (final GeneratedPropertyBuilder builder : propBuilders) {
-                properties.add(builder.toInstance(this));
-            }
-            return Collections.unmodifiableList(properties);
+        @Override
+        public boolean isUnionType() {
+            return isUnionType;
         }
 
         @Override
-        public GeneratedTransferObject getExtends() {
-            return extendsType;
+        public boolean isUnionTypeBuilder() {
+            return isUnionTypeBuilder;
         }
 
         @Override
-        public List<GeneratedProperty> getProperties() {
-            return properties;
+        public GeneratedTransferObject getSuperType() {
+            return extendsType;
         }
 
         @Override
@@ -202,8 +212,21 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
             return stringProperties;
         }
 
+        @Override
+        public Restrictions getRestrictions() {
+            return restrictions;
+        }
+
+        @Override
+        public GeneratedProperty getSUID() {
+            return SUID;
+        }
+
         @Override
         public String toString() {
+            if(isTypedef) {
+                return serializeTypedef(this);
+            }
             StringBuilder builder = new StringBuilder();
             builder.append("GeneratedTransferObject [packageName=");
             builder.append(getPackageName());
@@ -214,7 +237,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
             builder.append(getAnnotations());
             builder.append(getComment());
             builder.append(", extends=");
-            builder.append(getExtends());
+            builder.append(getSuperType());
             builder.append(", implements=");
             builder.append(getImplements());
             builder.append(", enclosedTypes=");
@@ -224,7 +247,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
             builder.append(", enumerations=");
             builder.append(getEnumerations());
             builder.append(", properties=");
-            builder.append(properties);
+            builder.append(getProperties());
             builder.append(", equalsProperties=");
             builder.append(equalsProperties);
             builder.append(", hashCodeProperties=");
@@ -236,5 +259,28 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder i
             builder.append("]");
             return builder.toString();
         }
+
+        public String serializeTypedef(Type type) {
+            if (type instanceof ParameterizedType) {
+                ParameterizedType parameterizedType = (ParameterizedType) type;
+                StringBuffer sb = new StringBuffer();
+                sb.append(parameterizedType.getRawType().getFullyQualifiedName());
+                sb.append("<");
+                boolean first = true;
+                for (Type parameter : parameterizedType.getActualTypeArguments()) {
+                    if (first) {
+                        first = false;
+                    } else {
+                        sb.append(",");
+                    }
+                    sb.append(serializeTypedef(parameter));
+                }
+                sb.append(">");
+                return sb.toString();
+            } else {
+                return type.getFullyQualifiedName();
+            }
+        }
+
     }
 }