// Fig. 16.31: GetDescriptionServlet.java
// Retrieves description of an item from database
package cartXML;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.text.*;
import java.sql.*;
import org.w3c.dom.*;

public class GetDescriptionServlet extends HttpServlet {
   private Database database;

   public void init( ServletConfig config )
      throws ServletException
   {
      super.init( config );
      database = new Database( "jdbc:odbc:catalog", "anonymous",
         "guest" );
      database.connect();
   }

   public void service( HttpServletRequest req,
      HttpServletResponse res )
      throws ServletException, IOException
   {
      try {
         HttpSession session = req.getSession( true );
         ShoppingCart cart =
            ( ShoppingCart ) session.getAttribute( "cart" );

         ServletContext sc = getServletConfig()
            .getServletContext();

         if ( cart.getUsername() == null ) {
            sc.getRequestDispatcher( "/index.wml" )
               .forward( req, res );
            return;
         }

         String productID = req.getParameter( "productID" );
         String techID = req.getParameter( "techID" );
         String query = "SELECT * FROM Products, Authors, "
            + "AuthorList WHERE Products.productID= "
            + productID + " AND Products.productID = "
            + "Authorlist.productid AND Authorlist.authorid = "
            + "Authors.authorID";

         ResultSet rs =  database.get( query );

         rs.next();

         double price = rs.getDouble( "price" );
         String unformattedPrice = String.valueOf( price );
         NumberFormat priceFormatter =
            NumberFormat.getCurrencyInstance();
         String formattedPrice = priceFormatter.format( price );

         XMLCreator xmlCreator = new XMLCreator();
         Node productNode = xmlCreator.initialize( "product" );
         Node itemNode  = xmlCreator.addChild(
            productNode, "item" );

         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "title" ), rs.getString( "title" ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "edition" ), rs.getString( "edition" ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "pubdate" ), rs.getString( "pubdate" ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "isbn" ), rs.getString( "isbn" ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "author" ), rs.getString( "Name" ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "productID" ), productID );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "formattedPrice" ), formattedPrice );
			xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "unFormattedPrice" ), String.valueOf( price ) );
         xmlCreator.addTextNode( xmlCreator.addChild( itemNode,
            "techID" ), techID );

         res.setContentType( "text/vnd.wap.wml" );
         PrintWriter output = res.getWriter();
         Processor processor = new Processor();
         processor.process( xmlCreator.getDocument(),
            "C:/jakarta-tomcat/webapps/chapter16/description.xsl",
            output );
      }
      catch ( SQLException sqlex ) {
         sqlex.printStackTrace();
      }
   }

   public void destroy()
   {
      database.shutDown();
   }
}
/*
 **************************************************************************
 * (C) Copyright 2001 by Deitel & Associates, Inc. and Prentice Hall.     *
 * All Rights Reserved.                                                   *
 *                                                                        *
 * DISCLAIMER: The authors and publisher of this book have used their     *
 * best efforts in preparing the book. These efforts include the          *
 * development, research, and testing of the theories and programs        *
 * to determine their effectiveness. The authors and publisher make       *
 * no warranty of any kind, expressed or implied, with regard to these    *
 * programs or to the documentation contained in these books. The authors *
 * and publisher shall not be liable in any event for incidental or       *
 * consequential damages in connection with, or arising out of, the       *
 * furnishing, performance, or use of these programs.                     *
 **************************************************************************
*/
