/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.core.web;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Makes the weblet renderer available as a request parameter.
*
* This is used to access the weblet renderer from the freemarker decorators.
*/
public final class WebletSupportFilter implements Filter {
/** The class logger.
*/
private static Logger log = LoggerFactory.getLogger(
WebletSupportFilter.class);
/** The servlet context.
*
* This is not null once the server calls init.
*/
private ServletContext servletContext;
/** Initializes the filter.
*
* The implementation of this operation is empty.
*
* @param filterConfig The provided filter configuration.
*
* @throws ServletException in case of error.
*/
public void init(final FilterConfig filterConfig) throws ServletException {
servletContext = filterConfig.getServletContext();
}
/** Called by the container when the filter is about to be destroyed.
*
* The implementation of this operation is empty.
*/
public void destroy() {
}
/** Stores the available weblets in the request.
*
* It stores the weblet renderer in the request attribute named
* '::weblet-renderer'.
*
* @param request The http/https request to filter. It cannot be null.
*
* @param response The http/https response. It cannot be null.
*
* @param chain The filter chain. It cannot be null.
*
* @throws IOException in case of an io error.
*
* @throws ServletException in case of a generic error.
*/
public void doFilter(final ServletRequest request, final ServletResponse
response, final FilterChain chain) throws IOException, ServletException {
log.trace("Entering doFilter");
if (!(request instanceof HttpServletRequest)) {
throw new ServletException("This filter can only be applied to http"
+ " requests.");
}
HttpServletRequest servletRequest = (HttpServletRequest) request;
servletRequest.setAttribute("::weblet-renderer",
new WebletRenderer(servletContext));
chain.doFilter(request, response);
log.trace("Leaving doFilter");
}
}