1 package net.sourceforge.blogentis.turbine;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import javax.servlet.ServletConfig;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import net.sourceforge.blogentis.slide.SlideService;
30
31 import org.apache.commons.logging.Log;
32 import org.apache.commons.logging.LogFactory;
33 import org.apache.turbine.services.TurbineServices;
34 import org.apache.turbine.services.rundata.RunDataService;
35 import org.apache.turbine.services.rundata.TurbineRunDataService;
36 import org.apache.turbine.util.RunData;
37 import org.apache.turbine.util.TurbineException;
38
39 /***
40 * This service extends the default TurbineRunDataService with the ability to
41 * retrieve the current threads associated RunData object.
42 *
43 * @author abas
44 */
45 public class BlogRunDataService extends TurbineRunDataService {
46 private static Log log = LogFactory.getLog(BlogRunDataService.class);
47
48 protected static ThreadLocal currentRunData = new ThreadLocal();
49
50 public boolean putRunData(RunData data) {
51 if (currentRunData.get() != data)
52 log
53 .error("Tried to put back a RunData that was not given by this thread!");
54 else if (log.isDebugEnabled())
55 log.debug("Putting back the RunData of this thread.");
56 SlideService.getInstance().endRequest();
57 currentRunData.set(null);
58 return super.putRunData(data);
59 }
60
61 public RunData getRunData(String key, HttpServletRequest req,
62 HttpServletResponse res, ServletConfig config)
63 throws TurbineException, IllegalArgumentException {
64
65 RunData data = super.getRunData(key, req, res, config);
66 if (currentRunData.get() != null) {
67 log.error("Sheet... We didn't clear previous RunData");
68 } else if (log.isDebugEnabled())
69 log.debug("Getting a new RunData Object for the current thread.");
70 currentRunData.set(data);
71 SlideService.getInstance().startRequest();
72 return data;
73 }
74
75 /***
76 * Get this thread's associated RunData Object.
77 *
78 * @return the current RunData object.
79 */
80 public BlogRunData getThreadRunData() {
81 return (BlogRunData)currentRunData.get();
82 }
83
84 /***
85 * Get this thread's associated RunData Object.
86 *
87 * @return the current RunData object.
88 */
89 public static BlogRunData getCurrentRunData() {
90 return ((BlogRunDataService)TurbineServices.getInstance().getService(
91 RunDataService.SERVICE_NAME)).getThreadRunData();
92 }
93 }