/**
 * title: Books
  *@date: Sep 16, 2004
 * @author: MinHuaHuang
 * @ID: 66283
 */

package huan66283.Sep16;

import java.io.*;
import java.net.*;
import java.util.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class Books extends DefaultHandler {
StringBuffer htmlOut;

    private HashMap items = new HashMap();
    private float Total = 0;
    
    public String toString() {
        if (htmlOut != null)
            return htmlOut.toString();
        return super.toString();    
    }
    
    public void startElement(String namespace, 
                            String localName, 
                            String qName,
                            Attributes atts) {                            	
        if (localName.equals("book")) 
        {
            String id = atts.getValue("id");
            String title = atts.getValue("title");
            String author = atts.getValue("author");
            String isbn = atts.getValue("ISBN");
            String html = atts.getValue("htmlURL");
            String text = atts.getValue("textURL");
            String book = new String("Book:<br><b>Title:</b>'<i>" + title + "</i>'<br><b>Author:</b>" + author); 
            items.put(id, book);
        }
      
        if (localName.equals("item")) 
        {
            String id = atts.getValue("id");
            float price = Float.parseFloat(atts.getValue("prize"));
            int quantity = Integer.parseInt(atts.getValue("quantity"));
            float itemTotal = price * quantity;
            Total += itemTotal;
            htmlOut.append("\n<TR><TD>\n");
            htmlOut.append((String)items.get(id));
            htmlOut.append("\n</TD><TD ALIGN=LEFT><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>\n$");
            htmlOut.append(price);
            htmlOut.append("\n</TD><TD ALIGN=LEFT><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>\n");
            htmlOut.append(quantity);
            htmlOut.append("\n</TD><TD ALIGN=LEFT><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>\n$");
            htmlOut.append(itemTotal);
            htmlOut.append("\n</TD></TR>\n");           
        }
    }
  
    public void processWithSAX(String urlString) throws Exception {
        System.out.println("Processing URL " + urlString);
        htmlOut = new StringBuffer("<HTML><title>My Shopping Cart</title>\n<BODY bgcolor='#FFFFFF' text='#000066'>\n");
        htmlOut.append("<H1>The books for fall 2004 semester </H1>\n");
        htmlOut.append("<TABLE CELLPADDING=2 CELLSPACING=0 BORDER=1 WIDTH='700'><TR bgcolor='#000000'>\n");
        htmlOut.append("<TD ALIGN=LEFT><b><font face='Verdana, Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Description:</font></b></TD>\n");
        htmlOut.append("<TD ALIGN=LEFT><b><font face='Verdana, Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Unit Price</font></b></TD>\n");
        htmlOut.append("<TD ALIGN=LEFT><b><font face='Verdana, Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>Quantity</font></b></TD>\n");
        htmlOut.append("<TD ALIGN=LEFT><b><font face='Verdana, Arial, Helvetica, sans-serif' size='2' color='#FFFFFF'>$ Item Total</font></b></TD></TR>\n");
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        ParserAdapter pa = new ParserAdapter(sp.getParser());
        pa.setContentHandler(this);
        pa.parse(urlString);
        htmlOut.append("\n<TR><TD colspan='3' align='right'><font face='Verdana, Arial, Helvetica, sans-serif' size='2'><b>Total:</b></font></TD>\n");
        htmlOut.append("<TD ALIGN=LEFT><font face='Verdana, Arial, Helvetica, sans-serif' size='2'>\n");
        htmlOut.append(Total);
        htmlOut.append("\n</font></TD></TR>\n");
        htmlOut.append("</TABLE>\n");
        htmlOut.append("<br><p><font face='Verdana, Arial, Helvetica, sans-serif' size='1'><b>by Min Hua Huang</b><br>\n");
        htmlOut.append("(This program uses SAX generate <b>html </b>from <b>xml</b>)</font></p>\n");        
        htmlOut.append("</BODY></HTML>\n");
    }


    public static void main(String[] args) {
        try {
            Books book = new Books();
            book.processWithSAX("My_Data/"+ args[0]);
            String output = book.toString();
            System.out.println("Saving result to " + args[1]);
            FileWriter fw = new FileWriter(new File("My_Data/",args[1]));
            fw.write(output, 0, output.length());
            fw.flush();
        }
        catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
