Merge "Added tests for yang.model.util"
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / GeneratedTOBuilderImpl.java
index b3b1c7ce256ddff61166bc341dbafdfdc1b966ab..8d1bcea0e80be00fd1ccc4bc9923747474b6f076 100644 (file)
@@ -7,9 +7,9 @@
  */
 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
 
-import java.util.ArrayList;
+import com.google.common.base.Preconditions;
+import java.util.Collections;
 import java.util.List;
-
 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;
@@ -18,19 +18,24 @@ 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;
+import org.opendaylight.yangtools.util.LazyCollections;
+import org.opendaylight.yangtools.yang.common.QName;
 
-public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements
-        GeneratedTOBuilder {
+public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<GeneratedTOBuilder> implements GeneratedTOBuilder {
 
     private GeneratedTransferObject extendsType;
-    private final ArrayList<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();
-    private final ArrayList<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();
-    private final ArrayList<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();
+    private List<GeneratedPropertyBuilder> equalsProperties = Collections.emptyList();
+    private List<GeneratedPropertyBuilder> hashProperties = Collections.emptyList();
+    private List<GeneratedPropertyBuilder> toStringProperties = Collections.emptyList();
     private boolean isTypedef = false;
     private boolean isUnionType = false;
     private boolean isUnionTypeBuilder = false;
     private Restrictions restrictions;
     private GeneratedPropertyBuilder SUID;
+    private String reference;
+    private String description;
+    private String moduleName;
+    private Iterable<QName> schemaPath;
 
     public GeneratedTOBuilderImpl(final String packageName, final String name) {
         super(packageName, name);
@@ -39,9 +44,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
 
     @Override
     public GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj) {
-        if (genTransObj == null) {
-            throw new IllegalArgumentException("Generated Transfer Object cannot be null!");
-        }
+        Preconditions.checkArgument(genTransObj != null, "Generated Transfer Object cannot be null!");
         extendsType = genTransObj;
         return this;
     }
@@ -69,19 +72,19 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
 
     @Override
     public GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property) {
-        equalsProperties.add(property);
+        equalsProperties = LazyCollections.lazyAdd(equalsProperties, property);
         return this;
     }
 
     @Override
     public GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property) {
-        hashProperties.add(property);
+        hashProperties = LazyCollections.lazyAdd(hashProperties, property);
         return this;
     }
 
     @Override
     public GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property) {
-        toStringProperties.add(property);
+        toStringProperties = LazyCollections.lazyAdd(toStringProperties, property);
         return this;
     }
 
@@ -102,7 +105,6 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
 
     @Override
     public GeneratedTransferObject toInstance() {
-        // FIXME: can we compact the arrays now? It needs to be thread-safe, though
         return new GeneratedTransferObjectImpl(this);
     }
 
@@ -148,8 +150,28 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
         this.isUnionTypeBuilder = isUnionTypeBuilder;
     }
 
+    @Override
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    @Override
+    public void setModuleName(String moduleName) {
+        this.moduleName = moduleName;
+    }
+
+    @Override
+    public void setSchemaPath(Iterable<QName> schemaPath) {
+        this.schemaPath = schemaPath;
+    }
+
+    @Override
+    public void setReference(String reference) {
+        this.reference = reference;
+    }
+
     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements
-            GeneratedTransferObject {
+    GeneratedTransferObject {
 
         private final List<GeneratedProperty> equalsProperties;
         private final List<GeneratedProperty> hashCodeProperties;
@@ -160,17 +182,30 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
         private final boolean isUnionTypeBuilder;
         private final Restrictions restrictions;
         private final GeneratedProperty SUID;
+        private final String reference;
+        private final String description;
+        private final String moduleName;
+        private final Iterable<QName> schemaPath;
 
         public GeneratedTransferObjectImpl(final GeneratedTOBuilderImpl builder) {
             super(builder);
             this.extendsType = builder.extendsType;
+
+            // FIXME: if these fields were guaranteed to be constant, we could perhaps
+            //        cache and reuse them between instances...
             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;
+            this.reference = builder.reference;
+            this.description = builder.description;
+            this.moduleName = builder.moduleName;
+            this.schemaPath = builder.schemaPath;
+
             if (builder.SUID == null) {
                 this.SUID = null;
             } else {
@@ -225,7 +260,7 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
 
         @Override
         public String toString() {
-            if(isTypedef) {
+            if (isTypedef) {
                 return serializeTypedef(this);
             }
             StringBuilder builder = new StringBuilder();
@@ -283,5 +318,29 @@ public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder<G
             }
         }
 
+        @Override
+        public String getDescription() {
+            return description;
+        }
+
+        @Override
+        public String getReference() {
+            return reference;
+        }
+
+        @Override
+        public Iterable<QName> getSchemaPath() {
+            return schemaPath;
+        }
+
+        @Override
+        public String getModuleName() {
+            return moduleName;
+        }
+
+        @Override
+        public boolean isSuitableForBoxing() {
+            return false;
+        }
     }
 }