//Title:       XML-Tabellenimport
//Version:
//Copyright:   Copyright (c)  2002
//Author:      Altmann
//Company:     GTDS
//Description:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Hashtable;

import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

public class XMLTabImp {

public static void main (String args[]) 
	throws java.io.IOException, SQLException, SAXException {

	String usrpass = args[0];

	String username = usrpass.substring(0, usrpass.indexOf("/"));
	String password = usrpass.substring(usrpass.indexOf("/")+1, usrpass.indexOf("@"));
	String database = usrpass.substring(usrpass.indexOf("@")+1);

	Document xml;

	DOMParser dp =  new DOMParser();
	dp.parse(args[1]);
	xml = dp.getDocument();


	Connection conn = DBSession.getConnection(username, password, database);
	Hashtable dataTypes = new Hashtable();
	ChildElementWalker cew = new ChildElementWalker(xml.getDocumentElement(), null);
	Element tab  = cew.getNextElement();

	String stat = "INSERT INTO " + tab.getTagName();
	String colList = "";
	String valList = "";
	
	cew = new ChildElementWalker(tab, null);
	Element desc = cew.getNextElement();
	ChildElementWalker descW = new ChildElementWalker(desc, null);
	while(true) {
		Element column = descW.getNextElement();
		if(column == null) {
			break;
		};
		String colName  = column.getTagName();
		String dataType = column.getAttribute("datatype");
		dataTypes.put(colName, dataType);
		colList += ", " + colName;
		valList += ", ?";
		//System.err.println(colName);
	}
	stat = stat + "(" + colList.substring(2) + ") VALUES (" + valList.substring(2) + ")";
	System.err.println(stat);
	PreparedStatement ins = conn.prepareStatement(stat);
	int count = 0;
	while(true) {
		Element row = cew.getNextElement();
		if(row == null) {
			break;
		};
		ChildElementWalker colw = new ChildElementWalker(row, null);
		int i = 0;
		while(true) {
			Element column = colw.getNextElement();
			if(column == null) {
				ins.execute();
				ins.clearParameters();
				break;
			};
			String colName  = column.getTagName();
			// System.err.print(colName);
			String dataType = (String) dataTypes.get(colName);
			i++;
			String value = null;
			if(column.getFirstChild() != null) {
				value = column.getFirstChild().getNodeValue();
			}
			if(dataType.equals("DATE")) {
				if(value==null) {
					ins.setTimestamp(i, null);
				} else {
					ins.setTimestamp(i, Timestamp.valueOf(value));
				}
			} else if(dataType.equals("NUMBER")) {
				if(value==null) {
					ins.setString(i, null);
				} else {
					ins.setDouble(i, Double.valueOf(value).doubleValue());
				}
			}else {
				ins.setString(i, value);
			}
		}
		count++;
	}
	System.err.print(count+ " rows inserted");
	ins.close();
}

}