package edu.uw.zookeeper.client; import java.util.List; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import edu.uw.zookeeper.common.TaskExecutor; import edu.uw.zookeeper.common.ValueFuture; import edu.uw.zookeeper.protocol.Operation; public final class SubmittedRequests<I extends Operation.Request, O extends Operation.ProtocolResponse<?>> extends ValueFuture<ImmutableList<I>,List<O>,ListenableFuture<List<O>>> { public static <I extends Operation.Request, O extends Operation.ProtocolResponse<?>> SubmittedRequests<I,O> submitRequests(TaskExecutor<? super I,? extends O> client, I... requests) { return submit(client, ImmutableList.copyOf(requests)); } public static <I extends Operation.Request, O extends Operation.ProtocolResponse<?>> SubmittedRequests<I,O> submit(TaskExecutor<? super I,? extends O> client, Iterable<? extends I> requests) { final ImmutableList.Builder<ListenableFuture<? extends O>> futures = ImmutableList.builder(); for (I request: requests) { futures.add(client.submit(request)); } return new SubmittedRequests<I,O>( ImmutableList.copyOf(requests), Futures.allAsList(futures.build())); } protected SubmittedRequests(ImmutableList<I> value, ListenableFuture<List<O>> future) { super(value, future); } }