/**
 * 
 */
package com.bupa.bqpmonitor.applite.utils;

/**
 * @author dsouzaan
 *
 */
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.bupa.infra.registration.appservice.util.BupaUtil;
public class DBManager {
	
	/** Logger */
	private static final Log log = LogFactory.getLog(DBManager.class);

	// jdbc Connection
	private static Connection conn = null;
	
	private static String databaseName = "firstdb";
	private static String dbUserName = "scott";
	private static String dbPassword = "tiger";
 
// 	For Derby database
 	private static String driverName = "org.apache.derby.jdbc.ClientDriver";
 	private static String dbURL = "jdbc:derby://localhost:8080/" +databaseName + ";create=true;";

//	For MySQL database
	//private static String driverName = "com.mysql.jdbc.Driver";
	//private static String dbURL = "jdbc:mysql://localhost:3306/" + databaseName;

	//private static String dbUserName = "AOJBO03";
	//private static String dbPassword = "jboss";
	
//	For Oracle database
//	private static String driverName = "oracle.jdbc.driver.OracleDriver";
//	private static String dbURL = "jdbc:oracle:thin:@pc-p40150:1521:bupa"; 

	private volatile static DBManager dbManagerInstance;
	
	private DBManager() {
	}

	public static DBManager getInstance() {
		if (dbManagerInstance == null) {
			synchronized (DBManager.class) {
				if (dbManagerInstance == null) {
					dbManagerInstance = new DBManager();
				}
			}
		}
		return dbManagerInstance;
	}

	public String getDatabase() {
		if (dbURL.toLowerCase().indexOf("oracle") > -1) {
			return "ORACLE";
		} else if (dbURL.toLowerCase().indexOf("mysql") > -1) {
			return "MYSQL";
		}
		return "";
	}
	
	/**
	 * @return
	 * @throws DatabaseAccessException
	 */
	public Connection getConnection() throws SQLException {
		if (conn == null) {
			try {
				try {
					// Register the JDBC driver for MySQL.
					Class.forName(driverName).newInstance();
				} catch (ClassNotFoundException e) {
					BupaUtil.error(log, "ClassNotFoundException");
				} catch (InstantiationException e) {
					BupaUtil.error(log, "InstantiationException");
				} catch (IllegalAccessException e) {
					BupaUtil.error(log, "IllegalAccessException");
				}

				//conn = DriverManager.getConnection(dbURL, dbUserName, dbPassword);
				 conn =DriverManager.getConnection(dbURL);

			} catch (SQLException e) {
				BupaUtil.error(log,
						"Error fetching connection from connection pool--->"
								+ e.getMessage());
				throw e;
			}
		}
		return conn;
	}

	/**
	 * @param conn
	 */
	public void closeConnection() {
		try {
			if (conn != null) {
				conn.close();
			}
			conn = null;
		} catch (SQLException sqlExcept) {
			BupaUtil.error(log, "Error while closing the connection--->"
					+ sqlExcept.getMessage());
		}
	}
	

}
