// XMLDotReader.java
// Uses the SAX interface
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;


public class XMLDotReader extends DefaultHandler {

    public static void main(String argv[]) {
        if (argv.length != 1) {
            System.err.println("Usage: XMLDotReader filename");
            System.exit(1);
        }
	
        try {
            DefaultHandler dotsHandler = new XMLDotReader();
            
	    SAXParserFactory factory = SAXParserFactory.newInstance();
        
	    //use default non-validating parser

	    SAXParser saxParser = factory.newSAXParser();

            saxParser.parse(new File(argv[0]), dotsHandler);


        } catch (Throwable t) { // much too general exception handling !!!

            t.printStackTrace();
        }
    }



//===========================================================
// state variables
//===========================================================
    private int x;
    private int y;
    

//===========================================================
// SAX DocumentHandler methods
//===========================================================

    public void startDocument()
            throws SAXException {
        System.out.println("startDocument");
    }

    public void endDocument()
            throws SAXException {
        System.out.println("endDocument");
    }

    /**
    Called for each node
    -look at qName and atts to see the node state
    -process that node if appropriate
    -or, update our state to affect future calls to startElement()
    or characters()
     */
    public void startElement(String namespaceURI, String localName,
            String qName, Attributes atts)
            throws SAXException {
        System.out.println("start element:" + qName);
        if (qName.equals("dot")) {
            x = Integer.parseInt(atts.getValue("x"));
            y = Integer.parseInt(atts.getValue("y"));

            System.out.println("dot: "+x + ", " + y);
        }
        
    }


// Called at the end of each element
    public void endElement(java.lang.String uri,
            java.lang.String localName,
            java.lang.String qName)
            throws SAXException {
        System.out.println("end element:" + qName);
        
    }

// Called for characters between nodes.
    public void characters(char buf[], int offset, int len)
            throws SAXException {
        String s = new String(buf, offset, len);
        s = s.trim();
        if (!s.equals("")) {
            System.out.println("characters:" + s);   
        }
    }
}