package org.tessell.util.cookies; import java.util.Date; import org.tessell.gwt.user.client.IsCookies; public abstract class AbstractCookie<T> implements IsCookie<T> { private final IsCookies cookies; private final String name; private final String domain; private final Date expires; public final boolean secure; public AbstractCookie(final IsCookies cookies, final String name) { this.cookies = cookies; this.name = name; this.domain = null; this.expires = null; this.secure = false; } public AbstractCookie(IsCookies cookies, String name, String domain, Date expires, boolean secure) { this.cookies = cookies; this.name = name; this.domain = domain; this.expires = expires; this.secure = secure; } // TODO: Add a hashing/something approach for security // setCookie appends its value, so instead of null, pass empty string @Override public final T getValue() { String value = cookies.get(name); if (value != null) { return fromString(value); } else { return null; } } @Override public final void setValue(T value) { String asString = value == null ? null : toString(value); cookies.set(name, asString, domain, expires, secure); } @Override public final void clear() { cookies.remove(name); } // should use a ValueBox Parser instead protected abstract T fromString(String value); // should use a ValueBox Renderer instead protected abstract String toString(T value); }