Raw File
MarkovBlanket.java
/*
 * Author: Kurt Routley
 * Date: September 23, 2013
 * 
 * MarkovBlanket.java
 *  	- Adds TargetChildren, TargetParents, TargetChildrensParents, and 
 *  	  TargetMB to @database@_BN
 */

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.Connection;;

public class MarkovBlanket {

	static Connection con1;

	//  to be read from config.cfg.
	// The config.cfg file should  be the working directory.
	static String databaseName, databaseName0;
	static String dbUsername;
	static String dbPassword;
	static String dbaddress;
	
	public static void main(String[] args) throws Exception
	{
		/*
		 *  Create Markov Blankets
		 */
		runMakeMarkovBlanket();
	}
	
	public static void runMakeMarkovBlanket() throws Exception
	{
		long t1 = System.currentTimeMillis(); 
		System.out.println( "Constructing Markov Blanket..." );
		
		setVarsFromConfig();
		connectDB();
		
		/*
		 * Get the largest Rchain
		 */
		String rchain = getLargestRchain();
		
		if ( null == rchain )
		{
			System.out.println( "Failed to get largest rchain." );
			disconnectDB();
			return;
		}
		
		BZScriptRunner bzsr = new BZScriptRunner( databaseName, con1, rchain );  // unielwin_BN
		bzsr.runScript(Config.SCRIPTS_DIRECTORY + "markov_blanket.sql");
        
		disconnectDB();

		long t2 = System.currentTimeMillis();
		System.out.println( "Markov Blanket construction run time is: " + 
							( t2 - t1 ) + "ms. \n ******************************** \n\n" );
	}
	
	public static void runMakeMarkovBlanket( String rchain ) throws Exception
	{
		long t1 = System.currentTimeMillis(); 
		System.out.println( "Constructing Markov Blanket..." );
		
		if ( null == rchain )
		{
			System.out.println( "No rchain supplied." );
			return;
		}
		
		setVarsFromConfig();
		connectDB();
		
		BZScriptRunner bzsr = new BZScriptRunner( databaseName, con1, rchain );
		bzsr.runScript(Config.SCRIPTS_DIRECTORY + "markov_blanket.sql");
        
		disconnectDB();

		long t2 = System.currentTimeMillis();
		System.out.println( "Markov Blanket construction runtime is: " + 
							( t2 - t1 ) + "ms." );
	}
	
	public static void setVarsFromConfig()
	{
		Config conf = new Config();
		databaseName = conf.getProperty("dbname");
		System.out.println("databasename :"+ databaseName);
		databaseName0 = databaseName + "_BN";
		dbUsername = conf.getProperty("dbusername");
		dbPassword = conf.getProperty("dbpassword");
		dbaddress = conf.getProperty("dbaddress");
	}

	public static void connectDB() throws SQLException {
		//open database connections to the original database, the setup 
		//database, the bayes net database, and the contingency table database

		String CONN_STR1 = "jdbc:" + dbaddress + "/" + databaseName;
		//System.out.println("dbaddress :"+ CONN_STR1 + "\ndbUsernam: " + dbUsername);
		try {
			java.lang.Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception ex) {
			System.err.println("Unable to load MySQL JDBC driver");
		}		

		con1 = (Connection) DriverManager.getConnection( CONN_STR1, dbUsername,	 dbPassword );
		
		
		//System.out.println("dbaddress :"+ CONN_STR1 + "\ndbUsernam: " + dbUsername);
	}
	
	public static void disconnectDB() throws SQLException 
	{
		con1.close();
	}
	
	/*
	 * Check @database@_BN.lattice_set to get the largest rchain
	 * This rchain will be used for creating the Markov Blanket
	 */
	private static String getLargestRchain()
	{
		String largestRchain = "";
		try
		{
			Statement st = con1.createStatement();
			
			ResultSet rs = st.executeQuery( "SELECT name FROM " + databaseName0 + 
											".lattice_set ORDER BY length " + 
											"DESC LIMIT 1;" );
			
			if ( !rs.first() )
			{
				System.out.println( "No largest rchain" );
				return null;
			}
			
			largestRchain = rs.getString( 1 );
			
			st.close();
		}
		catch ( SQLException e )
		{
			System.out.println( "SQL failure." );
			e.printStackTrace();
			return null;
		}
		
		return largestRchain;
	}
}
back to top