MyTextHandler.java Source code

Java tutorial

Introduction

Here is the source code for MyTextHandler.java

Source

import java.io.PrintWriter;
import java.util.Vector;

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;

public class MyTextHandler implements ContentHandler {
    private boolean insideNameElement = false;

    private boolean insidePhoneElement = false;

    private boolean insideEmailElement = false;

    private Person person;

    private Vector personVec;

    private PrintWriter out;

    public MyTextHandler(PrintWriter out) {
        this.out = out;
        personVec = new Vector();
    }

    public void setDocumentLocator(Locator locator) {
    }

    public void startDocument() {
        putCols(" name", " phone", " email");
        putCols(" ----", " -----", " -----");
    }

    public void endDocument() {
        int k1 = 1;
        while (k1 < personVec.size()) {
            int k0 = k1 - 1;
            Person p0 = (Person) personVec.elementAt(k0);
            Person p1 = (Person) personVec.elementAt(k1);
            if (p0.getName().compareTo(p1.getName()) > 0) {
                personVec.setElementAt(p0, k1);
                personVec.setElementAt(p1, k0);
                if (k1 > 1)
                    k1--;
            } else {
                k1++;
            }
        }

        for (int i = 0; i < personVec.size(); i++) {
            Person p = (Person) personVec.elementAt(i);
            putCols(p.getName(), p.getPhone(), p.getEmail());
        }
    }

    public void startPrefixMapping(String prefix, String uri) {
    }

    public void endPrefixMapping(String prefix) {
    }

    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
        if (localName.equals("person")) {
            person = new Person();
        } else if (localName.equals("name")) {
            insideNameElement = true;
        } else if (localName.equals("phone")) {
            insidePhoneElement = true;
        } else if (localName.equals("email")) {
            insideEmailElement = true;
        }
    }

    public void endElement(String namespaceURI, String localName, String qName) {
        if (localName.equals("person")) {
            if (person != null)
                personVec.addElement(person);
        } else if (localName.equals("name")) {
            insideNameElement = false;
        } else if (localName.equals("phone")) {
            insidePhoneElement = false;
        } else if (localName.equals("email")) {
            insideEmailElement = false;
        }
    }

    public void characters(char[] ch, int start, int length) {
        String str = "";
        for (int i = start; i < start + length; i++)
            str += ch[i];
        if (insideNameElement)
            person.setName(str);
        else if (insidePhoneElement)
            person.setPhone(str);
        else if (insideEmailElement)
            person.setEmail(str);
    }

    public void ignorableWhitespace(char[] ch, int start, int length) {
    }

    public void processingInstruction(String target, String data) {
    }

    public void skippedEntity(String name) {
    }

    private void putCols(String col1, String col2, String col3) {
        String lout = col1;
        while (lout.length() < 25)
            lout += " ";
        lout += col2;
        while (lout.length() < 50)
            lout += " ";
        lout += col3;
        out.println(lout);
    }
}

// A Class for Holding Person Information

class Person {
    private String name = null;

    private String phone = null;

    private String email = null;

    public void setName(String value) {
        name = value;
    }

    public void setPhone(String value) {
        phone = value;
    }

    public void setEmail(String value) {
        email = value;
    }

    public String getName() {
        if (name == null)
            return ("none");
        return (name);
    }

    public String getPhone() {
        if (phone == null)
            return ("none");
        return (phone);
    }

    public String getEmail() {
        if (email == null)
            return ("none");
        return (email);
    }
}
//Example XML document
/*
 An XML Document Containing a Simple Contact List
Start example
    
<?xml version="1.0" standalone="yes"?>
    
<folks>
<person>
    <phone>306 555-9999</phone>
    <email>joe@webserver.net</email>
    <name>Wang, Joe</name>
</person>
<person>
    <phone>704 555-0000</phone>
    <name>Pet, Rob</name>
    <email>rob@server.com</email>
</person>
</folks>
    
*/