// $Id: check.java,v 1.4 2001/07/21 22:47:28 mdean Exp $


/**
 * convert CheckFree database to DAML.
 * Assumes REGISTER.DBF copied from Mac has previously been registered
 * as the ODBC User DSN register using Microsoft dBase Driver (.dbf)
 * with dBase 5.0.
 */
class check
{

    /**
     * maps String sequence -> Resource
     */
    static java.util.Hashtable categories = new java.util.Hashtable();

    public static void main(String args[])
	throws Exception
    {
	// open database
	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	java.sql.Connection connection = java.sql.DriverManager.getConnection("jdbc:odbc:register");
	java.sql.Statement statement = connection.createStatement();
	java.sql.ResultSet results;

	com.hp.hpl.mesa.rdf.jena.model.Model model = new com.hp.hpl.mesa.rdf.jena.mem.ModelMem();

	results = statement.executeQuery("select sequence, category, desc from cat");
	while (results.next())
	    {
		String sequence = results.getString("sequence");
		String category = results.getString("category");
		String desc = results.getString("desc");

		com.hp.hpl.mesa.rdf.jena.model.Resource categoryResource = new com.hp.hpl.mesa.rdf.jena.common.ResourceImpl("#" + category);
		model.add(categoryResource,
			  com.hp.hpl.mesa.rdf.jena.vocabulary.RDF.type,
			  check_ont.Category);
		model.add(categoryResource,
			  check_ont.description,
			  desc);

		categories.put(sequence, categoryResource);
	    }

	results = statement.executeQuery("select date, desc, memo, check, amount, catseq1, reconciled from register order by date");
	int count = 0;
	String lastDate = "";
	while (results.next())
	    {
		String date = results.getString("date");
		String desc = results.getString("desc");
		String catseq1 = results.getString("catseq1");
		String memo = results.getString("memo");
		String check = results.getString("check");
		String amount = results.getString("amount");
		int reconciled = results.getInt("reconciled");
		
		if (date.equals(lastDate))
		    count++;
		else
		    {
			lastDate = date;
			count = 1;
		    }

		com.hp.hpl.mesa.rdf.jena.model.Resource transaction = new com.hp.hpl.mesa.rdf.jena.common.ResourceImpl("#" + date + "-" + count);
		model.add(transaction,
			  com.hp.hpl.mesa.rdf.jena.vocabulary.RDF.type,
			  check_ont.Transaction);
		model.add(transaction,
			  check_ont.date,
			  date);
		if (check != null)
		    model.add(transaction,
			      check_ont.number,
			      check);
		model.add(transaction,
			  check_ont.description,
			  desc);
		if (memo != null)
		    model.add(transaction,
			      check_ont.memo,
			      memo);
		model.add(transaction,
			  check_ont.amount,
			  eecr.nf.format(Double.parseDouble(amount) / 100.0));
		if (! catseq1.equals("00000"))
		    model.add(transaction,
			      check_ont.category,
			      (com.hp.hpl.mesa.rdf.jena.model.Resource) categories.get(catseq1));
		model.add(transaction,
			  check_ont.cleared,
			  (reconciled == 0) ? "false" : "true");
	    }

	// write model
	java.io.PrintWriter stream = new java.io.PrintWriter(System.out);
	model.write(stream);
    }
}
