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 java.util.Properties;
/**
* <p>Will look at a session attribute to find the name of an appropriate decorator to use. If the
* session attribute is present, the mapper will not do anything and allow the next mapper in the chain
* to select a decorator.</p>
*
* <p>By default, it will look at the 'decorator' session attribute, however this can be overriden by
* configuring the mapper with a 'decorator.parameter' property.</p>
*
* @author Ricardo Lecheta
*/
public class SessionDecoratorMapper extends AbstractDecoratorMapper {
private String decoratorParameter = null;
public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
super.init(config, properties, parent);
decoratorParameter = properties.getProperty("decorator.parameter", "decorator");
}
public Decorator getDecorator(HttpServletRequest request, Page page) {
Decorator result = null;
String decorator = (String) request.getSession().getAttribute(decoratorParameter);
//get decorator from HttpSession
if (decorator != null) {
result = getNamedDecorator(request, decorator);
}
return result == null ? super.getDecorator(request, page) : result;
}
}