package edu.uw.zookeeper.client; import java.net.SocketAddress; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import edu.uw.zookeeper.common.Factory; import edu.uw.zookeeper.common.Pair; import edu.uw.zookeeper.net.ClientConnectionFactory; import edu.uw.zookeeper.net.Connection; public class FixedClientConnectionFactory<C extends Connection<?,?,?>> extends Pair<SocketAddress, ClientConnectionFactory<C>> implements Factory<ListenableFuture<? extends C>> { public static <C extends Connection<?,?,?>> FixedClientConnectionFactory<C> create( SocketAddress address, ClientConnectionFactory<C> connectionFactory) { return new FixedClientConnectionFactory<C>(address, connectionFactory); } protected FixedClientConnectionFactory(SocketAddress address, ClientConnectionFactory<C> connectionFactory) { super(address, connectionFactory); } @Override public ListenableFuture<? extends C> get() { try { return second().connect(first()); } catch (Throwable t) { return Futures.immediateFailedFuture(t); } } }