package com.vtence.molecule.lib;
import com.vtence.molecule.Request;
import com.vtence.molecule.http.Cookie;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class CookieJar {
private final Map<String, Cookie> cookies = new LinkedHashMap<>();
private final Map<String, Cookie> fresh = new LinkedHashMap<>();
private final Map<String, Cookie> discarded = new LinkedHashMap<>();
public CookieJar(Cookie... cookies) {
this(Arrays.asList(cookies));
}
public CookieJar(Iterable<Cookie> cookies) {
for (Cookie cookie : cookies) {
store(cookie);
}
}
public static CookieJar get(Request request) {
return request.attribute(CookieJar.class);
}
public void bind(Request request) {
request.attribute(CookieJar.class, this);
}
public void unbind(Request request) {
request.removeAttribute(CookieJar.class);
}
public int size() {
return cookies.size();
}
public boolean empty() {
return cookies.isEmpty();
}
public boolean has(String name) {
return cookies.containsKey(name);
}
public Cookie get(String name) {
return cookies.get(name);
}
public Cookie add(String name, String value) {
return add(new Cookie(name, value));
}
public Cookie add(Cookie cookie) {
store(cookie);
fresh.put(cookie.name(), cookie);
return cookie;
}
public Cookie discard(String name) {
return discard(new Cookie(name, ""));
}
private Cookie discard(Cookie cookie) {
cookies.remove(cookie.name());
discarded.put(cookie.name(), cookie);
return cookie;
}
public List<Cookie> all() {
return new ArrayList<>(cookies.values());
}
public List<Cookie> fresh() {
return new ArrayList<>(fresh.values());
}
public List<Cookie> discarded() {
return new ArrayList<>(discarded.values());
}
public boolean fresh(String name) {
return fresh.containsKey(name);
}
public boolean discarded(String name) {
return discarded.containsKey(name);
}
private void store(Cookie cookie) {
cookies.put(cookie.name(), cookie);
}
}