/*
* Title: InlineDecoratorMapper
* 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.Decorator;
import com.opensymphony.module.sitemesh.Page;
import com.opensymphony.module.sitemesh.RequestConstants;
import com.opensymphony.module.sitemesh.factory.FactoryException;
import javax.servlet.http.HttpServletRequest;
/**
* The InlineDecoratorMapper is used to determine the correct Decorator when
* using inline decorators.
*
* <p>It will check the request attribute value defined by the key
* {@link com.opensymphony.module.sitemesh.RequestConstants#DECORATOR} and use the appropriate named
* Decorator. This is passed across from the page:applyDecorator tag.</p>
*
* @author <a href="mailto:joe@truemesh.com">Joe Walnes</a>
* @version $Revision: 1.2 $
*
* @see com.opensymphony.module.sitemesh.DecoratorMapper
*/
public class InlineDecoratorMapper extends AbstractDecoratorMapper implements RequestConstants {
public Decorator getDecorator(HttpServletRequest request, Page page) {
Decorator result = null;
if (request.getAttribute(DECORATOR) != null) {
// Retrieve name of decorator to use from request
String decoratorName = (String)request.getAttribute(DECORATOR);
result = getNamedDecorator(request, decoratorName);
if (result == null) throw new FactoryException("Cannot locate inline Decorator: " + decoratorName);
}
return result == null ? super.getDecorator(request, page) : result;
}
}