From d08a0a99c4d3cfc886502b18e6e884e9d4482419 Mon Sep 17 00:00:00 2001 From: Aled Sage Date: Mon, 12 Mar 2012 23:47:36 +0000 Subject: [PATCH] Domain objects implement List/Set where appropriate --- .../director/v1_5/domain/FilesList.java | 9 +- .../v1_5/domain/ProductSectionList.java | 145 ++++++++++++++++-- .../director/v1_5/domain/TasksList.java | 13 +- .../vcloud/director/v1_5/domain/Checks.java | 4 +- 4 files changed, 155 insertions(+), 16 deletions(-) diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/FilesList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/FilesList.java index 6a46d59f97..b7ef5c60d1 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/FilesList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/FilesList.java @@ -29,7 +29,9 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import com.google.common.base.Objects; +import com.google.common.collect.ForwardingList; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; @@ -58,7 +60,8 @@ import com.google.common.collect.Lists; @XmlType(name = "FilesList", propOrder = { "files" }) -public class FilesList { +public class FilesList extends ForwardingList { + public static Builder builder() { return new Builder(); } @@ -137,4 +140,8 @@ public class FilesList { .add("file", files).toString(); } + @Override + protected List delegate() { + return getFiles(); + } } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java index dcef78d19f..77b324c355 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ProductSectionList.java @@ -23,7 +23,11 @@ import static com.google.common.base.Objects.equal; import static com.google.common.base.Preconditions.checkNotNull; import java.net.URI; +import java.util.Collection; import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; import java.util.Set; import javax.xml.bind.annotation.XmlElement; @@ -32,7 +36,9 @@ import javax.xml.bind.annotation.XmlType; import org.jclouds.vcloud.director.v1_5.domain.ovf.ProductSection; import com.google.common.base.Objects; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -59,10 +65,8 @@ import com.google.common.collect.Sets; @XmlType(name = "ProductSectionList", propOrder = { "productSections" }) -public class ProductSectionList - extends ResourceType - -{ +public class ProductSectionList extends ResourceType implements List { + @SuppressWarnings("unchecked") public static Builder builder() { return new Builder(); @@ -135,7 +139,7 @@ public class ProductSectionList public Builder fromProductSectionList(ProductSectionList in) { return fromResourceType(in) - .productSections(in.getProductSections()); + .productSections(ImmutableSet.copyOf(in)); } } @@ -144,18 +148,18 @@ public class ProductSectionList } private ProductSectionList(Set productSections) { - this.productSections = ImmutableSet.copyOf(productSections); + this.productSections = ImmutableList.copyOf(productSections); } @XmlElement(name = "ProductSection", namespace = "http://schemas.dmtf.org/ovf/envelope/1") - protected Set productSections = Sets.newLinkedHashSet(); + protected List productSections = Lists.newArrayList(); /** * Gets the value of the productSection property. */ - public Set getProductSections() { - return Collections.unmodifiableSet(this.productSections); + public List getProductSections() { + return Collections.unmodifiableList(this.productSections); } @Override @@ -179,4 +183,127 @@ public class ProductSectionList .add("productSections", productSections).toString(); } + + /* + * Methods below are for implementing List; annoying lack of multiple inheritance for using ForwardingList! + */ + + private List delegate() { + return getProductSections(); + } + + @Override + public boolean add(ProductSection arg0) { + return delegate().add(arg0); + } + + @Override + public void add(int arg0, ProductSection arg1) { + delegate().add(arg0, arg1); + } + + @Override + public boolean addAll(Collection arg0) { + return delegate().addAll(arg0); + } + + @Override + public boolean addAll(int arg0, Collection arg1) { + return delegate().addAll(arg0, arg1); + } + + @Override + public void clear() { + delegate().clear(); + } + + @Override + public boolean contains(Object arg0) { + return delegate().contains(arg0); + } + + @Override + public boolean containsAll(Collection arg0) { + return delegate().containsAll(arg0); + } + + @Override + public ProductSection get(int arg0) { + return delegate().get(arg0); + } + + @Override + public int indexOf(Object arg0) { + return delegate().indexOf(arg0); + } + + @Override + public boolean isEmpty() { + return delegate().isEmpty(); + } + + @Override + public Iterator iterator() { + return delegate().iterator(); + } + + @Override + public int lastIndexOf(Object arg0) { + return delegate().lastIndexOf(arg0); + } + + @Override + public ListIterator listIterator() { + return delegate().listIterator(); + } + + @Override + public ListIterator listIterator(int arg0) { + return delegate().listIterator(arg0); + } + + @Override + public boolean remove(Object arg0) { + return delegate().remove(arg0); + } + + @Override + public ProductSection remove(int arg0) { + return delegate().remove(arg0); + } + + @Override + public boolean removeAll(Collection arg0) { + return delegate().removeAll(arg0); + } + + @Override + public boolean retainAll(Collection arg0) { + return delegate().retainAll(arg0); + } + + @Override + public ProductSection set(int arg0, ProductSection arg1) { + return delegate().set(arg0, arg1); + } + + @Override + public int size() { + return delegate().size(); + } + + @Override + public List subList(int arg0, int arg1) { + return delegate().subList(arg0, arg1); + } + + @Override + public Object[] toArray() { + return delegate().toArray(); + } + + @Override + public T[] toArray(T[] arg0) { + return delegate().toArray(arg0); + } } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java index 2435b3a818..7d03412c7b 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java @@ -173,10 +173,6 @@ public class TasksList extends ResourceType implements Set { return Objects.hashCode(super.hashCode(), delegate(), name); } - private Set delegate() { - return tasks == null ? ImmutableSet.of() : Collections.unmodifiableSet(tasks); - } - @Override public ToStringHelper string() { return super.string().add("name", name).add("tasks", delegate()); @@ -187,6 +183,15 @@ public class TasksList extends ResourceType implements Set { return new Builder().fromTasksList(this); } + + /* + * Methods below are for implementing Set; annoying lack of multiple inheritance for using ForwardingSet! + */ + + private Set delegate() { + return tasks == null ? ImmutableSet.of() : Collections.unmodifiableSet(tasks); + } + @Override public Iterator iterator() { return delegate().iterator(); diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java index 8dbf97017e..adade06a61 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java @@ -576,7 +576,7 @@ public class Checks { } } if (template.getFiles() != null) { - for (File file : template.getFiles().getFiles()) { // TODO FileList should implement List + for (File file : template.getFiles()) { checkFile(file); } } @@ -953,7 +953,7 @@ public class Checks { public static void checkProductSectionList(ProductSectionList val) { assertNotNull(val, String.format(NOT_NULL_OBJECT_FMT, "ProductSectionList", "")); - for (ProductSection productSection : val.getProductSections()) { // TODO Should implement List + for (ProductSection productSection : val) { checkOvfProductSection(productSection); }