/* * Title: CookieDecoratorMapper * Description: * * This software is published under the terms of the OpenSymphony Software * License version 1.1, of which a copy has been included with this * distribution in the LICENSE.txt file. */ package com.opensymphony.module.sitemesh.mapper; import com.opensymphony.module.sitemesh.Config; import com.opensymphony.module.sitemesh.Decorator; import com.opensymphony.module.sitemesh.DecoratorMapper; import com.opensymphony.module.sitemesh.Page; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Cookie; import java.util.Properties; /** * The CookieDecoratorMapper will map a suitable decorator based on a cookie value. * * <p>The CookieDecoratorMapper is configured via one properties. * <code>cookie.name</code> - the cookie which contains the name of the * decorator which will be mapped.</p> * * @author Paul Hammant * @version $Revision: 1.2 $ * * @see com.opensymphony.module.sitemesh.DecoratorMapper */ public class CookieDecoratorMapper extends AbstractDecoratorMapper { private String cookieName; public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException { super.init(config, properties, parent); cookieName = properties.getProperty("cookie.name", null); if (cookieName == null) { throw new InstantiationException("'cookie.name' name parameter not set for this decorator mapper"); } } public Decorator getDecorator(HttpServletRequest request, Page page) { Decorator result = null; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals(cookieName)) { result = getNamedDecorator(request, cookie.getValue()); } } } return result == null ? super.getDecorator(request, page) : result; } }