import java.io.*;
import com.mobileapps.dor.*;
import com.mobileapps.pcre.*;
import java.sql.*;
import sun.jdbc.odbc.JdbcOdbcDriver;
public class DORReport {

	public static void main(String[] args) throws Exception {
    try {
    	new DORReport();
	  }	catch(Exception e) {}
	}

	public DORReport() throws Exception {
	  PCREApplicationClient client = null;
	  PCREEngine engine = null;
	  PCREJob job = null;
    try {
			client = new PCREApplicationClient("bryan");
	    client.Connect();
	    client.setRetrieveMode(false);
	    engine = client.OpenEngine();
	    job = engine.OpenJob("h:\\dordev\\bikedb.rpt");
      // set the output format
      job.OutputToPDF("h:\\dordev\\bikedb.pdf", null);

	    // Get the ResultSet containing the data from the
	    // BikeData ODBC system data source.
		  String sqlQuery = "SELECT * FROM BikeData";
		  Connection jdbcConnection = getJdbcConnection("BikeData", "", "");
		  Statement st = jdbcConnection.createStatement();
		  ResultSet rs = st.executeQuery(sqlQuery);

		  if (job.HasSavedData()) {
			  job.DiscardSavedData();
		  }
		  job.SetPrivateData(new com.mobileapps.dor.DORSQLResultSetAdapter(rs));

      System.out.println("Starting job");
      job.Start();

      System.out.println("Closing. . .");
      job.Close();
      engine.Close();
	    client.Quit();
      System.out.println("Finished");
   	}
   	catch(Exception e) {
 	    System.out.println("Error in DORReport: " + e);
      e.printStackTrace();
      if(job != null) job.Close();
      if(engine != null) engine.Close();
	    if(client != null) client.Quit();
	    throw e;
	 	}
	}

	private Connection getJdbcConnection(String db, String user,
	                                     String password) throws Exception {
		if (db == null || db == "")
			throw new Exception("Attempt to run database report without " +
			                    " setting name of database.");
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  	return DriverManager.getConnection("jdbc:odbc:" + db, user, password);
  }
}
