import java.sql.*;

public class MyConnector {

    // champs nĂ©cessaires Ă  la connexion

	// url de connexion Ă  la base
    private static String url= null;

	// dĂ©tails
    private static final String DEFAULT_DRIVER = "jdbc:oracle:thin:";
    private static final String EISTI_SERVER = "area.etude.cergy.eisti.fr";
    private static final String LOCAL_SERVER = "localhost";
    private static final int DEFAULT_PORT = 1521;
    private static final String EISTI_BDD = "BDDETU";
    private static final String LOCAL_BDD = "XE";

    // classe du pilote qui gĂ¨re la connexion Oracle
    private static final String ORACLE_DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver";
    private static String driverClass = null;

    // login et mot de passe sur le serveur de BDD
    private static String login= null;
    private static String passwd= null;

    // champs assurant l'unicitĂ© de la connexion et du chargement du driver
    private static Connection refUniqueConnection = null;
    private static boolean isDriverRegistered = false;

	/**
 	 * ParamĂ¨tre le connecteur avec un login et un mot de passe
 	 * permettant d'accĂ©der au serveur Oracle local.
 	 * A faire une fois dans l'application.
 	 */ 	
	public static void setParametersOracleLocal(String pLogin, String pPasswd) {
		setParameters(DEFAULT_DRIVER, LOCAL_SERVER, DEFAULT_PORT, LOCAL_BDD,
            ORACLE_DRIVER_CLASS, pLogin, pPasswd);
	}

	/**
 	 * ParamĂ¨tre le connecteur avec un login et un mot de passe
 	 * permettant d'accĂ©der au serveur Oracle de l'Ă©cole.
 	 * A faire une fois dans l'application.
 	 */ 	
	public static void setParametersOracleEisti(String pLogin, String pPasswd) {
		setParameters(DEFAULT_DRIVER, EISTI_SERVER, DEFAULT_PORT, EISTI_BDD,
            ORACLE_DRIVER_CLASS, pLogin, pPasswd);
	}

	/**
 	 * ParamĂ¨tre le connecteur Oracle avec un login et un mot de passe
 	 * permettant d'accĂ©der au serveur Oracle.
 	 * A faire une fois dans l'application.
 	 */ 	
	public static void setParameters(String pDriver, String pServer, int pPort,
			String pBddname, String pDriverClass, String pLogin, String pPasswd) {
		url = pDriver + "@" + pServer + ":" + pPort + ":" + pBddname;
        driverClass = pDriverClass;
		login = pLogin;
		passwd = pPasswd;
	}

    /**
 	* renvoie une connexion unique vers une base de donnĂ©e.
 	*/
    public static Connection getConnection(){
		//on regarde si la connexion existe dĂ©jĂ 
		if(refUniqueConnection == null){
		    try{
		        // chargement du driver de la BDD si besoin
	        	if (!isDriverRegistered) {
        			// chargement du driver
        		    DriverManager.registerDriver((Driver) (Class.forName(driverClass).newInstance()));
        		    isDriverRegistered = true;
	        	}
        		// crĂ©ation de la connection
		        refUniqueConnection = DriverManager.getConnection(url,login,passwd);
		    } catch (Exception e) {
				// on renvoie une connection nulle en cas d'erreurs de connexion
				System.err.println("Erreur de connexion Ă  la base : "
					+e.getMessage());
                refUniqueConnection = null;
		    }
		}
		//on renvoie la connexion
		return refUniqueConnection;
	}

	/**
 	 * ferme la connexion en cours.
 	 */
    public static void closeConnection() {
		try{
			// fermeture de la connexion
		    refUniqueConnection.close();
			// suppression de la rĂ©fĂ©rence vers la connexion close
		    refUniqueConnection = null;
		}catch (SQLException e) {
			// TODO : comportement modifiable
			// on quitte l'application en cas d'erreur
			System.err.println("Erreur de fermeture d'accĂ¨s Ă  la base : "
				+ e.getMessage());
		    // e.printStackTrace();
		    // System.exit(1);
		}
    }

}
