/************************************************************************************************** * Copyright (c) 2014 Dennis Fischer. * * All rights reserved. This program and the accompanying materials * * are made available under the terms of the GNU Public License v3.0+ * * which accompanies this distribution, and is available at * * http://www.gnu.org/licenses/gpl.html * * * * Contributors: Dennis Fischer * **************************************************************************************************/ package de.chaosfisch.google.http; import java.net.CookieManager; import java.net.CookieStore; import java.net.HttpCookie; import java.net.URI; import java.util.ArrayList; import java.util.List; public class PersistentCookieStore implements CookieStore { private final CookieStore store; public PersistentCookieStore() { // get the default in memory cookie store store = new CookieManager().getCookieStore(); } public void setSerializeableCookies(final List<SerializableCookie> cookies) { for (final SerializableCookie cookie : cookies) { add(cookie.getURI(), cookie.getCookie()); } } public List<SerializableCookie> getSerializeableCookies() { final List<SerializableCookie> cookies = new ArrayList<>(store.getCookies().size()); for (final HttpCookie cookie : store.getCookies()) { final SerializableCookie serializableCookie = new SerializableCookie(cookie); cookies.add(serializableCookie); } return cookies; } @Override public void add(final URI uri, final HttpCookie cookie) { store.remove(uri, cookie); store.add(uri, cookie); } @Override public List<HttpCookie> get(final URI uri) { return store.get(uri); } @Override public List<HttpCookie> getCookies() { return store.getCookies(); } @Override public List<URI> getURIs() { return store.getURIs(); } @Override public boolean remove(final URI uri, final HttpCookie cookie) { return store.remove(uri, cookie); } @Override public boolean removeAll() { return store.removeAll(); } public static class SerializableCookie { private final String name; private final String value; private final String comment; private final String commentUrl; private final String domain; private final boolean discard; private final String path; private final String portList; private final long maxAge; private final boolean secure; private final int version; private SerializableCookie() { name = null; value = null; comment = null; commentUrl = null; domain = null; discard = false; path = null; portList = null; maxAge = 0; secure = false; version = 0; } public SerializableCookie(final HttpCookie cookie) { name = cookie.getName(); value = cookie.getValue(); comment = cookie.getComment(); commentUrl = cookie.getCommentURL(); domain = cookie.getDomain(); discard = cookie.getDiscard(); maxAge = cookie.getMaxAge(); path = cookie.getPath(); portList = cookie.getPortlist(); secure = cookie.getSecure(); version = cookie.getVersion(); } public URI getURI() { return URI.create(domain); } public HttpCookie getCookie() { final HttpCookie cookie = new HttpCookie(name, value); cookie.setComment(comment); cookie.setCommentURL(commentUrl); cookie.setDiscard(discard); cookie.setDomain(domain); cookie.setPath(path); cookie.setPortlist(portList); cookie.setMaxAge(maxAge); cookie.setSecure(secure); cookie.setVersion(version); return cookie; } @Override public String toString() { return String.format("%s: %s", name, value); } } }