blob: 4346c4972a97f35488e2ef0779a43ce3931a23bf [file] [log] [blame]
// Copyright 2007 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.internal.services;
import org.apache.tapestry5.ioc.annotations.IntermediateType;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.util.TimeInterval;
import org.apache.tapestry5.services.Cookies;
import org.apache.tapestry5.services.Request;
import javax.servlet.http.Cookie;
/**
* Implementation of the {@link org.apache.tapestry5.services.Cookies} service interface.
*/
public class CookiesImpl implements Cookies
{
private final Request request;
private final CookieSource cookieSource;
private final CookieSink cookieSink;
private final int defaultMaxAge;
/**
* @param request
* @param cookieSource
* @param cookieSink
* @param defaultMaxAge default cookie expiration time in milliseconds
*/
public CookiesImpl(Request request,
CookieSource cookieSource,
CookieSink cookieSink,
@Symbol("tapestry.default-cookie-max-age") @IntermediateType(TimeInterval.class)
long defaultMaxAge)
{
this.request = request;
this.cookieSource = cookieSource;
this.cookieSink = cookieSink;
this.defaultMaxAge = (int) (defaultMaxAge / 1000l);
}
public String readCookieValue(String name)
{
Cookie[] cookies = cookieSource.getCookies();
if (cookies == null) return null;
for (Cookie cooky : cookies)
{
if (cooky.getName().equals(name)) return cooky.getValue();
}
return null;
}
public void writeCookieValue(String name, String value)
{
writeCookieValue(name, value, defaultMaxAge);
}
public void writeCookieValue(String name, String value, int maxAge)
{
Cookie cookie = new Cookie(name, value);
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(maxAge);
cookieSink.addCookie(cookie);
}
public void writeCookieValue(String name, String value, String path)
{
Cookie cookie = new Cookie(name, value);
cookie.setPath(path);
cookieSink.addCookie(cookie);
}
public void writeDomainCookieValue(String name, String value, String domain)
{
Cookie cookie = new Cookie(name, value);
cookie.setPath(request.getContextPath() + "/");
cookie.setDomain(domain);
cookieSink.addCookie(cookie);
}
public void writeDomainCookieValue(String name, String value, String domain, int maxAge)
{
Cookie cookie = new Cookie(name, value);
cookie.setPath(request.getContextPath() + "/");
cookie.setDomain(domain);
cookie.setMaxAge(maxAge);
cookieSink.addCookie(cookie);
}
public void writeCookieValue(String name, String value, String path, String domain)
{
Cookie cookie = new Cookie(name, value);
cookie.setPath(path);
cookie.setDomain(domain);
cookieSink.addCookie(cookie);
}
public void removeCookieValue(String name)
{
Cookie cookie = new Cookie(name, null);
cookie.setPath(request.getContextPath() + "/");
cookie.setMaxAge(0);
cookieSink.addCookie(cookie);
}
}