01: package com.tagtraum.jo;
02:
03: import com.tagtraum.framework.log.Log;
04:
05: import javax.servlet.FilterChain;
06: import javax.servlet.ServletException;
07: import javax.servlet.ServletRequest;
08: import javax.servlet.ServletResponse;
09: import java.io.IOException;
10: import java.util.List;
11: import java.util.ArrayList;
12:
13: /**
14: *
15: * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a>
16: * @version 1.1beta1 ($Revision: 1.1 $)
17: */
18: public class JoFilterChain {
19:
20: private List joFilterHolders;
21: private I_JoServletModel joServletModel;
22: private Log log;
23: private I_JoServletContextPeer servletContextPeer;
24: private String logPrefix;
25:
26: public JoFilterChain(I_JoServletContextPeer servletContextPeer) {
27: this .joFilterHolders = new ArrayList();
28: this .servletContextPeer = servletContextPeer;
29: this .log = Log.getLog(servletContextPeer.getHost().getName());
30: this .logPrefix = "[" + servletContextPeer.getName() + "]: ";
31: }
32:
33: public void addJoFilterHolder(JoFilterHolder joFilterHolder) {
34: if (log.isLog(Log.METHOD))
35: log.log(logPrefix + "Added Filter " + joFilterHolder
36: + " to FilterChain.", Log.METHOD);
37: joFilterHolders.add(joFilterHolder);
38: }
39:
40: public void setJoServletModel(I_JoServletModel joServletModel) {
41: this .joServletModel = joServletModel;
42: }
43:
44: public void execute(final I_JoServletRequest request,
45: final I_JoServletResponse response) throws IOException,
46: ServletException {
47: if (log.isLog(Log.METHOD))
48: log.log(logPrefix + "Executing FilterChain "
49: + joFilterHolders + " " + joServletModel,
50: Log.METHOD);
51: FilterChain filterChain = new FilterChain() {
52: private int index = 0;
53:
54: public void doFilter(ServletRequest servletRequest,
55: ServletResponse servletResponse)
56: throws IOException, ServletException {
57: if (joFilterHolders.size() > index) {
58: final JoFilterHolder filterHolder = ((JoFilterHolder) joFilterHolders
59: .get(index));
60: index++;
61: if (log.isLog(Log.METHOD))
62: log.log(logPrefix + "Executing Filter "
63: + filterHolder, Log.METHOD);
64: filterHolder.service(servletRequest,
65: servletResponse, this );
66: } else {
67: if (log.isLog(Log.METHOD))
68: log.log(logPrefix + "Executing Servlet "
69: + joServletModel);
70: request.setServletContext(servletContextPeer
71: .getServletContext());
72: joServletModel.service(servletRequest,
73: servletResponse);
74: }
75: }
76: };
77: filterChain.doFilter(request, response);
78: }
79:
80: public I_JoServletModel getJoServletModel() {
81: return joServletModel;
82: }
83: }
|