package edu.uw.zookeeper.client;
import java.util.Iterator;
import com.google.common.collect.AbstractIterator;
import com.google.common.util.concurrent.ListenableFuture;
import edu.uw.zookeeper.client.ClientExecutor;
import edu.uw.zookeeper.common.Pair;
import edu.uw.zookeeper.protocol.Operation;
public class SubmitIterator<I extends Operation.Request, O extends Operation.ProtocolResponse<?>> extends AbstractIterator<Pair<I, ListenableFuture<O>>> {
public static <I extends Operation.Request, O extends Operation.ProtocolResponse<?>> SubmitIterator<I,O> create(
Iterator<I> requests,
ClientExecutor<? super I, O, ?> client) {
return new SubmitIterator<I,O>(requests, client);
}
protected final Iterator<I> requests;
protected final ClientExecutor<? super I, O, ?> client;
public SubmitIterator(
Iterator<I> requests,
ClientExecutor<? super I, O, ?> client) {
this.requests = requests;
this.client = client;
}
@Override
protected Pair<I, ListenableFuture<O>> computeNext() {
if (requests.hasNext()) {
I request = requests.next();
return Pair.create(request, client.submit(request));
} else {
return endOfData();
}
}
}