< prev index next >

src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/internal/websocket/BuilderImpl.java

Print this page




  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.incubator.http.internal.websocket;
  27 
  28 import jdk.incubator.http.HttpClient;
  29 import jdk.incubator.http.WebSocket;
  30 import jdk.incubator.http.WebSocket.Builder;
  31 import jdk.incubator.http.WebSocket.Listener;
  32 import jdk.incubator.http.internal.common.Pair;
  33 

  34 import java.net.URI;
  35 import java.time.Duration;
  36 import java.util.Collection;
  37 import java.util.LinkedList;
  38 import java.util.List;

  39 import java.util.concurrent.CompletableFuture;
  40 
  41 import static java.util.Objects.requireNonNull;
  42 import static jdk.incubator.http.internal.common.Pair.pair;
  43 
  44 public final class BuilderImpl implements Builder {
  45 
  46     private final HttpClient client;
  47     private final URI uri;
  48     private final Listener listener;
  49     private final Collection<Pair<String, String>> headers = new LinkedList<>();
  50     private final Collection<String> subprotocols = new LinkedList<>();

  51     private Duration timeout;
  52 
  53     public BuilderImpl(HttpClient client, URI uri, Listener listener) {
  54         this.client = requireNonNull(client, "client");
  55         this.uri = requireNonNull(uri, "uri");
  56         this.listener = requireNonNull(listener, "listener");




















  57     }
  58 
  59     @Override
  60     public Builder header(String name, String value) {
  61         requireNonNull(name, "name");
  62         requireNonNull(value, "value");
  63         headers.add(pair(name, value));
  64         return this;
  65     }
  66 
  67     @Override
  68     public Builder subprotocols(String mostPreferred,
  69                                 String... lesserPreferred)
  70     {
  71         requireNonNull(mostPreferred, "mostPreferred");
  72         requireNonNull(lesserPreferred, "lesserPreferred");
  73         List<String> subprotocols = new LinkedList<>();
  74         subprotocols.add(mostPreferred);
  75         for (int i = 0; i < lesserPreferred.length; i++) {
  76             String p = lesserPreferred[i];
  77             requireNonNull(p, "lesserPreferred[" + i + "]");
  78             subprotocols.add(p);
  79         }
  80         this.subprotocols.clear();
  81         this.subprotocols.addAll(subprotocols);
  82         return this;
  83     }
  84 
  85     @Override
  86     public Builder connectTimeout(Duration timeout) {
  87         this.timeout = requireNonNull(timeout, "timeout");
  88         return this;
  89     }
  90 
  91     @Override
  92     public CompletableFuture<WebSocket> buildAsync() {
  93         return WebSocketImpl.newInstanceAsync(this);





  94     }
  95 
  96     HttpClient getClient() { return client; }
  97 
  98     URI getUri() { return uri; }
  99 
 100     Listener getListener() { return listener; }
 101 
 102     Collection<Pair<String, String>> getHeaders() { return headers; }
 103 
 104     Collection<String> getSubprotocols() { return subprotocols; }
 105 
 106     Duration getConnectTimeout() { return timeout; }















 107 }


  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.incubator.http.internal.websocket;
  27 
  28 import jdk.incubator.http.HttpClient;
  29 import jdk.incubator.http.WebSocket;
  30 import jdk.incubator.http.WebSocket.Builder;
  31 import jdk.incubator.http.WebSocket.Listener;
  32 import jdk.incubator.http.internal.common.Pair;
  33 
  34 import java.net.ProxySelector;
  35 import java.net.URI;
  36 import java.time.Duration;
  37 import java.util.Collection;
  38 import java.util.LinkedList;
  39 import java.util.List;
  40 import java.util.Optional;
  41 import java.util.concurrent.CompletableFuture;
  42 
  43 import static java.util.Objects.requireNonNull;
  44 import static jdk.incubator.http.internal.common.Pair.pair;
  45 
  46 public final class BuilderImpl implements Builder {
  47 
  48     private final HttpClient client;
  49     private URI uri;
  50     private Listener listener;
  51     private final Optional<ProxySelector> proxySelector;
  52     private final Collection<Pair<String, String>> headers;
  53     private final Collection<String> subprotocols;
  54     private Duration timeout;
  55 
  56     public BuilderImpl(HttpClient client, ProxySelector proxySelector)
  57     {
  58         this(client, null, null, Optional.ofNullable(proxySelector),
  59              new LinkedList<>(), new LinkedList<>(), null);
  60     }
  61 
  62     private BuilderImpl(HttpClient client,
  63                         URI uri,
  64                         Listener listener,
  65                         Optional<ProxySelector> proxySelector,
  66                         Collection<Pair<String, String>> headers,
  67                         Collection<String> subprotocols,
  68                         Duration timeout) {
  69         this.client = client;
  70         this.uri = uri;
  71         this.listener = listener;
  72         this.proxySelector = proxySelector;
  73         // If a proxy selector was supplied by the user, it should be present
  74         // on the client and should be the same that what we got as an argument
  75         assert !client.proxy().isPresent()
  76                 || client.proxy().equals(proxySelector);
  77         this.headers = headers;
  78         this.subprotocols = subprotocols;
  79         this.timeout = timeout;
  80     }
  81 
  82     @Override
  83     public Builder header(String name, String value) {
  84         requireNonNull(name, "name");
  85         requireNonNull(value, "value");
  86         headers.add(pair(name, value));
  87         return this;
  88     }
  89 
  90     @Override
  91     public Builder subprotocols(String mostPreferred, String... lesserPreferred)

  92     {
  93         requireNonNull(mostPreferred, "mostPreferred");
  94         requireNonNull(lesserPreferred, "lesserPreferred");
  95         List<String> subprotocols = new LinkedList<>();
  96         subprotocols.add(mostPreferred);
  97         for (int i = 0; i < lesserPreferred.length; i++) {
  98             String p = lesserPreferred[i];
  99             requireNonNull(p, "lesserPreferred[" + i + "]");
 100             subprotocols.add(p);
 101         }
 102         this.subprotocols.clear();
 103         this.subprotocols.addAll(subprotocols);
 104         return this;
 105     }
 106 
 107     @Override
 108     public Builder connectTimeout(Duration timeout) {
 109         this.timeout = requireNonNull(timeout, "timeout");
 110         return this;
 111     }
 112 
 113     @Override
 114     public CompletableFuture<WebSocket> buildAsync(URI uri, Listener listener) {
 115         this.uri = requireNonNull(uri, "uri");
 116         this.listener = requireNonNull(listener, "listener");
 117         // A snapshot of builder inaccessible for further modification
 118         // from the outside
 119         BuilderImpl copy = immutableCopy();
 120         return WebSocketImpl.newInstanceAsync(copy);
 121     }
 122 
 123     HttpClient getClient() { return client; }
 124 
 125     URI getUri() { return uri; }
 126 
 127     Listener getListener() { return listener; }
 128 
 129     Collection<Pair<String, String>> getHeaders() { return headers; }
 130 
 131     Collection<String> getSubprotocols() { return subprotocols; }
 132 
 133     Duration getConnectTimeout() { return timeout; }
 134 
 135     Optional<ProxySelector> getProxySelector() { return proxySelector; }
 136 
 137     private BuilderImpl immutableCopy() {
 138         @SuppressWarnings({"unchecked", "rawtypes"})
 139         BuilderImpl copy = new BuilderImpl(
 140                 client,
 141                 uri,
 142                 listener,
 143                 proxySelector,
 144                 List.of(this.headers.toArray(new Pair[0])),
 145                 List.of(this.subprotocols.toArray(new String[0])),
 146                 timeout);
 147         return copy;
 148     }
 149 }
< prev index next >