package fishrungames.bashgid.core;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

public class XmlProcessor
{

	public static Document getDomElement(String xml)
	{
		Document doc = null;
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try
		{

			DocumentBuilder db = dbf.newDocumentBuilder();

			InputSource is = new InputSource();
			is.setCharacterStream(new StringReader(xml));
			doc = db.parse(is);

		} catch (ParserConfigurationException e)
		{
			Log.e("Error: ", e.getMessage());
			return null;
		} catch (DOMException e)
		{
			//Xperimental -- need to learn more about this exception
			Log.e("Error: ", e.getMessage());
			return null;
		} catch (SAXException e)
		{
			Log.e("Error: ", e.getMessage());
			return null;
		} catch (IOException e)
		{
			Log.e("Error: ", e.getMessage());
			return null;
		}

		return doc;
	}

	public static String getValue(Element item, String str)
	{
		NodeList n = item.getElementsByTagName(str);
		return getElementValue(n.item(0));
	}

	public static String getAttributeValue(Element item, String str, String attr)
	{
		NodeList n = item.getElementsByTagName(str);
		return getElementAttributeValue(n.item(0), attr);
	}

	public static final String getElementValue(Node elem)
	{
		Node child;
		if (elem != null)
		{
			if (elem.hasChildNodes())
			{
				for (child = elem.getFirstChild(); child != null; child = child.getNextSibling())
				{
					if (child.getNodeType() == Node.TEXT_NODE)
					{
						return child.getNodeValue();
					}
				}
			}
		}
		return "";
	}

	public static final String getElementAttributeValue(Node elem, String attr)
	{
		Node child;
		if (elem != null)
		{
			
			
			if (elem.hasAttributes())
			{
				child = elem.getAttributes().getNamedItem(attr);
				if (child != null)
				{
					//Xperimental -- do we need this?
					if (child.getNodeName().equals(attr))
					{
						String childNodeValue = child.getNodeValue();
						return childNodeValue;
					}
				}
			}
		}
		
		return "";
	}
	

}
