Source code: org/roller/presentation/pagecache/PageCache.java
1
2 package org.roller.presentation.pagecache;
3
4 import org.apache.commons.lang.StringUtils;
5 import org.apache.commons.logging.Log;
6 import org.apache.commons.logging.LogFactory;
7 import org.roller.pojos.UserData;
8
9 import java.io.IOException;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12
13 import javax.servlet.Filter;
14 import javax.servlet.FilterChain;
15 import javax.servlet.FilterConfig;
16 import javax.servlet.ServletException;
17 import javax.servlet.ServletRequest;
18 import javax.servlet.ServletResponse;
19 import javax.servlet.http.HttpServletRequest;
20
21
22 /////////////////////////////////////////////////////////////////////////////
23 /**
24 * Configurable PageCache Filter implementation. Set the desired FilterHandler
25 * by adding a filter init parameter to web.xml named 'handler'. Possible
26 * values:<br>
27 * <br>
28 * OSCacheFilterHandler: to use OSCache (the default)<br>
29 * CommonsPageCache: to use the Jakarta Commons cache
30 *
31 * @author Lance Lavandowska
32 * @author David M Johnson
33 */
34 public class PageCache implements Filter
35 {
36 private static Log mLogger =
37 LogFactory.getFactory().getInstance(PageCache.class);
38
39 private FilterHandler mHandler = null;
40
41 private static ArrayList mHandlers = new ArrayList();
42
43 //-----------------------------------------------------------------------
44 /**
45 * Initialize the filter.
46 * @param filerConfig The filter configuration
47 */
48 public void init(FilterConfig filterConfig)
49 {
50 String handlerClass = filterConfig.getInitParameter("handler");
51 if (mLogger.isDebugEnabled())
52 {
53 mLogger.debug(
54 "Initializing as filterName: "+filterConfig.getFilterName());
55 }
56
57 if (StringUtils.isNotEmpty( handlerClass) &&
58 handlerClass.equals("CommonsPageCache"))
59 {
60 if (mLogger.isDebugEnabled())
61 {
62 mLogger.debug("Instantiating CommonsPageCache");
63 }
64 mHandler = new CommonsPageCache(filterConfig);
65 }
66 else
67 {
68 if (mLogger.isDebugEnabled())
69 {
70 mLogger.debug("Instantiating OSCacheFilterHandler");
71 }
72 mHandler = new OSCacheFilterHandler(filterConfig);
73 }
74 mHandlers.add(mHandler);
75 }
76
77 //-----------------------------------------------------------------------
78 /**
79 * Filter clean-up
80 */
81 public void destroy()
82 {
83 mHandler.destroy();
84 }
85
86 //-----------------------------------------------------------------------
87 /**
88 * Process the doFilter
89 * @param request The servlet request
90 * @param response The servlet response
91 * @param chain The filet chain
92 * @throws ServletException IOException
93 */
94 public void doFilter(ServletRequest request,
95 ServletResponse response, FilterChain chain)
96 throws ServletException, IOException
97 {
98 mHandler.doFilter(request, response, chain);
99 }
100
101 //-----------------------------------------------------------------------
102 /** Flush cache for all handlers of this class */
103 public static void flushCache(HttpServletRequest req)
104 {
105 Iterator iter = mHandlers.iterator();
106 while (iter.hasNext())
107 {
108 FilterHandler handler = (FilterHandler)iter.next();
109 handler.flushCache(req);
110 }
111 }
112
113 //-----------------------------------------------------------------------
114 /** Remove from cache for all handlers of this class */
115 public static void removeFromCache(HttpServletRequest req, UserData user)
116 {
117 Iterator iter = mHandlers.iterator();
118 while (iter.hasNext())
119 {
120 FilterHandler handler = (FilterHandler)iter.next();
121 handler.removeFromCache( req,user );
122 }
123 }
124 }