package edu.uw.zookeeper.net; import edu.uw.zookeeper.common.ForwardingPromise; import edu.uw.zookeeper.common.Promise; import edu.uw.zookeeper.common.SettableFuturePromise; import edu.uw.zookeeper.net.Connection; import edu.uw.zookeeper.net.ConnectionFactory; public class GetConnection<C extends Connection<?,?,?>> extends ForwardingPromise<C> implements ConnectionFactory.ConnectionsListener<C> { public static <C extends Connection<?,?,?>> GetConnection<C> create(ConnectionFactory<C> connections) { return new GetConnection<C>(connections, SettableFuturePromise.<C>create()); } protected final Promise<C> promise; protected final ConnectionFactory<C> connections; public GetConnection( ConnectionFactory<C> connections, Promise<C> promise) { this.promise = promise; this.connections = connections; this.connections.subscribe(this); } @Override public void handleConnectionOpen(C connection) { this.connections.unsubscribe(this); set(connection); } @Override protected Promise<C> delegate() { return promise; } }