package database.tools;

import java.io.*;
import java.sql.*;
import java.util.*;

/*****************************************************************************
 * nom de l'objet: DbConnection
 * 
 * Objet destiné à gestion des la connexion à base des donées à partir d'un 
 * de configuration ayant les informations du url du serveur, driver, user et 
 * du mot de passe. Le constructeur definit le niveau d'isolation à serializa-
 * ble.
 * 
 * Projet: Hotel Orford
 *****************************************************************************
 *modification
 *nom date     
 *****************************************************************************/

/**
 * @author Alfredo Toyo
 * Objet destiné à gestion des la connexion à base des donées à partir d'un 
 * de configuration ayant les informations du url du serveur, driver, user et 
 * du mot de passer et definit le niveau d'isolation à TRANSACTION_SERIALIZABLE.
 */
public class DbConnection {
    protected static Connection connection;
 
	/**
	 * Setting d'un objet Connection à partir du fichier de configuration 
	 * ayant les accès à la base des données avec le mode d'isolation 
	 * TRANSACTION_SERIALIZABLE
	 * @return Connection
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * @throws SQLException 
	 */
	public static Connection createConnection() throws IOException, ClassNotFoundException, SQLException {
		/* Initialisation des variables d'environnement */
		String url = null;
		String driver = null;
		String username = null;
		String password = null;

		/*Lecture du fichier db.properties et obtention des valeurs de ses champs*/
		try(FileReader reader = new FileReader("db.properties")) {
			Properties properties = new Properties();
			properties.load(reader);
			url = properties.getProperty("db.url");
			driver = properties.getProperty("db.driver");
			username = properties.getProperty("db.username");
			password = properties.getProperty("db.password");
		}
		catch (Exception e) {
			e.printStackTrace();
		}

		try 
		{
			/* Instantiation du driver de la base de données */
			Class.forName(driver).newInstance();
			/* La connection avec username et password */
			connection = DriverManager.getConnection(url, username, password);
		} 
		catch (Exception e) 
		{
			System.err
					.println("Error in createConnection() " + e.getMessage());
			System.err.println("url = " + url + " username = " + username
					+ " password = " + password);
		}
		
    	/*Définition du mode d'isolation*/    	
    	connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
		
		return connection;
	}
}