package test;

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

/**
 * The ColorSessionServlet demonstrates the session management
 * mechanisms built into the servlet API. A session is
 * established and the client's preferred background color
 * as well as the number of times they have requested the
 * servlet are stored.
 *
 * @author Dustin R. Callaway
 * @version 1.0, 08/05/98
 */
public class ColorSessionServlet extends HttpServlet
{
  /**
   * init method is called when servlet is first loaded.
   */
  public void init(ServletConfig config) throws
    ServletException
  {
    super.init(config); //pass ServletConfig to parent
  }


  /**
   * service generates HTML pages that allows the client to
   * choose a color and then remembers the color on future
   * requests.
   */
  public void service(HttpServletRequest request,
    HttpServletResponse response) throws ServletException,
    IOException
  {
    String name; //name of user
    String color; //user's color preference
    Integer hitCount; //# of times user has requested servlet

    //get current session, create if it doesn't exist
    HttpSession mySession = request.getSession(true);

    //MIME type to return is HTML
    response.setContentType("text/html");

    //get a handle to the output stream
    PrintWriter out = response.getWriter();

    if (mySession.isNew()) //first time client requests page
    {
      //generate HTML form requesting name and color preference
      out.println("<HTML>");
      out.println("<HEAD>");
      out.println("<TITLE>Color Selector</TITLE>");
      out.println("</HEAD>");
      out.println("<BODY>");
      out.println("<FORM METHOD=\"POST\" " +
        "ACTION=\"colorsessionservlet\">");
      out.println("Please select background color:<BR>");
      out.println("<INPUT TYPE=\"RADIO\" NAME=\"bcolor\" " +
        "VALUE=\"white\">White<BR>");
      out.println("<INPUT TYPE=\"RADIO\" NAME=\"bcolor\" " +
        "VALUE=\"red\">Red<BR>");
      out.println("<INPUT TYPE=\"RADIO\" NAME=\"bcolor\" " +
        "VALUE=\"green\">Green<BR>");
      out.println("<INPUT TYPE=\"RADIO\" NAME=\"bcolor\" " +
        "VALUE=\"blue\">Blue<P>");
      out.println("Please enter your name:<BR>");
      out.println("<INPUT TYPE=\"TEXT\" NAME=\"name\" " +
        "SIZE=\"25\"><P>");
      out.println("<INPUT TYPE=\"SUBMIT\" VALUE=\"Submit\">");
      out.println("</BODY>");
      out.println("</HTML>");
    }
    else //client has already established a session
    {
      if (request.getParameter("bcolor") != null)
      {
        //client is submitting the color preference form
        String bcolor; //for user's preferred background color
        bcolor = request.getParameter("bcolor");

        //get HEX code for color
        if (bcolor.equals("red"))
        {
          color = "#FF0000";
        }
        else if (bcolor.equals("green"))
        {
          color = "#00FF00";
        }
        else if (bcolor.equals("blue"))
        {
          color = "#0000FF";
        }
        else //if nothing selected, default to white
        {
          color = "#FFFFFF";
        }

        name = request.getParameter("name"); //get user name
        hitCount = new Integer(1); //requested 1 time so far

        mySession.setAttribute("bcolor", color); //store color
        mySession.setAttribute("hitCount", hitCount);
        mySession.setAttribute("name", name); //store user name
        Cookie myCookie = new Cookie("ColorId", mySession.getId());
        response.addCookie(myCookie);
//        out.println("<br>Session ID: " + );
//        out.println("<br>Session ID fra request objektet: " + request.getRequestedSessionId());
      }
      else //user has previously submitted HTML form
      {
        //get color, name, and hit count from session
        color = (String)mySession.getAttribute("bcolor");
        name = (String)mySession.getAttribute("name");
        hitCount = (Integer)mySession.getAttribute("hitCount");
      }

      //increment hit count and store in session
      mySession.setAttribute("hitCount",
        new Integer(hitCount.intValue() + 1));

      out.println("<HTML>");
      out.println("<HEAD>");
      out.println("<TITLE>Color Selected</TITLE>");
      out.println("</HEAD>");
      out.println("<BODY BGCOLOR=\"" + color + "\">");
      out.println("<H2>Hello " + name + "!</H2>");
      out.println("<H3>You have requested this page " +
        hitCount.toString() + " times.<BR>");
      out.println("Notice how session management allows me " +
        "to remember<BR>");
      out.println("who you are, how many times you've " +
        "requested this page,<BR>");
      out.println("and your preferred background color.<P>");
      out.println("<A HREF=\"colorsessionservlet\">Next " +
        "Screen</A></H3>");
      out.println("</BODY>");
      out.println("</HTML>");
    }
    out.close();
  }


  /**
   * getServletInfo returns a brief description of this servlet
   */
  public String getServletInfo()
  {
    return "Servlet uses session management to maintain color.";
  }
}