

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;


/**
 * Title:        PRON
 * Description:  This is the base servlet from which all other servlets are extended.This servlet contains
 *               common functionalities like ckecking for a valid session etc.
 * Copyright:    Copyright (c) 2001
 * @author Srinivas Sampige
 * @version 1.0
 */

public class PronServlet extends HttpServlet
  {

    protected static String sessionControllerName = "pronSessionController";
    protected static String logonPage = "/pron/webUi/logon.jsp";


    public void init(ServletConfig config) throws ServletException
      {
        super.init(config);
      }

    public void service( HttpServletRequest request,
                        HttpServletResponse response)
                                throws ServletException, java.io.IOException
      {
        System.out.println("Service method of PronServlet .......");
        Hashtable formData = HttpUtils.parsePostData(request.getContentLength(),
						 request.getInputStream());

        PronSessionController controller = (PronSessionController) getController(request, response);

        //If controller is null, then need to start appliction
        // because this was a start application request, or the session timed out.
        if (controller==null)
          {
            //check if logonServlet has caused the submit
            String formName =((String[]) formData.get("formName"))[0];

            if (!"LOGON-FORM".equals(formName))
              { //if it is not the logon form then go to the logon page of the application
                startApplication(request, response);
                return;
              }
          }

        //OK, this is not the start of the application,process the submit
        handleApplicationEvent(controller, formData, request, response);
      }

    protected void forwardRequest(String url, HttpServletRequest request,
                                            HttpServletResponse response)
                                                  throws java.io.IOException, ServletException
      {
        ServletContext context = getServletContext();
        RequestDispatcher dispatcher = context.getRequestDispatcher(url);
        dispatcher.forward(request, response);
      }


  protected void startApplication(HttpServletRequest request,
					HttpServletResponse response ) {
    try
      {
        forwardRequest(logonPage, request, response);
      }
    catch (Exception e)
      {
        // this is a fatal error, log what happend
      }
  }





    /**
    main event loop. This method should be overridden by servlets for
    specific pages.
    */
    protected void handleApplicationEvent(PronSessionController controller,
				Hashtable formData,
				HttpServletRequest request,
				HttpServletResponse response)
					throws java.io.IOException, ServletException
      {
        startApplication(request, response);
      }


    /**
    *This method returns the controller object for the current session.
    *@param1 HttpServletRequest  request  : the HTTP request object.
    *@param2 HttpServletResponse response : the HTTP response object.
    *@return Object : the controller object for this session.
    */
    protected Object getController(HttpServletRequest request,
                                   HttpServletResponse response)
      {
        try
          {
            HttpSession session = request.getSession(false);
            if (session==null) return null;
            Object controllerObject = session.getAttribute(sessionControllerName);
            if (controllerObject==null) return null;
            return controllerObject;
          }
        catch (Exception e)
          {
            return null;
          }
      }//end of method getController()

  }//end of class PronServlet
