package edu.uw.zookeeper.client;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import java.util.concurrent.Callable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.ListenableFuture;
import edu.uw.zookeeper.client.ClientExecutor;
import edu.uw.zookeeper.common.AbstractPair;
import edu.uw.zookeeper.protocol.Operation;
import edu.uw.zookeeper.protocol.proto.Records;
public final class FixedQuery<O extends Operation.ProtocolResponse<?>> extends AbstractPair<ImmutableList<? extends Records.Request>, ClientExecutor<? super Records.Request,O,?>> implements Callable<List<ListenableFuture<O>>> {
public static <O extends Operation.ProtocolResponse<?>> FixedQuery<O> forRequests(ClientExecutor<? super Records.Request,O,?> client, Records.Request...requests) {
return forIterable(client, ImmutableList.copyOf(requests));
}
public static <O extends Operation.ProtocolResponse<?>> FixedQuery<O> forIterable(ClientExecutor<? super Records.Request,O,?> client, Iterable<? extends Records.Request> requests) {
return new FixedQuery<O>(ImmutableList.copyOf(requests), checkNotNull(client));
}
protected FixedQuery(ImmutableList<? extends Records.Request> requests, ClientExecutor<? super Records.Request,O,?> client) {
super(requests, client);
}
public ImmutableList<? extends Records.Request> requests() {
return first;
}
public ClientExecutor<? super Records.Request,O,?> client() {
return second;
}
@Override
public List<ListenableFuture<O>> call() {
List<ListenableFuture<O>> responses = Lists.newArrayListWithCapacity(requests().size());
for (Records.Request request: requests()) {
responses.add(client().submit(request));
}
return responses;
}
}