org.jboss.resteasy.plugins.delegates.NewCookieHeaderDelegate Maven / Gradle / Ivy
package org.jboss.resteasy.plugins.delegates;
import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages;
import org.jboss.resteasy.util.DateUtil;
import org.jboss.resteasy.util.ParameterParser;
import javax.ws.rs.core.NewCookie;
import javax.ws.rs.ext.RuntimeDelegate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
/**
* @author Bill Burke
* @version $Revision: 1 $
*/
public class NewCookieHeaderDelegate implements RuntimeDelegate.HeaderDelegate {
private static final String OLD_COOKIE_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z";
public Object fromString(String newCookie) throws IllegalArgumentException {
if (newCookie == null) throw new IllegalArgumentException(Messages.MESSAGES.newCookieValueNull());
String cookieName = null;
String cookieValue = null;
String comment = null;
String domain = null;
int maxAge = NewCookie.DEFAULT_MAX_AGE;
String path = null;
boolean secure = false;
int version = NewCookie.DEFAULT_VERSION;
boolean httpOnly = false;
Date expiry = null;
ParameterParser parser = new ParameterParser();
Map map = parser.parse(newCookie, ';');
for (Map.Entry entry : map.entrySet()) {
String name = entry.getKey();
String value = entry.getValue();
if (name.equalsIgnoreCase("Comment"))
comment = value;
else if (name.equalsIgnoreCase("Domain"))
domain = value;
else if (name.equalsIgnoreCase("Max-Age"))
maxAge = Integer.parseInt(value);
else if (name.equalsIgnoreCase("Path"))
path = value;
else if (name.equalsIgnoreCase("Secure"))
secure = true;
else if (name.equalsIgnoreCase("Version"))
version = Integer.parseInt(value);
else if (name.equalsIgnoreCase("HttpOnly"))
httpOnly = true;
else if (name.equalsIgnoreCase("Expires")) {
try
{
expiry = new SimpleDateFormat(OLD_COOKIE_PATTERN, Locale.US).parse(value);
}
catch (ParseException e)
{
}
} else {
cookieName = name;
cookieValue = value;
}
}
if (cookieValue == null)
{
cookieValue = "";
}
return new NewCookie(cookieName, cookieValue, path, domain, version, comment, maxAge, expiry, secure, httpOnly);
}
protected void quote(StringBuilder b, String value) {
if (MediaTypeHeaderDelegate.quoted(value)) {
b.append('"');
b.append(value);
b.append('"');
} else {
b.append(value);
}
}
public String toString(Object value) {
if (value == null) throw new IllegalArgumentException(Messages.MESSAGES.paramNull());
NewCookie cookie = (NewCookie) value;
StringBuilder b = new StringBuilder();
b.append(cookie.getName()).append('=');
if (cookie.getValue() != null) {
quote(b, cookie.getValue());
}
b.append(";").append("Version=").append(cookie.getVersion());
if (cookie.getComment() != null) {
b.append(";Comment=");
quote(b, cookie.getComment());
}
if (cookie.getDomain() != null) {
b.append(";Domain=");
quote(b, cookie.getDomain());
}
if (cookie.getPath() != null) {
b.append(";Path=");
b.append(cookie.getPath());
}
if (cookie.getMaxAge() != -1) {
b.append(";Max-Age=");
b.append(cookie.getMaxAge());
}
if (cookie.getExpiry() != null) {
b.append(";Expires=");
b.append(DateUtil.formatDate(cookie.getExpiry(), OLD_COOKIE_PATTERN));
}
if (cookie.isSecure())
b.append(";Secure");
if (cookie.isHttpOnly())
b.append(";HttpOnly");
return b.toString();
}
}