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

/** 
 * a Java servlet that tries to play with sessions a little
 *
 * @author Sharon Tuttle
 * @version 3-27-13
 */
 
public class St10SessionExample extends HttpServlet 
{ 
    /**
     * create an HTML5 document that calls this servlet's doPost
     *     method when its submit button is clicked.
     * 
     * @param request object containing the GET request information
     *                from the browser 
     * @param response object containing the response that will
     *                 be sent back to the browser - here containing
     *                 a form with the doPost method as its action
     */

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
                     throws ServletException, IOException
    {
        // get a new session object 

        HttpSession session = request.getSession(true);

        String sessionId = session.getId();

        response.setContentType("text/html");
        
        ServletOutputStream getOut = response.getOutputStream();

        String title = "Playing with sessions S13 Part 1";

        session.setAttribute("this course", "CS 318");
        session.setAttribute("course int", new Integer(318));
        session.setAttribute("pageNumber", new Integer(1));

        session.setAttribute("looky", new Double(13.3));
        //double lookyVal = session.getAttribute("looky");
        //double lookyVal = (double) session.getAttribute("looky");
        //Double lookyVal = (Double) session.getAttribute("looky");
        //Double lookyVal = session.getAttribute("looky");

        Html318Helpers.beginHtml(getOut, title);

        getOut.println("<h1> " + title +
                       "</h1>");

        getOut.println("<p>Session id is: " + sessionId + "</p>");

        getOut.println("<form method=\"post\" " +
                       "action=\"http://nrs-projects.humboldt.edu:8888/servlet/" +
                       "St10SessionExample\">");
        getOut.println("<p> Enter a quantity:    ");
        getOut.println("<input type=\"text\" " +
                            "name=\"quantity\" value=\"0\" /> </p>");
        getOut.println("<p> <input type=\"submit\" " +
                       "value=\"Send value\" />" );
        getOut.println("</form>");

        Html318Helpers.endHtml(getOut);
    }

    /**
     * respond to the page generated by the doGet method,
     *     and show that session info has been maintained/
     *     is available.
     * 
     * @param request object containing the POST request information
     *                from the browser 
     * @param response object containing the response that will
     *                 be sent back to the browser - here containing
     *                 a response showing some session info
     */

    public void doPost(HttpServletRequest request, 
                       HttpServletResponse response) 
                      throws ServletException, IOException 
    { 
        HttpSession session = request.getSession(true);
        String sessionId = session.getId();

        response.setContentType("text/html"); 
 
        ServletOutputStream postOut = response.getOutputStream();
 
        String title = "from St10SessionExample doPost method!"
            + " S13";

        Html318Helpers.beginHtml(postOut, title);

        postOut.println("<h1> " + title + 
                        " </h1>"); 

        postOut.println("<p> Session id is: " + sessionId 
                        + "</p>");

        postOut.println("<table>"); 
        int quantity = Integer.parseInt(
                       request.getParameter("quantity"));

        postOut.println("   <tr> <td> quantity: </td> <td>" 
                        +  quantity + "</td> </tr>");

        // what if I'd like this quantity to be seen "later"?
	//    ...then I'd better SAVE it as a session attribute!

        session.setAttribute("quantity", new Integer(quantity));
        session.setAttribute("pageNumber", new Integer(2));

        String course = (String) session.getAttribute(
                        "this course");  

        postOut.println("   <tr> <td> this course: </td> <td>" +
                        course
                        + " </td> </tr>");

        // don't NEEED to cast here, because + with at least 1
	//    String operand will cause toString method of
	//    Object attribute to be called

        postOut.println("   <tr> <td> course int: </td> <td>" +
                        session.getAttribute("course int") 
                        + " </td> </tr>");
        postOut.println("</table>"); 

        postOut.println("<form method=\"post\" " +
                       "action=\"http://nrs-projects.humboldt.edu:8888/servlet/" +
                       "St10SessionExample2\">");
        postOut.println("<p> <input type=\"submit\" " +
                        "value=\"to part 2\"> </p>");
        postOut.println("</form>");

        Html318Helpers.endHtml(postOut);
    } 
}