1 package pl.aislib.fm;
2
3 import javax.servlet.http.HttpServletRequest;
4 import javax.servlet.http.HttpServletResponse;
5 import javax.servlet.http.HttpSession;
6
7 import org.apache.commons.logging.Log;
8
9 /***
10 * Main controller of application.
11 *
12 * @author <a href="mailto:pikus@ais.pl">Tomasz Pik</a>, AIS.PL
13 * @version $Revision: 1.4 $
14 */
15 public class Controller {
16
17 /***
18 * {@link Workflow} component.
19 */
20 private Workflow workflow;
21
22 /***
23 * {@link Application} component that should be controlled.
24 */
25 private Application application;
26
27 /***
28 * Logging object for workflow.
29 */
30 private Log workflowLog;
31
32
33
34
35 /***
36 * Constructor for Controller.
37 *
38 * @param application {@link Application} component that should be controlled.
39 * @param workflow {@link Workflow} component that defines flow between parts of the application.
40 */
41 public Controller(Application application, Workflow workflow) {
42 this.workflow = workflow;
43 this.application = application;
44 workflowLog = workflow.log;
45 }
46
47
48
49
50 /***
51 * @param request <code>HttpServletRequest</code> object.
52 * @param response <code>HttpServletResponse</code> object.
53 * @return page information.
54 */
55 public PageInfo getPageInfo(HttpServletRequest request, HttpServletResponse response) {
56 String pageName = workflow.resolveGlobalTriggers(application, request);
57 if (pageName != null) {
58 return workflow.getPageInfo(pageName);
59 }
60
61 pageName = request.getParameter("page");
62 HttpSession session = request.getSession();
63 PageInfo pageInfo;
64 if (pageName == null) {
65 pageInfo = workflow.getStartPageInfo();
66 } else {
67 pageInfo = workflow.getPageInfo(pageName);
68 }
69
70 if (pageInfo != null) {
71 if (workflowLog.isDebugEnabled()) {
72 workflowLog.debug("page from request: " + pageInfo.getActionKey());
73 }
74 if (pageInfo.getSessionExpiration() && workflow.isNewSession(session)) {
75 pageInfo = workflow.getStartPageInfo();
76 request.setAttribute(Constants.PL_AISLIB_FM_SESSION_EXPIRATION, Boolean.TRUE);
77 }
78 pageName = pageInfo.resolveTriggers(application, request);
79 pageInfo = workflow.getPageInfo(pageName);
80 }
81
82 return pageInfo;
83 }
84
85 }