package basics.xml.pull;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import basics.testing.Test;
import basics.xml.TPath;

public class CommonHandler extends DefaultHandler
{
private TPath          path        = null;
private XmlDataHandler dataHandler = null;

public void setDataHandler(XmlDataHandler dataHandler)
{
   this.dataHandler = dataHandler;
}

public void startDocument() throws SAXException
{
   path = new TPath("/");
}

public void endDocument() throws SAXException
{
}

public synchronized void startElement(String namespaceURI, String localName, String qualifiedName,
   Attributes attrs) throws SAXException
{
   String elementName = localName; // element name
   if("".equals(elementName))
      elementName = qualifiedName; // namespaceAware = false
   path.append(elementName);
   dataHandler.__nextNode(path, elementName);
   if(attrs != null)
   {
      for(int i = 0; i < attrs.getLength(); i++)
      {
         String aName = attrs.getLocalName(i);
         if("".equals(aName))
            aName = attrs.getQName(i);
         dataHandler.__nextAttribute(aName, attrs.getValue(i));
      }
   }
}

public synchronized void endElement(String namespaceURI, String localName, String qualifiedName)
   throws SAXException
{
   String elementName = localName;
   if("".equals(elementName))
      elementName = qualifiedName;
   dataHandler.__exitNode(path, elementName);
   path.removeLast();
}

public synchronized void characters(char buf[], int offset, int len) throws SAXException
{
   final String s = new String(buf, offset, len);
   dataHandler.__nextValue(s);
}

public static void unittest()
{
   Test.printout("See XParserExample - no tests.");
}
}
