
/**
 * @(#)SaxSample.java 1.0 2004 Feb 28
 * @author Zetein Inc
 * This module is a sample application reading a  XML file continining Parties and 
 * contact information. It only displays the results.
 */

import java.io.*;

import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.swing.*;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;

public class SaxSample extends DefaultHandler
{
   public static void main(String argv[])
   {
       // if no file name on command line ask for it
       if (argv.length < 1) {  
           fileName =  JOptionPane.showInputDialog(null,"Enter file Containing XML statements",
                                                      "FileName Input",JOptionPane.INFORMATION_MESSAGE);
       } else {
           // use file name entered on command line
           fileName = argv[0]; 
       } 
       if ("".equals(fileName) | fileName == null){
           fileName = "d:\\1J\\util\\NameSample.xml"; // namespaceAware = false
       }
       // Use an instance of ourselves as the SAX event handler
       DefaultHandler handler = new SaxSample();
       // Use the default (non-validating) parser
       SAXParserFactory factory = SAXParserFactory.newInstance();
       try {
          // Parse the input
          SAXParser saxParser = factory.newSAXParser();
          saxParser.parse( new File(fileName), handler);
       } catch (Throwable t) {
           t.printStackTrace(System.err);
       }
       // exit gracefully
       System.exit(0); 
   }  // end main
   private static String fileName;
   private String tagName;
   private String tagData;
   private String name;
   private String address;
   private String city;
   private String state;
   private String zip;
   private String phone;
   //===========================================================
   // SAX DocumentHandler methods
   //===========================================================

   public void endDocument()
   throws SAXException
   {
       // do output for the last Name
       DoOut();  
   } // end endDocument
   public void DoOut()
   {
       System.out.println("Name: " + name + "\r\n"
                          + "Address: " + address + "\r\n"
                          + "City/State/Zip: " + city + " " + state + " " + zip + "\r\n"
                          + "Phone: " + phone + "\r\n"
                          +  "\r\n" +  "\r\n"                        
       );   
   } // end DoOut
   public void startElement(String namespaceURI,
                            String lName, // local name
                            String qName, // qualified name
                            Attributes attrs)
   throws SAXException
   {
       String eName = lName; // element name
       if ("".equals(eName) | eName == null ){
           eName = qName; // namespaceAware = false
       }
       if ("Party".equals(eName)){  
           // if there is data from a previous Name then print it
           if (!("".equals(name) | name == null)){ 
               // output data from the last name
               DoOut();                   
           }                  
           name = "";
           address = "";
           city = "";
           state = "";
           zip = "";
           phone = "";
           }
           // save tagName for later
           tagName = eName; 
       } // end DoOut

   public void characters(char buf[], int offset, int len)
   throws SAXException
   {
       tagData = new String(buf, offset, len);
       // eliminate trailing spaces
       tagData.trim(); 
   }

   public void endElement(String namespaceURI,
                          String sName, // simple name
                          String qName  // qualified name
                         )
   throws SAXException
   {
       if ("Name".equals(tagName)){
           name= tagData;
       } 
       if ("Address".equals(tagName)){
           address= tagData;
       } 
       if ("City".equals(tagName)){
           city= tagData;
       } 
       if ("State".equals(tagName)){
           state= tagData;
       } 
       if ("Phone".equals(tagName)){
           phone= tagData;
       } 
       if ("ZipCode".equals(tagName)){
           zip= tagData;
       }  
              // for the first element we care about

       tagName = "";
   }// end endElement
}

