package com.eisti.jdbc.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 DataSouce
	 *  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("cinema");
			oracleDS.setPassword("cinema");
			return oracleDS;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
}
