package db;

import java.sql.SQLException;
import javax.sql.DataSource;
import oracle.jdbc.pool.OracleDataSource;

//import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

public class MyDataSourceFactory 
{

	private static MyDataSourceFactory mdsf; // Singleton de la classe
	private static DataSource dataSource;	// Singleton du DataSource

	private MyDataSourceFactory() 
	{
		
	}

	/**
	 *  Gestion du singleton
	 *  @param : 
	 *  @return : MyDataSourceFactory
	 */
	public static MyDataSourceFactory getInstance() 
	{
		if (null == mdsf) 
		{
			mdsf = new MyDataSourceFactory();
		}
		return mdsf;
	}

	/**
	 *  Recuperation du DataSource
	 *  On ne gere pas de pool de connexions ici donc la connexion reste unique
	 *  @param : type du sgbd "oracle" ou "MySLQ"
	 *  @return : DataSource
	 */	
	public static DataSource getDataSource(String dbType) 
	{
		if (dataSource != null)
			return dataSource;
		/*if ("mysql".equals(dbType)) 
		 * {
			dataSource = getMySQLDataSource();
		}
		*/ else if ("oracle".equals(dbType)) 
		{
			dataSource = getOracleDataSource();
		} 
		else 
		{
			System.out.println("Invalid db type");
			return null;
		}
		return dataSource;
	}

	/**
	 *  DataSouce pour MySQL
	 *  Penser a introduire la librairie mysql-connector-java
	 *  @param : 
	 *  @return : DataSource
	 */
	/*private static DataSource getMySQLDataSource() {
		MysqlDataSource mysqlDS = new MysqlDataSource();
		mysqlDS.setURL("jdbc:mysql://localhost:3306/cinema"));
		mysqlDS.setUser("cinema");
		mysqlDS.setPassword("cinema"));
		return mysqlDS;
	}*/

	/**
	 *  DataSouce pour Oracle
	 *  Penser a introduire la librairie ojdbc6 ou 7 (pour Oracle 11 ou 12)
	 *  @param : 
	 *  @return : DataSource
	 */
	private static DataSource getOracleDataSource() 
	{
		try 
		{
			OracleDataSource oracleDS = new OracleDataSource();
			oracleDS.setURL("jdbc:oracle:thin:@localhost:1521:xe");
			oracleDS.setUser("system");
			oracleDS.setPassword("system");
			return oracleDS;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			return null;
		}
	}
}