mirror of
https://github.com/apache/jclouds.git
synced 2025-02-06 10:09:35 +00:00
added concat to PagedIterable
This commit is contained in:
parent
315d5fb3ef
commit
addeb0d031
@ -38,8 +38,6 @@ import org.jclouds.http.HttpResponse;
|
|||||||
import org.jclouds.rest.ResourceNotFoundException;
|
import org.jclouds.rest.ResourceNotFoundException;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Jeremy Whitlock, Adrian Cole
|
* @author Jeremy Whitlock, Adrian Cole
|
||||||
*/
|
*/
|
||||||
@ -118,7 +116,7 @@ public class MetricApiExpectTest extends BaseCloudWatchApiExpectTest {
|
|||||||
CloudWatchApi apiWhenMetricsExist = requestsSendResponses(
|
CloudWatchApi apiWhenMetricsExist = requestsSendResponses(
|
||||||
listMetrics, listMetricsResponse, listMetrics2, listMetrics2Response);
|
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}]}]");
|
"[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}]}]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,10 +18,28 @@
|
|||||||
*/
|
*/
|
||||||
package org.jclouds.collect;
|
package org.jclouds.collect;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
import com.google.common.annotations.Beta;
|
import com.google.common.annotations.Beta;
|
||||||
import com.google.common.collect.FluentIterable;
|
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.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* FluentIterable<StorageMetadata> blobs = blobstore.list(...).concat();
|
||||||
|
* for (StorageMetadata blob : blobs) {
|
||||||
|
* process(blob);
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* Some may be interested in each page, for example to
|
||||||
|
*
|
||||||
* <pre>
|
* <pre>
|
||||||
* PagedIterator<StorageMetadata> blobs = blobstore.list(...).iterator();
|
* PagedIterator<StorageMetadata> blobs = blobstore.list(...).iterator();
|
||||||
* while (blobs.hasNext()) {
|
* while (blobs.hasNext()) {
|
||||||
@ -36,9 +54,42 @@ import com.google.common.collect.FluentIterable;
|
|||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Beta
|
@Beta
|
||||||
public abstract class PagedIterable<T> extends FluentIterable<IterableWithMarker<T>> {
|
public abstract class PagedIterable<E> extends FluentIterable<IterableWithMarker<E>> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public abstract PagedIterator<T> iterator();
|
public abstract PagedIterator<E> iterator();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Combines all the pages into a single unmodifiable iterable. ex.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* FluentIterable<StorageMetadata> blobs = blobstore.list(...).concat();
|
||||||
|
* for (StorageMetadata blob : blobs) {
|
||||||
|
* process(blob);
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @see Iterators#concat
|
||||||
|
*/
|
||||||
|
public FluentIterable<E> concat() {
|
||||||
|
final PagedIterator<E> iterator = iterator();
|
||||||
|
final UnmodifiableIterator<Iterator<E>> unmodifiable = new UnmodifiableIterator<Iterator<E>>() {
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return iterator.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<E> next() {
|
||||||
|
return iterator.next().iterator();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return new FluentIterable<E>() {
|
||||||
|
@Override
|
||||||
|
public Iterator<E> iterator() {
|
||||||
|
return Iterators.concat(unmodifiable);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -9,7 +9,6 @@ import org.testng.annotations.Test;
|
|||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests behavior of {@code IterableWithMarkers}.
|
* Tests behavior of {@code IterableWithMarkers}.
|
||||||
@ -51,7 +50,7 @@ public class PagedIterablesTest {
|
|||||||
|
|
||||||
PagedIterable<String> iterable = PagedIterables.create(PagedIterators.advancing(initial, markerToNext));
|
PagedIterable<String> 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"));
|
ImmutableSet.of("foo", "bar", "boo", "baz", "ham", "cheeze"));
|
||||||
|
|
||||||
EasyMock.verify(markerToNext);
|
EasyMock.verify(markerToNext);
|
||||||
|
@ -46,7 +46,6 @@ import org.jclouds.logging.Logger;
|
|||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Supplier;
|
import com.google.common.base.Supplier;
|
||||||
import com.google.common.collect.Iterables;
|
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,9 +87,8 @@ public class ELBListLoadBalancersStrategy implements ListLoadBalancersStrategy {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iterable<LoadBalancerInRegion> apply(PagedIterable<LoadBalancer> input) {
|
public Iterable<LoadBalancerInRegion> apply(PagedIterable<LoadBalancer> input) {
|
||||||
return Iterables.transform(Iterables.concat(input),
|
return input.concat()
|
||||||
new Function<LoadBalancer, LoadBalancerInRegion>() {
|
.transform(new Function<LoadBalancer, LoadBalancerInRegion>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoadBalancerInRegion apply(LoadBalancer lb) {
|
public LoadBalancerInRegion apply(LoadBalancer lb) {
|
||||||
return new LoadBalancerInRegion(lb, from);
|
return new LoadBalancerInRegion(lb, from);
|
||||||
|
@ -145,7 +145,7 @@ public class LoadBalancerApiExpectTest extends BaseELBApiExpectTest {
|
|||||||
LoadBalancer lb1 = new GetLoadBalancerResponseTest().expected().toBuilder().name("my-load-balancer-1").build();
|
LoadBalancer lb1 = new GetLoadBalancerResponseTest().expected().toBuilder().name("my-load-balancer-1").build();
|
||||||
LoadBalancer lb2 = new GetLoadBalancerResponseTest().expected();
|
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 {
|
public void testList2PagesWhenResponseIs2xxInEU() throws Exception {
|
||||||
|
@ -20,7 +20,6 @@ package org.jclouds.elb.loadbalancer;
|
|||||||
|
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
import org.jclouds.collect.PagedIterable;
|
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
import org.jclouds.elb.ELBApi;
|
import org.jclouds.elb.ELBApi;
|
||||||
import org.jclouds.elb.ELBAsyncApi;
|
import org.jclouds.elb.ELBAsyncApi;
|
||||||
@ -30,9 +29,9 @@ import org.jclouds.rest.RestContext;
|
|||||||
import org.jclouds.sshj.config.SshjSshClientModule;
|
import org.jclouds.sshj.config.SshjSshClientModule;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import com.google.common.collect.FluentIterable;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.ImmutableSet.Builder;
|
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());
|
instanceIds.add(node.getProviderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
PagedIterable<LoadBalancer> elbs = elbApi.getLoadBalancerApi().list();
|
FluentIterable<LoadBalancer> elbs = elbApi.getLoadBalancerApi().list().concat();
|
||||||
for (LoadBalancer elb : Iterables.concat(elbs)) {
|
for (LoadBalancer elb : elbs) {
|
||||||
if (elb.getName().equals(group))
|
if (elb.getName().equals(group))
|
||||||
assertEquals(elb.getInstanceIds(), instanceIds.build());
|
assertEquals(elb.getInstanceIds(), instanceIds.build());
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ public class UserApiExpectTest extends BaseIAMApiExpectTest {
|
|||||||
|
|
||||||
IAMApi apiWhenExist = requestsSendResponses(list, listResponse, list2, list2Response);
|
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())));
|
ImmutableList.copyOf(Iterables.concat(new ListUsersResponseTest().expected(), new ListUsersResponseTest().expected())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ public class InstanceApiExpectTest extends BaseRDSApiExpectTest {
|
|||||||
RDSApi apiWhenExist = requestsSendResponses(
|
RDSApi apiWhenExist = requestsSendResponses(
|
||||||
list, listResponse, list2, list2Response);
|
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(),
|
ImmutableList.copyOf(Iterables.concat(new DescribeDBInstancesResponseTest().expected(),
|
||||||
new DescribeDBInstancesResponseTest().expected())));
|
new DescribeDBInstancesResponseTest().expected())));
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ public class SecurityGroupApiExpectTest extends BaseRDSApiExpectTest {
|
|||||||
RDSApi apiWhenExist = requestsSendResponses(
|
RDSApi apiWhenExist = requestsSendResponses(
|
||||||
list, listResponse, list2, list2Response);
|
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(),
|
ImmutableList.copyOf(Iterables.concat(new DescribeDBSecurityGroupsResponseTest().expected(),
|
||||||
new DescribeDBSecurityGroupsResponseTest().expected())));
|
new DescribeDBSecurityGroupsResponseTest().expected())));
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,7 @@ public class SubnetGroupApiExpectTest extends BaseRDSApiExpectTest {
|
|||||||
RDSApi apiWhenExist = requestsSendResponses(
|
RDSApi apiWhenExist = requestsSendResponses(
|
||||||
list, listResponse, list2, list2Response);
|
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(),
|
ImmutableList.copyOf(Iterables.concat(new DescribeDBSubnetGroupsResponseTest().expected(),
|
||||||
new DescribeDBSubnetGroupsResponseTest().expected())));
|
new DescribeDBSubnetGroupsResponseTest().expected())));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user