1 /* 2 * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 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; 27 28 import java.util.List; 29 import java.util.Map; 30 import java.util.Optional; 31 import java.util.OptionalLong; 32 import static java.util.Collections.emptyList; 33 import static java.util.Collections.unmodifiableList; 34 import static java.util.Objects.requireNonNull; 35 36 /** 37 * A read-only view of a set of HTTP headers. 38 * {@Incubating} 39 * 40 * <p> The methods of this class ( that accept a String header name ), and the 41 * Map returned by the {@linkplain #map() map} method, operate without regard to 42 * case when retrieving the header value. 43 * 44 * <p> HttpHeaders instances are immutable. 45 * 46 * @since 9 47 */ 48 public abstract class HttpHeaders { 49 50 /** 51 * Creates an HttpHeaders. 52 */ 53 protected HttpHeaders() {} 54 55 /** 56 * Returns an {@link Optional} containing the first value of the given named 57 * (and possibly multi-valued) header. If the header is not present, then 58 * the returned {@code Optional} is empty. 59 * 60 * @implSpec 61 * The default implementation invokes 62 * {@code allValues(name).stream().findFirst()} 63 * 64 * @param name the header name 65 * @return an {@code Optional<String>} for the first named value 66 */ 122 * of their corresponding {@linkplain #map() maps} are equal. 123 * 124 * <p> This method satisfies the general contract of the {@link 125 * Object#equals(Object) Object.equals} method. 126 * 127 * @param obj the object to which this object is to be compared 128 * @return {@code true} if, and only if, the given object is an {@code 129 * HttpHeaders} that is equal to this HTTP headers 130 */ 131 public final boolean equals(Object obj) { 132 if (!(obj instanceof HttpHeaders)) 133 return false; 134 HttpHeaders that = (HttpHeaders)obj; 135 return this.map().equals(that.map()); 136 } 137 138 /** 139 * Computes a hash code for this HTTP headers instance. 140 * 141 * <p> The hash code is based upon the components of the HTTP headers 142 * {@linkplain #map() map}, and satisfies the general contract of the 143 * {@link Object#hashCode Object.hashCode} method. 144 * 145 * @return the hash-code value for this HTTP headers 146 */ 147 public final int hashCode() { 148 return map().hashCode(); 149 } 150 151 /** 152 * Returns this HTTP headers as a string. 153 * 154 * @return a string describing the HTTP headers 155 */ 156 @Override 157 public String toString() { 158 StringBuilder sb = new StringBuilder(); 159 sb.append(super.toString()).append(" "); 160 sb.append(map()); 161 sb.append(" }"); 162 return sb.toString(); 163 } 164 } | 1 /* 2 * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 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 java.net.http; 27 28 import java.util.List; 29 import java.util.Map; 30 import java.util.Optional; 31 import java.util.OptionalLong; 32 import static java.util.Collections.emptyList; 33 import static java.util.Collections.unmodifiableList; 34 import static java.util.Objects.requireNonNull; 35 36 /** 37 * A read-only view of a set of HTTP headers. 38 * 39 * <p> The methods of this class ( that accept a String header name ), and the 40 * Map returned by the {@link #map() map} method, operate without regard to 41 * case when retrieving the header value. 42 * 43 * <p> HttpHeaders instances are immutable. 44 * 45 * @since 11 46 */ 47 public abstract class HttpHeaders { 48 49 /** 50 * Creates an HttpHeaders. 51 */ 52 protected HttpHeaders() {} 53 54 /** 55 * Returns an {@link Optional} containing the first value of the given named 56 * (and possibly multi-valued) header. If the header is not present, then 57 * the returned {@code Optional} is empty. 58 * 59 * @implSpec 60 * The default implementation invokes 61 * {@code allValues(name).stream().findFirst()} 62 * 63 * @param name the header name 64 * @return an {@code Optional<String>} for the first named value 65 */ 121 * of their corresponding {@linkplain #map() maps} are equal. 122 * 123 * <p> This method satisfies the general contract of the {@link 124 * Object#equals(Object) Object.equals} method. 125 * 126 * @param obj the object to which this object is to be compared 127 * @return {@code true} if, and only if, the given object is an {@code 128 * HttpHeaders} that is equal to this HTTP headers 129 */ 130 public final boolean equals(Object obj) { 131 if (!(obj instanceof HttpHeaders)) 132 return false; 133 HttpHeaders that = (HttpHeaders)obj; 134 return this.map().equals(that.map()); 135 } 136 137 /** 138 * Computes a hash code for this HTTP headers instance. 139 * 140 * <p> The hash code is based upon the components of the HTTP headers 141 * {@link #map() map}, and satisfies the general contract of the 142 * {@link Object#hashCode Object.hashCode} method. 143 * 144 * @return the hash-code value for this HTTP headers 145 */ 146 public final int hashCode() { 147 return map().hashCode(); 148 } 149 150 /** 151 * Returns this HTTP headers as a string. 152 * 153 * @return a string describing the HTTP headers 154 */ 155 @Override 156 public String toString() { 157 StringBuilder sb = new StringBuilder(); 158 sb.append(super.toString()).append(" { "); 159 sb.append(map()); 160 sb.append(" }"); 161 return sb.toString(); 162 } 163 } |