
com.artipie.http.Headers Maven / Gradle / Ivy
/*
* The MIT License (MIT) Copyright (c) 2020-2023 artipie.com
* https://github.com/artipie/artipie/blob/master/LICENSE.txt
*/
package com.artipie.http;
import com.artipie.http.headers.Header;
import com.google.common.collect.Iterables;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Spliterator;
import java.util.function.Consumer;
/**
* HTTP request headers.
*
* @since 0.8
*/
public interface Headers extends Iterable> {
/**
* Empty headers.
*/
Headers EMPTY = new From(Collections.emptyList());
/**
* {@link Headers} created from something.
*
* @since 0.8
*/
final class From implements Headers {
/**
* Origin headers.
*/
private final Iterable> origin;
/**
* Ctor.
*
* @param name Header name.
* @param value Header value.
*/
public From(final String name, final String value) {
this(new Header(name, value));
}
/**
* Ctor.
*
* @param origin Origin headers.
* @param name Additional header name.
* @param value Additional header value.
*/
public From(
final Iterable> origin,
final String name, final String value
) {
this(origin, new Header(name, value));
}
/**
* Ctor.
*
* @param header Header.
*/
public From(final Map.Entry header) {
this(Collections.singleton(header));
}
/**
* Ctor.
*
* @param origin Origin headers.
* @param additional Additional headers.
*/
public From(
final Iterable> origin,
final Map.Entry additional
) {
this(origin, Collections.singleton(additional));
}
/**
* Ctor.
*
* @param origin Origin headers.
*/
@SafeVarargs
public From(final Map.Entry... origin) {
this(Arrays.asList(origin));
}
/**
* Ctor.
*
* @param origin Origin headers.
* @param additional Additional headers.
*/
@SafeVarargs
public From(
final Iterable> origin,
final Map.Entry... additional
) {
this(origin, Arrays.asList(additional));
}
/**
* Ctor.
*
* @param origin Origin headers.
* @param additional Additional headers.
*/
public From(
final Iterable> origin,
final Iterable> additional
) {
this(Iterables.concat(origin, additional));
}
/**
* Ctor.
*
* @param origin Origin headers.
*/
public From(final Iterable> origin) {
this.origin = origin;
}
@Override
public Iterator> iterator() {
return this.origin.iterator();
}
@Override
public void forEach(final Consumer super Map.Entry> action) {
this.origin.forEach(action);
}
@Override
public Spliterator> spliterator() {
return this.origin.spliterator();
}
}
/**
* Abstract decorator for {@link Headers}.
* @since 0.10
*/
abstract class Wrap implements Headers {
/**
* Origin headers.
*/
private final Iterable> origin;
/**
* Ctor.
* @param origin Origin headers
*/
protected Wrap(final Iterable> origin) {
this.origin = origin;
}
/**
* Ctor.
* @param origin Origin headers
*/
protected Wrap(final Header... origin) {
this(Arrays.asList(origin));
}
@Override
public final Iterator> iterator() {
return this.origin.iterator();
}
@Override
public final void forEach(final Consumer super Map.Entry> action) {
this.origin.forEach(action);
}
@Override
public final Spliterator> spliterator() {
return this.origin.spliterator();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy