diff --git a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/features/MetricApiExpectTest.java b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/features/MetricApiExpectTest.java index 24ca524415..25cae952fe 100644 --- a/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/features/MetricApiExpectTest.java +++ b/apis/cloudwatch/src/test/java/org/jclouds/cloudwatch/features/MetricApiExpectTest.java @@ -38,8 +38,6 @@ import org.jclouds.http.HttpResponse; import org.jclouds.rest.ResourceNotFoundException; import org.testng.annotations.Test; -import com.google.common.collect.Iterables; - /** * @author Jeremy Whitlock, Adrian Cole */ @@ -118,7 +116,7 @@ public class MetricApiExpectTest extends BaseCloudWatchApiExpectTest { CloudWatchApi apiWhenMetricsExist = requestsSendResponses( listMetrics, listMetricsResponse, listMetrics2, listMetrics2Response); - assertEquals(Iterables.concat(apiWhenMetricsExist.getMetricApiForRegion(null).list()).toString(), + assertEquals(apiWhenMetricsExist.getMetricApiForRegion(null).list().concat().toString(), "[Metric{namespace=AWS/EC2, metricName=CPUUtilization, dimension=[Dimension{name=InstanceId, value=i-689fcf0f}]}, Metric{namespace=AWS/EC2, metricName=CPUUtilization, dimension=[Dimension{name=InstanceId, value=i-689fcf0f}]}]"); } diff --git a/core/src/main/java/org/jclouds/collect/PagedIterable.java b/core/src/main/java/org/jclouds/collect/PagedIterable.java index cdffb6c455..09175469a6 100644 --- a/core/src/main/java/org/jclouds/collect/PagedIterable.java +++ b/core/src/main/java/org/jclouds/collect/PagedIterable.java @@ -18,10 +18,28 @@ */ package org.jclouds.collect; +import java.util.Iterator; + import com.google.common.annotations.Beta; import com.google.common.collect.FluentIterable; +import com.google.common.collect.Iterators; +import com.google.common.collect.UnmodifiableIterator; /** + * Allows you to advance through sequence of pages in a resultset. Typically + * used in apis that return only a certain number of records at a time. + * + * Simplest usage is to employ the {@link #concat} convenience function. + * + *
+ * FluentIterable+ * + * Some may be interested in each page, for example to + * *blobs = blobstore.list(...).concat(); + * for (StorageMetadata blob : blobs) { + * process(blob); + * } + *
* PagedIteratorblobs = blobstore.list(...).iterator(); * while (blobs.hasNext()) { @@ -36,9 +54,42 @@ import com.google.common.collect.FluentIterable; * @author Adrian Cole */ @Beta -public abstract class PagedIterable extends FluentIterable > { +public abstract class PagedIterable extends FluentIterable > { @Override - public abstract PagedIterator iterator(); + public abstract PagedIterator iterator(); + + /** + * Combines all the pages into a single unmodifiable iterable. ex. + * + * + * FluentIterable+ * + * @see Iterators#concat + */ + public FluentIterableblobs = blobstore.list(...).concat(); + * for (StorageMetadata blob : blobs) { + * process(blob); + * } + * concat() { + final PagedIterator iterator = iterator(); + final UnmodifiableIterator > unmodifiable = new UnmodifiableIterator >() { + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Iterator next() { + return iterator.next().iterator(); + } + }; + return new FluentIterable () { + @Override + public Iterator iterator() { + return Iterators.concat(unmodifiable); + } + }; + } } \ No newline at end of file diff --git a/core/src/test/java/org/jclouds/collect/PagedIterablesTest.java b/core/src/test/java/org/jclouds/collect/PagedIterablesTest.java index 73d8ad158b..e8a0cf933f 100644 --- a/core/src/test/java/org/jclouds/collect/PagedIterablesTest.java +++ b/core/src/test/java/org/jclouds/collect/PagedIterablesTest.java @@ -9,7 +9,6 @@ import org.testng.annotations.Test; import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; /** * Tests behavior of {@code IterableWithMarkers}. @@ -51,7 +50,7 @@ public class PagedIterablesTest { PagedIterable iterable = PagedIterables.create(PagedIterators.advancing(initial, markerToNext)); - Assert.assertEquals(ImmutableSet.copyOf(Iterables.concat(iterable)), + Assert.assertEquals(iterable.concat().toImmutableSet(), ImmutableSet.of("foo", "bar", "boo", "baz", "ham", "cheeze")); EasyMock.verify(markerToNext); diff --git a/labs/elb/src/main/java/org/jclouds/elb/loadbalancer/strategy/ELBListLoadBalancersStrategy.java b/labs/elb/src/main/java/org/jclouds/elb/loadbalancer/strategy/ELBListLoadBalancersStrategy.java index ec11c1a7eb..87ef4b6efa 100644 --- a/labs/elb/src/main/java/org/jclouds/elb/loadbalancer/strategy/ELBListLoadBalancersStrategy.java +++ b/labs/elb/src/main/java/org/jclouds/elb/loadbalancer/strategy/ELBListLoadBalancersStrategy.java @@ -46,7 +46,6 @@ import org.jclouds.logging.Logger; import com.google.common.base.Function; import com.google.common.base.Supplier; -import com.google.common.collect.Iterables; import com.google.common.util.concurrent.ListenableFuture; /** @@ -88,14 +87,13 @@ public class ELBListLoadBalancersStrategy implements ListLoadBalancersStrategy { @Override public Iterable apply(PagedIterable input) { - return Iterables.transform(Iterables.concat(input), - new Function () { - - @Override - public LoadBalancerInRegion apply(LoadBalancer lb) { - return new LoadBalancerInRegion(lb, from); - } - }); + return input.concat() + .transform(new Function () { + @Override + public LoadBalancerInRegion apply(LoadBalancer lb) { + return new LoadBalancerInRegion(lb, from); + } + }); } }, executor); diff --git a/labs/elb/src/test/java/org/jclouds/elb/features/LoadBalancerApiExpectTest.java b/labs/elb/src/test/java/org/jclouds/elb/features/LoadBalancerApiExpectTest.java index 3d4a98cf2a..ab4ddb4778 100644 --- a/labs/elb/src/test/java/org/jclouds/elb/features/LoadBalancerApiExpectTest.java +++ b/labs/elb/src/test/java/org/jclouds/elb/features/LoadBalancerApiExpectTest.java @@ -145,7 +145,7 @@ public class LoadBalancerApiExpectTest extends BaseELBApiExpectTest { LoadBalancer lb1 = new GetLoadBalancerResponseTest().expected().toBuilder().name("my-load-balancer-1").build(); LoadBalancer lb2 = new GetLoadBalancerResponseTest().expected(); - assertEquals(ImmutableSet.copyOf(Iterables.concat(apiWhenExist.getLoadBalancerApi().list())), ImmutableSet.of(lb1, lb2)); + assertEquals(apiWhenExist.getLoadBalancerApi().list().concat().toImmutableSet(), ImmutableSet.of(lb1, lb2)); } public void testList2PagesWhenResponseIs2xxInEU() throws Exception { diff --git a/labs/elb/src/test/java/org/jclouds/elb/loadbalancer/ELBLoadBalancerServiceLiveTest.java b/labs/elb/src/test/java/org/jclouds/elb/loadbalancer/ELBLoadBalancerServiceLiveTest.java index e47cc479cb..b4172e83f8 100644 --- a/labs/elb/src/test/java/org/jclouds/elb/loadbalancer/ELBLoadBalancerServiceLiveTest.java +++ b/labs/elb/src/test/java/org/jclouds/elb/loadbalancer/ELBLoadBalancerServiceLiveTest.java @@ -20,7 +20,6 @@ package org.jclouds.elb.loadbalancer; import static org.testng.Assert.assertEquals; -import org.jclouds.collect.PagedIterable; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.elb.ELBApi; import org.jclouds.elb.ELBAsyncApi; @@ -30,9 +29,9 @@ import org.jclouds.rest.RestContext; import org.jclouds.sshj.config.SshjSshClientModule; import org.testng.annotations.Test; +import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; -import com.google.common.collect.Iterables; /** * @@ -61,8 +60,8 @@ public class ELBLoadBalancerServiceLiveTest extends BaseLoadBalancerServiceLiveT instanceIds.add(node.getProviderId()); } - PagedIterable elbs = elbApi.getLoadBalancerApi().list(); - for (LoadBalancer elb : Iterables.concat(elbs)) { + FluentIterable elbs = elbApi.getLoadBalancerApi().list().concat(); + for (LoadBalancer elb : elbs) { if (elb.getName().equals(group)) assertEquals(elb.getInstanceIds(), instanceIds.build()); } diff --git a/labs/iam/src/test/java/org/jclouds/iam/features/UserApiExpectTest.java b/labs/iam/src/test/java/org/jclouds/iam/features/UserApiExpectTest.java index ed554fd836..15000246aa 100644 --- a/labs/iam/src/test/java/org/jclouds/iam/features/UserApiExpectTest.java +++ b/labs/iam/src/test/java/org/jclouds/iam/features/UserApiExpectTest.java @@ -149,7 +149,7 @@ public class UserApiExpectTest extends BaseIAMApiExpectTest { IAMApi apiWhenExist = requestsSendResponses(list, listResponse, list2, list2Response); - assertEquals(ImmutableList.copyOf(Iterables.concat(apiWhenExist.getUserApi().list())), + assertEquals(apiWhenExist.getUserApi().list().concat().toImmutableList(), ImmutableList.copyOf(Iterables.concat(new ListUsersResponseTest().expected(), new ListUsersResponseTest().expected()))); } diff --git a/labs/rds/src/test/java/org/jclouds/rds/features/InstanceApiExpectTest.java b/labs/rds/src/test/java/org/jclouds/rds/features/InstanceApiExpectTest.java index 7a42aab7eb..18ef406a7f 100644 --- a/labs/rds/src/test/java/org/jclouds/rds/features/InstanceApiExpectTest.java +++ b/labs/rds/src/test/java/org/jclouds/rds/features/InstanceApiExpectTest.java @@ -140,7 +140,7 @@ public class InstanceApiExpectTest extends BaseRDSApiExpectTest { RDSApi apiWhenExist = requestsSendResponses( list, listResponse, list2, list2Response); - assertEquals(ImmutableList.copyOf(Iterables.concat(apiWhenExist.getInstanceApi().list())), + assertEquals(apiWhenExist.getInstanceApi().list().concat().toImmutableList(), ImmutableList.copyOf(Iterables.concat(new DescribeDBInstancesResponseTest().expected(), new DescribeDBInstancesResponseTest().expected()))); } diff --git a/labs/rds/src/test/java/org/jclouds/rds/features/SecurityGroupApiExpectTest.java b/labs/rds/src/test/java/org/jclouds/rds/features/SecurityGroupApiExpectTest.java index 5ae1882781..8a04e2b528 100644 --- a/labs/rds/src/test/java/org/jclouds/rds/features/SecurityGroupApiExpectTest.java +++ b/labs/rds/src/test/java/org/jclouds/rds/features/SecurityGroupApiExpectTest.java @@ -140,7 +140,7 @@ public class SecurityGroupApiExpectTest extends BaseRDSApiExpectTest { RDSApi apiWhenExist = requestsSendResponses( list, listResponse, list2, list2Response); - assertEquals(ImmutableList.copyOf(Iterables.concat(apiWhenExist.getSecurityGroupApi().list())), + assertEquals(apiWhenExist.getSecurityGroupApi().list().concat().toImmutableList(), ImmutableList.copyOf(Iterables.concat(new DescribeDBSecurityGroupsResponseTest().expected(), new DescribeDBSecurityGroupsResponseTest().expected()))); } diff --git a/labs/rds/src/test/java/org/jclouds/rds/features/SubnetGroupApiExpectTest.java b/labs/rds/src/test/java/org/jclouds/rds/features/SubnetGroupApiExpectTest.java index 18104519ba..64ab2b740b 100644 --- a/labs/rds/src/test/java/org/jclouds/rds/features/SubnetGroupApiExpectTest.java +++ b/labs/rds/src/test/java/org/jclouds/rds/features/SubnetGroupApiExpectTest.java @@ -141,7 +141,7 @@ public class SubnetGroupApiExpectTest extends BaseRDSApiExpectTest { RDSApi apiWhenExist = requestsSendResponses( list, listResponse, list2, list2Response); - assertEquals(ImmutableList.copyOf(Iterables.concat(apiWhenExist.getSubnetGroupApi().list())), + assertEquals(apiWhenExist.getSubnetGroupApi().list().concat().toImmutableList(), ImmutableList.copyOf(Iterables.concat(new DescribeDBSubnetGroupsResponseTest().expected(), new DescribeDBSubnetGroupsResponseTest().expected()))); }