/*
vim:nowrap:ts=4:ai
*/

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.helpers.*;
import org.xml.sax.*;
import java.util.Stack;
import java.util.Vector;
import java.util.HashMap;
import java.util.ResourceBundle;
import java.util.GregorianCalendar;
import java.net.*;

public class SQLServerWebReader extends DefaultHandler
{
	Stack distinctUsers;
	Vector userDetail;
	ResourceBundle props;
	public int nElemAdded;
	final static String PROP_FILE = "WebDataSources";
	long diff;

	public SQLServerWebReader()
	{
		distinctUsers = new Stack();
		userDetail = new Vector();
		props = ResourceBundle.getBundle(PROP_FILE);
		nElemAdded = 0;
		diff = 0L;
	}

	public Stack getDistinctUsers ()
		throws MalformedURLException, IOException
	{
		URL urlds = new URL(props.getString("SQLServerWebReader")
			+ "?op=DistinctUsers");
		BufferedReader in = new BufferedReader(
			new InputStreamReader(urlds.openStream()));

		try
		{
			XMLReader saxp = XMLReaderFactory.createXMLReader(
				"org.apache.xerces.parsers.SAXParser");
			saxp.setContentHandler(this);
			saxp.parse(new InputSource(in));
		}
		catch (Exception e)
		{
			System.out.println(
				"SQLServerWebReader.getDistinctUsers: error parsing document: "
				+ e.getMessage());
		}

		return distinctUsers;
	}
	
	public Vector getUserDetail (String user)
		throws MalformedURLException, IOException
	{
        GregorianCalendar cal1 = new GregorianCalendar();

		URL urlds = new URL(props.getString("SQLServerWebReader")
			+ "?op=ListUserDetails&usr=" + user);
		BufferedReader in = new BufferedReader(
			new InputStreamReader(urlds.openStream()));

		try
		{
			XMLReader saxp = XMLReaderFactory.createXMLReader(
				"org.apache.xerces.parsers.SAXParser");
			saxp.setContentHandler(this);
			saxp.parse(new InputSource(in));
		}
		catch (Exception e)
		{
			System.out.println("SQLServerWebReader.getUserDetail(" + user
				+ "): error parsing document: " + e.getMessage());
		}

        GregorianCalendar cal2 = new GregorianCalendar();
        diff = cal2.getTime().getTime() - cal1.getTime().getTime();

		return userDetail;
	}

	public void startElement(
		String uri,
		String localName,
		String qName,
		Attributes attributes)
	{
		String val;
		if (localName.equals("user"))
		{
			if ((val = attributes.getValue("name")) != null)
			{
				distinctUsers.push(val);
				return;
			}
		}

		if (localName.equals("detail"))
		{
			HashMap h = new HashMap();
			h.put("ssafename", attributes.getValue("ssafename"));
			h.put("project", attributes.getValue("project"));
			h.put("version", attributes.getValue("version"));
			userDetail.add(h);
			System.out.print(".");
			nElemAdded++;
			return;
		}

	}

	public static void main (String[] args)
		throws MalformedURLException, IOException
	{
		SQLServerWebReader reader = new SQLServerWebReader();
		System.out.println("exec'ing: getUserDetail...");
		Vector v = reader.getUserDetail("admin");
		System.out.println("\nDone. Added "	+ reader.nElemAdded
			+ " nodes. (" + reader.diff + " ms)");
	}

}

