
io.muserver.Http2Headers Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mu-server Show documentation
Show all versions of mu-server Show documentation
A simple but powerful web server framework
The newest version!
package io.muserver;
import io.netty.handler.codec.http2.DefaultHttp2Headers;
import jakarta.ws.rs.core.MediaType;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static io.muserver.NettyRequestParameters.isTruthy;
import static io.netty.util.internal.ObjectUtil.checkNotNull;
class Http2Headers implements Headers {
final io.netty.handler.codec.http2.Http2Headers entries;
private final boolean hasRequestBody;
Http2Headers() {
this(new DefaultHttp2Headers(), false);
}
Http2Headers(io.netty.handler.codec.http2.Http2Headers entries, boolean hasRequestBody) {
this.entries = entries;
this.hasRequestBody = hasRequestBody;
}
private static CharSequence toLower(CharSequence name) {
Mutils.notNull("name", name);
if (name instanceof String) {
return ((String) name).toLowerCase();
}
return name;
}
@Override
public String get(String name) {
return get((CharSequence) name);
}
@Override
public String get(CharSequence name) {
CharSequence val = entries.get(toLower(name));
return val == null ? null : val.toString();
}
@Override
public String get(CharSequence name, String defaultValue) {
CharSequence val = entries.get(toLower(name), defaultValue);
return val == null ? null : val.toString();
}
@Override
public int getInt(CharSequence name, int defaultValue) {
return entries.getInt(toLower(name), defaultValue);
}
@Override
public long getLong(String name, long defaultValue) {
try {
String stringVal = get(name, null);
if (stringVal == null) {
return defaultValue;
}
return Long.parseLong(stringVal, 10);
} catch (NumberFormatException e) {
return defaultValue;
}
}
@Override
public float getFloat(String name, float defaultValue) {
try {
String stringVal = get(name, null);
if (stringVal == null) {
return defaultValue;
}
return Float.parseFloat(stringVal);
} catch (NumberFormatException e) {
return defaultValue;
}
}
@Override
public double getDouble(String name, double defaultValue) {
try {
String stringVal = get(name, null);
if (stringVal == null) {
return defaultValue;
}
return Double.parseDouble(stringVal);
} catch (NumberFormatException e) {
return defaultValue;
}
}
@Override
public boolean getBoolean(String name) {
String val = get(name, "").toLowerCase();
return isTruthy(val);
}
@Override
public Long getTimeMillis(CharSequence name) {
return entries.getTimeMillis(toLower(name));
}
@Override
public long getTimeMillis(CharSequence name, long defaultValue) {
return entries.getTimeMillis(toLower(name), defaultValue);
}
@Override
public List getAll(String name) {
return getAll((CharSequence) name);
}
@Override
public List getAll(CharSequence name) {
return entries.getAll(toLower(name)).stream().map(CharSequence::toString).collect(Collectors.toList());
}
@Override
public List> entries() {
List> all = new ArrayList<>(size());
for (Map.Entry e : this) {
all.add(e);
}
return all;
}
@Override
public boolean contains(String name) {
return contains((CharSequence) name);
}
@Override
public boolean contains(CharSequence name) {
return entries.contains(toLower(name));
}
@Override
public Iterator> iterator() {
Iterator> it = entries.iterator();
return Stream.generate(it::next).limit(entries.size())
.filter(e -> e.getKey().charAt(0) != ':')
.map(e -> (Map.Entry) new AbstractMap.SimpleImmutableEntry<>(e.getKey().toString(), e.getValue().toString()))
.iterator();
}
@Override
public boolean isEmpty() {
return entries.isEmpty();
}
@Override
public int size() {
return entries.size();
}
@Override
public Set names() {
return entries.names().stream()
.filter(name -> name.charAt(0) != ':')
.map(CharSequence::toString).collect(Collectors.toSet());
}
@Override
public Headers add(String name, Object value) {
return add((CharSequence) name, value);
}
@Override
public Headers add(CharSequence name, Object value) {
entries.addObject(toLower(name), value);
return this;
}
@Override
public Headers add(String name, Iterable> values) {
return add((CharSequence) name, values);
}
@Override
public Headers add(CharSequence name, Iterable> values) {
name = toLower(name);
for (Object value : values) {
entries.addObject(name, value);
}
return this;
}
@Override
public Headers add(Headers headers) {
for (Map.Entry e : headers) {
add(e.getKey(), e.getValue());
}
return this;
}
@Override
public Headers addInt(CharSequence name, int value) {
entries.addInt(toLower(name), value);
return this;
}
@Override
public Headers set(String name, Object value) {
return set((CharSequence) name, value);
}
@Override
public Headers set(CharSequence name, Object value) {
entries.setObject(toLower(name), value);
return this;
}
@Override
public Headers set(String name, Iterable> values) {
return set((CharSequence) name, values);
}
@Override
public Headers set(CharSequence name, Iterable> values) {
name = toLower(name);
entries.remove(name);
return add(name, values);
}
@Override
public Headers set(Headers headers) {
checkNotNull(headers, "headers");
clear();
for (Map.Entry entry : headers) {
add(entry.getKey(), entry.getValue());
}
return this;
}
@Override
public Headers setAll(Headers headers) {
checkNotNull(headers, "headers");
for (String name : headers.names()) {
set(name, headers.getAll(name));
}
return this;
}
@Override
public Headers setInt(CharSequence name, int value) {
entries.setInt(toLower(name), value);
return this;
}
@Override
public Headers remove(String name) {
return remove((CharSequence) name);
}
@Override
public Headers remove(CharSequence name) {
entries.remove(toLower(name));
return this;
}
@Override
public Headers clear() {
entries.clear();
return this;
}
@Override
public boolean contains(String name, String value, boolean ignoreCase) {
return contains((CharSequence) name, value, ignoreCase);
}
@Override
public boolean contains(CharSequence name, CharSequence value, boolean ignoreCase) {
return entries.contains(toLower(name), value, ignoreCase);
}
@Override
public boolean containsValue(CharSequence name, CharSequence value, boolean ignoreCase) {
return entries.contains(toLower(name), value, ignoreCase);
}
@Override
public boolean equals(Object o) {
return entries.equals(o);
}
@Override
public int hashCode() {
return entries.hashCode();
}
@Override
public String toString() {
return Headtils.toString(this, null);
}
@Override
public String toString(Collection toSuppress) {
return Headtils.toString(this, toSuppress);
}
@Override
public boolean hasBody() {
return hasRequestBody;
}
@Override
public List accept() {
return Headtils.getParameterizedHeaderWithValues(this, HeaderNames.ACCEPT);
}
@Override
public List acceptCharset() {
return Headtils.getParameterizedHeaderWithValues(this, HeaderNames.ACCEPT_CHARSET);
}
@Override
public List acceptEncoding() {
return Headtils.getParameterizedHeaderWithValues(this, HeaderNames.ACCEPT_ENCODING);
}
@Override
public List forwarded() {
return Headtils.getForwardedHeaders(this);
}
@Override
public List acceptLanguage() {
return Headtils.getParameterizedHeaderWithValues(this, HeaderNames.ACCEPT_LANGUAGE);
}
@Override
public ParameterizedHeader cacheControl() {
return ParameterizedHeader.fromString(get(HeaderNames.CACHE_CONTROL));
}
@Override
public MediaType contentType() {
return Headtils.getMediaType(this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy