package edu.uw.zookeeper.client;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.List;
import com.google.common.base.Function;
import edu.uw.zookeeper.client.ClientExecutor;
import edu.uw.zookeeper.common.AbstractPair;
import edu.uw.zookeeper.data.Operations;
import edu.uw.zookeeper.data.ZNodePath;
import edu.uw.zookeeper.protocol.Operation;
import edu.uw.zookeeper.protocol.proto.Records;
public final class PathToQuery<I extends Function<ZNodePath, ? extends List<? extends Records.Request>>, O extends Operation.ProtocolResponse<?>> extends AbstractPair<I, ClientExecutor<? super Records.Request,O,?>> implements Function<ZNodePath, FixedQuery<O>> {
public static <O extends Operation.ProtocolResponse<?>> PathToQuery<PathToRequests, O> forRequests(ClientExecutor<? super Records.Request,O,?> client, Operations.Builder<? extends Records.Request>... builders) {
return forFunction(client, PathToRequests.forRequests(builders));
}
public static <O extends Operation.ProtocolResponse<?>> PathToQuery<PathToRequests, O> forIterable(ClientExecutor<? super Records.Request,O,?> client, Iterable<? extends Operations.Builder<? extends Records.Request>> builders) {
return forFunction(client, PathToRequests.forIterable(builders));
}
public static <I extends Function<ZNodePath, ? extends List<? extends Records.Request>>, O extends Operation.ProtocolResponse<?>> PathToQuery<I, O> forFunction(ClientExecutor<? super Records.Request,O,?> client, I requests) {
return new PathToQuery<I, O>(requests, client);
}
protected PathToQuery(I requests, ClientExecutor<? super Records.Request,O,?> client) {
super(checkNotNull(requests), checkNotNull(client));
}
public I requests() {
return first;
}
public ClientExecutor<? super Records.Request,O,?> client() {
return second;
}
@Override
public FixedQuery<O> apply(final ZNodePath path) {
return FixedQuery.forIterable(client(), requests().apply(path));
}
}