package org.riotfamily.cachius.http;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.riotfamily.cachius.CacheService;
import org.riotfamily.cachius.persistence.SimpleDiskStore;
public class CacheFilter implements Filter {
private CacheService cacheService = new CacheService(new SimpleDiskStore());
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
try {
cacheService.handle(new FilterHandler(
(HttpServletRequest) request,
(HttpServletResponse) response,
filterChain));
}
catch (IOException e) {
throw e;
}
catch (ServletException e) {
throw e;
}
catch (Exception e) {
throw new ServletException(e);
}
}
private static class FilterHandler extends AbstractHttpHandler {
private FilterChain filterChain;
public FilterHandler(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) {
super(request, response);
this.filterChain = filterChain;
}
@Override
protected void handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
filterChain.doFilter(request, response);
}
}
}