/** 
 * To run this servlet, you may have to specify the root directory 
 * in the path since it needs to get at the stubs present in the
 * package com.gopalan.Shop.Cart.
 * 
 * You should also move the Online.class file to the directory 
 * specified in the -d option below.
 * 
 * eg.,
 * servletrunner -p 6060 -d E:\ -s E:\com\gopalan\Shop\Cart\servlet.properties
 * 
 */ 

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.rmi.*;
import com.gopalan.Shop.Cart.*;

public class Online extends HttpServlet { 
 
 CartHome	home = null;
 Cart		cart = null;
 
 Vector    bookList = new Vector();
 Vector    musicList= new Vector();
 Vector    bookCart = new Vector();
 Vector    musicCart= new Vector();

 public void init(ServletConfig config) throws ServletException { 
  
  super.init(config);
  System.out.println( "Called from Online::init..." );
  try{
   home = (CartHome)Naming.lookup("Cart");
   if( null == home ) { 
    System.out.println( "null CartHome returned..." );
   }
   else { 
    cart = home.create();
    System.out.println( "Naming.lookup successful..." );
    System.out.println( "home.create successful..." );
   }
  } catch(Exception e){System.out.println( e );}
 }
 
 public void doGet(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException { 
  
  System.out.println( "Called from Online::doGet..." );
  displayForm(res, "Welcome");   
 }
 
 public void doPost(HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException { 
  
  System.out.println( "Called from Online::doPost..." );
  
  int item = 0;
  
  System.out.println( "Content Type ="+
                      req.getContentType());
  
  if ("application/x-www-form-urlencoded".equals(req.getContentType())) { 
   Enumeration enum = req.getParameterNames();
   while (enum.hasMoreElements()) { 
    System.out.println("---------------------------------------------");
    String name = (String) enum.nextElement();
    System.out.println("name = " + name);
    
    String values[] = req.getParameterValues(name);
    System.out.println("The No. of Values selected are ="+values.length);
    
    
    if( name.equals("MusicCombo") ) { 
     for (int i = 0; i < values.length; i++) { 
      
      System.out.println(values[i]);
      item = (Integer.valueOf(values[i])).intValue();
      cart.addToMusicCart (((ReturnSet)musicList.elementAt(item-1)).code);
     }
    }

    if( name.equals("BooksCombo") ) { 
     for (int i = 0; i < values.length; i++) { 
      
      System.out.println(values[i]);
      item = (Integer.valueOf(values[i])).intValue();
      cart.addToBooksCart (((ReturnSet)bookList.elementAt(item-1)).code);
     }
    }
    
    if( name.equals("BuyButton") ) { 
     cart.flushBooksCart();
     cart.flushMusicCart();
    }
    System.out.println("---------------------------------------------");
   }
  }     displayForm(res, "Welcome");   
 }
 
 
 private void displayForm(HttpServletResponse response, String message) 
  throws IOException { 
  
  System.out.println( "Called from Online::displayForm..." );
  if( ( home == null ) || (cart == null)) { 
   try{
    home = (CartHome)Naming.lookup("Cart");
    cart = home.create();
   } catch(Exception e){ System.out.println( e ); }
  }
  response.setContentType("text/html");

  PrintWriter  out = response.getWriter();
  out.println("<html><body bgcolor=\"#FFFFFF\">");

  out.println("<p align=\"center\"><font size=\"2\" face=\"Verdana\">");
  out.println("<strong>Horse and Stable Online, Inc.</strong></font></p>");
  
  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<strong>List of Books Available-Make your Selection</strong></font></p>");

  out.println("<form method=\"POST\">");
  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<select name=\"BooksCombo\" multiple size=\"2\">");
  
  bookList = cart.getBooksList();
  System.out.println("Book List of size "+bookList.size()+" is...");
  for(int i = 0; i < bookList.size(); i++) { 
   ReturnSet set = (ReturnSet)bookList.elementAt(i);
   System.out.println( "code = " +set.code + 
                       " Title = " +set.title + 
                       " Author = " +set.authors);
   out.println("<option value=\""+ set.code + 
               "\">ISBN = "+
               set.code+" Title = "+set.title+" Authors = "+set.authors+" List Price = $"+set.price+" Discount = "+
               set.discount+"% Our Price = $"+set.ourPrice+
               "</option>");
  }
  out.println("</select><input type=\"submit\" name=\"BooksButton\"");
  out.println("value=\"Add to Books Shopping Cart\"></font></p></form>");
  
  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<strong>Books you added to your Shopping Cart</strong></font></p>");
  out.println("<div align=\"center\"><center>");

  out.println("<table border=\"1\"><tr>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>ISBN</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Book Title</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Author(s)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Actual Price(in US Dollars)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Discount(% in Percentage)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Your Price(in US Dollars)</strong></font></td></tr>");
  
  bookCart = cart.getBooksCart();
  System.out.println("Book Cart of size "+bookCart.size()+" is...");
  for(int i = 0; i < bookCart.size(); i++) { 
   ReturnSet set = (ReturnSet)bookCart.elementAt(i);
   System.out.println( "code = " +set.code + 
                       " Title = " +set.title + 
                       " Author = " +set.authors);
   out.println("<tr>");
   out.println("<td align=\"right\"><font size=\"1\" face=\"Verdana\">" + set.code);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.title);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.authors);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.price);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.discount+ " %");
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.ourPrice);
   out.println("</tr>");
  }
  out.println("</table></center></div>");
  out.println("<p align=\"left\"><font size=\"1\" face=\"Verdana\">");
  out.println("You have selected "+ cart.getNumberBooks() +
              " books for a total cost of $"+ cart.getBooksTotal() + "</font></p>");
  

  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<strong>List of Music CDs Available-Make your Selection</strong></font></p>");

  out.println("<form method=\"POST\">");
  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<select name=\"MusicCombo\" multiple size=\"2\">");
  
  musicList = cart.getMusicList();
  System.out.println("Music List of size "+musicList.size()+" is...");
  for(int i = 0; i < musicList.size(); i++) { 
   ReturnSet set = (ReturnSet)musicList.elementAt(i);
   System.out.println( "code = " +set.code + 
                       " Title = " +set.title + 
                       " Author = " +set.authors);
   out.println("<option value=\""+ set.code + 
               "\"> Code ="+
               set.code+" Album = "+set.title+" Composers = "+set.authors+" List Price = $"+set.price+" Discount = "+
               set.discount+"% Our Price = $"+set.ourPrice+
               "</option>");
  }
  out.println("</select><input type=\"submit\" name=\"MusicButton\"");
  out.println("value=\"Add to Music Shopping Cart\"></font></p></form>");
  
  out.println("<p><font size=\"1\" face=\"Verdana\">");
  out.println("<strong>Albums you added to your Shopping Cart</strong></font></p>");
  out.println("<div align=\"center\"><center>");

  out.println("<table border=\"1\"><tr>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>code</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Album Title</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Composer(s)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Actual Price(in US Dollars)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Discount(% in Percentage)</strong></font></td>");
  out.println("<td><font size=\"1\" face=\"Verdana\"><strong>Your Price(in US Dollars)</strong></font></td></tr>");
  
  musicCart = cart.getMusicCart();
  System.out.println("Book Cart of size "+musicCart.size()+" is...");
  for(int i = 0; i < musicCart.size(); i++) { 
   ReturnSet set = (ReturnSet)musicCart.elementAt(i);
   System.out.println( "code = " +set.code + 
                       " Title = " +set.title + 
                       " Author = " +set.authors);
   out.println("<tr>");
   out.println("<td align=\"right\"><font size=\"1\" face=\"Verdana\">" + set.code);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.title);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.authors);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.price);
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">"+set.discount+ " %");
   out.println("</font></td><td align=\"right\"><font size=\"1\" face=\"Verdana\">$"+set.ourPrice);
   out.println("</tr>");
  }
  out.println("</table></center></div>");
  out.println("<p align=\"left\"><font size=\"1\" face=\"Verdana\">");
  out.println("You have selected "+ cart.getNumberAlbums() +
              " CD Albums for a total cost of $"+ cart.getAlbumsTotal() + "</font></p>");
  

  out.println("<hr><p align=\"left\"><font size=\"1\" face=\"Verdana\">");
  out.println("<strong>Total Price of Items selected = $"+ cart.getGrandTotal() + "</strong></font></p>");

  out.println("<form method=\"POST\"><p><font size=\"2\" face=\"Verdana\">");
  out.println("<input type=\"submit\" name=\"BuyButton\" value=\"Buy\"></font></p>");
  out.println("</form>");
  out.println("</body></html>");
 }
 
}
