Bug 2172 - AbstractGeneratedTypeBuilder check for duplicate elements. 48/12148/1
authorpkajsa <pkajsa@cisco.com>
Fri, 17 Oct 2014 09:00:56 +0000 (11:00 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Wed, 22 Oct 2014 12:12:50 +0000 (12:12 +0000)
Check for duplicity of added elements has been added into add* methods
in the AbstractGeneratedTypeBuilder class.

Change-Id: I9ef4caef0a835c0e171e86c2b322c3452bdaada0
Signed-off-by: pkajsa <pkajsa@cisco.com>
(cherry picked from commit b1e2b02d59a05fdca07cb469712d9872a1d84bb1)

code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilder.java
code-generator/binding-generator-util/src/test/java/org/opendaylight/yangtools/binding/generator/util/generated/type/builder/AbstractGeneratedTypeBuilderTest.java

index d98a9600cd5c6a3f5c1984089919f827590f6490..3c82dea8709487efa47e5cf02dbd1f5beb8d3e55 100644 (file)
@@ -88,6 +88,7 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
         Preconditions.checkArgument(name != null, "Name for Enclosing Generated Transfer Object cannot be null!");
         GeneratedTOBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);
 
+        Preconditions.checkArgument(!enclosedTransferObjects.contains(builder), "This generated type already contains equal enclosing transfer object.");
         enclosedTransferObjects = LazyCollections.lazyAdd(enclosedTransferObjects, builder);
         return builder;
     }
@@ -95,6 +96,7 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     @Override
     public T addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder) {
         Preconditions.checkArgument(genTOBuilder != null, "Parameter genTOBuilder cannot be null!");
+        Preconditions.checkArgument(!enclosedTransferObjects.contains(genTOBuilder), "This generated type already contains equal enclosing transfer object.");
         enclosedTransferObjects = LazyCollections.lazyAdd(enclosedTransferObjects, genTOBuilder);
         return thisInstance();
     }
@@ -111,6 +113,8 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
         Preconditions.checkArgument(name != null, "Name of Annotation Type cannot be null!");
 
         final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
+
+        Preconditions.checkArgument(!annotationBuilders.contains(builder), "This generated type already contains equal annotation.");
         annotationBuilders = LazyCollections.lazyAdd(annotationBuilders, builder);
         return builder;
     }
@@ -124,6 +128,7 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     @Override
     public T addImplementsType(final Type genType) {
         Preconditions.checkArgument(genType != null, "Type cannot be null");
+        Preconditions.checkArgument(!implementsTypes.contains(genType), "This generated type already contains equal implements type.");
         implementsTypes = LazyCollections.lazyAdd(implementsTypes, genType);
         return thisInstance();
     }
@@ -132,16 +137,29 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     public Constant addConstant(final Type type, final String name, final Object value) {
         Preconditions.checkArgument(type != null, "Returning Type for Constant cannot be null!");
         Preconditions.checkArgument(name != null, "Name of constant cannot be null!");
+        Preconditions.checkArgument(!containsConstant(name), "This generated type already contains constant with the same name.");
 
         final Constant constant = new ConstantImpl(this, type, name, value);
         constants = LazyCollections.lazyAdd(constants, constant);
         return constant;
     }
 
+    public boolean containsConstant(final String name) {
+        Preconditions.checkArgument(name != null, "Parameter name can't be null");
+        for (Constant constant : constants) {
+            if (name.equals(constant.getName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     @Override
     public EnumBuilder addEnumeration(final String name) {
         Preconditions.checkArgument(name != null, "Name of enumeration cannot be null!");
         final EnumBuilder builder = new EnumerationBuilderImpl(getFullyQualifiedName(), name);
+
+        Preconditions.checkArgument(!enumDefinitions.contains(builder), "This generated type already contains equal enumeration.");
         enumDefinitions = LazyCollections.lazyAdd(enumDefinitions, builder);
         return builder;
     }
@@ -170,6 +188,8 @@ abstract class AbstractGeneratedTypeBuilder<T extends GeneratedTypeBuilderBase<T
     @Override
     public GeneratedPropertyBuilder addProperty(final String name) {
         Preconditions.checkArgument(name != null, "Parameter name can't be null");
+        Preconditions.checkArgument(!containsProperty(name), "This generated type already contains property with the same name.");
+
         final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);
         builder.setAccessModifier(AccessModifier.PUBLIC);
         properties = LazyCollections.lazyAdd(properties, builder);
index 8cf6967539fd29d785204c69e9321cfa56c2244b..0841f80aab6ba8b4d5fb2dc90b5508ce24bb0521 100644 (file)
@@ -3,7 +3,10 @@
  */
 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
 
+import java.io.Serializable;
+
 import org.junit.Test;
+import org.opendaylight.yangtools.binding.generator.util.Types;
 
 public class AbstractGeneratedTypeBuilderTest {
 
@@ -14,4 +17,60 @@ public class AbstractGeneratedTypeBuilderTest {
         generatedTypeBuilder.addProperty(null);
     }
 
+    @Test(expected = IllegalArgumentException.class)
+    public void addPropertyIllegalArgumentTest2() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addProperty("myName");
+        generatedTypeBuilder.addProperty("myName");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addEnclosingTransferObjectArgumentTest() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addEnclosingTransferObject(new GeneratedTOBuilderImpl("my.package", "myName"));
+        generatedTypeBuilder.addEnclosingTransferObject(new GeneratedTOBuilderImpl("my.package", "myName"));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addEnclosingTransferObjectArgumentTest2() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addEnclosingTransferObject("myName");
+        generatedTypeBuilder.addEnclosingTransferObject("myName");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addImplementsTypeIllegalArgumentTest() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class));
+        generatedTypeBuilder.addImplementsType(Types.typeForClass(Serializable.class));
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addConstantIllegalArgumentTest() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addConstant(Types.STRING, "myName", "Value");
+        generatedTypeBuilder.addConstant(Types.BOOLEAN, "myName", true);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addAnnotationIllegalArgumentTest() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addAnnotation("my.package", "myName");
+        generatedTypeBuilder.addAnnotation("my.package", "myName");
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void addEnumerationIllegalArgumentTest() {
+        GeneratedTypeBuilderImpl generatedTypeBuilder = new GeneratedTypeBuilderImpl("my.package", "MyName");
+
+        generatedTypeBuilder.addEnumeration("myName");
+        generatedTypeBuilder.addEnumeration("myName");
+    }
+
 }