package edu.uw.zookeeper.client; import com.google.common.util.concurrent.ListenableFuture; import edu.uw.zookeeper.client.ClientExecutor; import edu.uw.zookeeper.common.AbstractPair; import edu.uw.zookeeper.common.Generator; import edu.uw.zookeeper.common.Pair; import edu.uw.zookeeper.protocol.Operation; public class SubmitGenerator<I extends Operation.Request, O extends Operation.ProtocolResponse<?>> extends AbstractPair<Generator<? extends I>, ClientExecutor<? super I, O, ?>> implements Generator<Pair<I, ListenableFuture<O>>> { public static <I extends Operation.Request, O extends Operation.ProtocolResponse<?>> SubmitGenerator<I,O> create( Generator<? extends I> operations, ClientExecutor<? super I, O, ?> client) { return new SubmitGenerator<I,O>(operations, client); } protected SubmitGenerator( Generator<? extends I> operations, ClientExecutor<? super I, O, ?> client) { super(operations, client); } public Generator<? extends I> getOperations() { return first; } public ClientExecutor<? super I,O, ?> getClient() { return second; } @Override public Pair<I, ListenableFuture<O>> next() { final I request = getOperations().next(); return Pair.create(request, getClient().submit(request)); } }