package dataWarehousingTools;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import dataWarehousingTools.MetadataConfiguration;
import dataWarehousingTools.MetadataConfigurationHelper;


public class DatabaseLogin 
{
	private Connection connection;
	private boolean stateConnected = false;
	private String databaseDriver;
	private String connectionString;
	private String userName;
	private String password;
	private String configurationName;
	private MetadataConfiguration metadataConfiguration;
	
	public DatabaseLogin(String metadataConfigurationFile) 
	{
        try 
        {
			metadataConfiguration = MetadataConfigurationHelper.read(metadataConfigurationFile);
		} 
        catch (Exception e1) 
        {
			e1.printStackTrace();
		}
        
        databaseDriver = new String(metadataConfiguration.getDatabaseDriver());
        connectionString = new String(metadataConfiguration.getConnectionString());
        userName  = new String(metadataConfiguration.getUserName());
        password = new String(metadataConfiguration.getPassword());
        configurationName = new String(metadataConfiguration.getConfigurationName());
		
		try
		{
			System.out.println("Trying to connect with driver class: " + databaseDriver);			
			Class.forName (databaseDriver); 
		}
		catch (ClassNotFoundException cnfe)
		{
			System.out.println
			(
				"Failed to load driver " + 
				databaseDriver +
				".  " + 
				cnfe.toString()
			);
		}

		
//		try 
//		{
//			connection = DriverManager.getConnection(connectionString);
//		} 
//		catch (SQLException e) 
//		{
//			System.out.println("Connection assuming user and password in the connection string (or not required) failed.  Trying with separate user and password."); 
//			System.out.println(e.toString());
//			try 
//			{
//				connection = DriverManager.getConnection
//				(
//					connectionString,
//					userName,
//					password
//				);
//			} 
//			catch (SQLException e1) 
//			{
//				System.out.println("Connection separate user and password failed."); 
//				System.out.println(e1.toString());
//			}
//		}	
		
		try	
		{
			if (databaseDriver.contains("microsoft.sqlserver"))
			{
				System.out.println("Microsoft SQL Server connection");
				connection = DriverManager.getConnection
				(
					connectionString
				);
			}
			else
			{
				System.out.println("Connection to a database other than Microsoft SQL Server");
				connection = DriverManager.getConnection
				(
					connectionString,
					userName,
					password
				);
			}
		}
		catch (SQLException sqle)
		{
			sqle.printStackTrace();
		}
		
		stateConnected = true;
	}
	
	public Connection getConnection()
	{
		return connection;
	}

	public boolean getStateConnected()
	{
		return stateConnected;
	}
	
	public void disconnect()
	{
		try 
		{
			connection.close();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		}
	}

	public String getConfigurationName() 
	{
		return configurationName;
	}

}