View Javadoc

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    // Constructors
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    // Public methods
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  } // Controller class