package com.apollographql.apollo.cache;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.annotation.Nullable;
/**
* A key/value collection which is sent with {@link com.apollographql.apollo.cache.normalized.Record}
* from a {@link com.apollographql.apollo.api.Operation} to the
* {@link com.apollographql.apollo.cache.normalized.NormalizedCache}.
*
* For headers which the default {@link com.apollographql.apollo.cache.normalized.NormalizedCache} respect, see
* {@link ApolloCacheHeaders}.
*/
public final class CacheHeaders {
private final Map<String, String> headerMap;
public static CacheHeaders.Builder builder() {
return new Builder();
}
public static final CacheHeaders NONE = new CacheHeaders(Collections.<String, String>emptyMap());
public static final class Builder {
private final Map<String, String> headerMap = new LinkedHashMap<>();
public Builder addHeader(String headerName, String headerValue) {
headerMap.put(headerName, headerValue);
return this;
}
public Builder addHeaders(Map<String, String> headerMap) {
this.headerMap.putAll(headerMap);
return this;
}
public CacheHeaders build() {
return new CacheHeaders(headerMap);
}
}
/**
* @return A {@link CacheHeaders.Builder} with a copy of this {@link CacheHeaders} values.
*/
public CacheHeaders.Builder toBuilder() {
CacheHeaders.Builder builder = builder();
builder.addHeaders(headerMap);
return builder;
}
private CacheHeaders(Map<String, String> headerMap) {
this.headerMap = headerMap;
}
@Nullable
public String headerValue(String header) {
return headerMap.get(header);
}
public boolean hasHeader(String headerName) {
return headerMap.containsKey(headerName);
}
}