/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import model.Epreuve;
/**
* Objet DAO (Data Acces Objet) en charge de retrouver dans la base de données
* les données correspondant à une épreuve.
* @author Linda
*/
public class EpreuveDAO extends AbstractDataBaseDao implements IEpreuveDAO {
/**
* Récupère les données issue de la BD pour les épreuves individuelles et
* par équipe pour une discipline donnée.
* Le nom de l'épreuve nomEp, son genre (catégorie) et son identifiant IdEp
* sont les résulats des requêtes classés par genre et nomEp.
*/
private static final String reqEpreuveIndPourDisc =
"select nomEp , genre, IdEp from EpreuveInd where nomDisc ='%s' ORDER BY GENRE, NOMEP";
private static final String reqEpreuveEqPourDisc =
"select nomEp , genre, IdEp from EpreuveEq where nomDisc ='%s' ORDER BY GENRE, NOMEP";
/**
* Récupère les données issue de la BD pour les épreuves (individuelles et
* par équipe pour une discipline donnée) pour lesquelles des billets sont
* disponibles. Ces épreuves n'ont pas eu lieu et présentent des champs NULL
* pour les sportifs médaillés (gold, silver, bronze).
* Le nom de l'épreuve nomEp, son genre (catégorie) et son identifiant IdEp
* sont les résulats des requêtes classés par genre et nomEp.
*/
private static final String reqEpreuveIndPourDiscBillet =
"select nomEp, genre, IdEp from EpreuveInd where nomDisc ='%s' and gold is null ORDER BY GENRE, NOMEP";
private static final String reqEpreuveEqPourDiscBillet =
"select nomEp, genre, IdEp from EpreuveEq where nomDisc ='%s' and gold is null ORDER BY GENRE, NOMEP";
/**
* Noms des critères de recherche
*/
private static final String nom = "nomEp";
private static final String genre = "genre";
private static final String type = "type";
private static Map<DataSource, EpreuveDAO> daoInstances =
new HashMap<DataSource, EpreuveDAO>();
public synchronized static EpreuveDAO getInstance(DataSource ds) {
EpreuveDAO inst = daoInstances.get(ds);
if (inst == null) {
inst = new EpreuveDAO(ds);
daoInstances.put(ds, inst);
}
return inst;
}
public EpreuveDAO(DataSource ds) {
super(ds);
}
/**
* Permet d'obtenir la liste des épreuves individuelles pour une discipline donnée.
* @param nomD: nom de la discipline
* @return epreuves: liste des épreuves individuelles pour cette discipline
* @throws DAOException
*/
public List<Epreuve> getEpreuvesInd(String nomD) throws DAOException {
String req = String.format(reqEpreuveIndPourDisc, nomD);
Connection conn = null;
Statement stmt = null;
ResultSet result = null;
List<Epreuve> epreuves = new ArrayList<Epreuve>();
try {
synchronized (dataSource) {
conn = dataSource.getConnection();
}
stmt = conn.createStatement();
System.out.println(req);
result = stmt.executeQuery(req);
while (result.next()) {
epreuves.add(new Epreuve(result.getInt(3), nomD, result.getString(1), result.getString(2), "Indiv."));
}
result.close();
stmt.close();
return epreuves;
} catch (SQLException ex) {
throw new DAOException("problème récupération liste des épreuves", ex);
} finally {
closeConnection(conn);
}
}
/**
* Permet d'obtenir la liste des épreuves par équipe pour une discipline donnée.
* @param nomD: nom de la discipline
* @return epreuves: liste des épreuves par équipe pour cette discipline
* @throws DAOException
*/
public List<Epreuve> getEpreuvesEq(String nomD) throws DAOException {
String req = String.format(reqEpreuveEqPourDisc, nomD);
Connection conn = null;
Statement stmt = null;
ResultSet result = null;
List<Epreuve> epreuves = new ArrayList<Epreuve>();
try {
synchronized (dataSource) {
conn = dataSource.getConnection();
}
stmt = conn.createStatement();
System.out.println(req);
result = stmt.executeQuery(req);
while (result.next()) {
epreuves.add(new Epreuve(result.getInt(3), nomD, result.getString(1), result.getString(2), "Par équipe"));
}
result.close();
stmt.close();
return epreuves;
} catch (SQLException ex) {
throw new DAOException("problème récupération liste des épreuves", ex);
} finally {
closeConnection(conn);
}
}
public List<Epreuve> getEpreuvesIndBillet(String nomD) throws DAOException {
String req = String.format(reqEpreuveIndPourDiscBillet, nomD);
Connection conn = null;
Statement stmt = null;
List<Epreuve> epreuves = new ArrayList<Epreuve>();
try {
synchronized (dataSource) {
conn = dataSource.getConnection();
}
stmt = conn.createStatement();
System.out.println(req);
ResultSet result = stmt.executeQuery(req);
while (result.next()) {
epreuves.add(new Epreuve(result.getInt(3), nomD, result.getString(1), result.getString(2), "Individuelle"));
}
result.close();
stmt.close();
return epreuves;
} catch (SQLException ex) {
throw new DAOException("problème récupération liste des épreuves", ex);
} finally {
closeConnection(conn);
}
}
public List<Epreuve> getEpreuvesEqBillet(String nomD) throws DAOException {
String req = String.format(reqEpreuveEqPourDiscBillet, nomD);
Connection conn = null;
Statement stmt = null;
ResultSet result = null;
List<Epreuve> epreuves = new ArrayList<Epreuve>();
try {
synchronized (dataSource) {
conn = dataSource.getConnection();
}
stmt = conn.createStatement();
System.out.println(req);
result = stmt.executeQuery(req);
while (result.next()) {
epreuves.add(new Epreuve(result.getInt(3), nomD, result.getString(1), result.getString(2), "Par équipe"));
}
result.close();
stmt.close();
return epreuves;
} catch (SQLException ex) {
throw new DAOException("problème récupération liste des épreuves", ex);
} finally {
closeConnection(conn);
}
}
public Epreuve getEpreuve(String nom) throws DAOException {
throw new UnsupportedOperationException("Not supported yet.");
}
public Epreuve getEpreuve(int id) throws DAOException {
throw new UnsupportedOperationException("Not supported yet.");
}
private Epreuve loadEpreuveIND(ResultSet rs) throws SQLException {
int id = rs.getInt(1);
String nomD = rs.getString(6);
String nom = rs.getString(2);
String genre = rs.getString(7);
//String description = rs.getString(6);
// if (categorie == CategoriesProduit.FORMATION) {
// return new Formation(id, categorie,codeMarque, description, prixUHT, tauxTVA);
// } else {
return new Epreuve(id, nomD, nom, genre, "Individuelle" );
//}
}
private Epreuve loadEpreuveEQ(ResultSet rs) throws SQLException {
int id = rs.getInt(1);
String nomD = rs.getString(6);
String nom = rs.getString(2);
String genre = rs.getString(7);
//String description = rs.getString(6);
// if (categorie == CategoriesProduit.FORMATION) {
// return new Formation(id, categorie,codeMarque, description, prixUHT, tauxTVA);
// } else {
return new Epreuve(id, nomD, nom, genre, "Par équipe" );
//}
}
@Override
public Epreuve getEpreuveInd(int id) throws DAOException {
Connection conn = null;
try {
conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM EPREUVEIND WHERE IDEP =" + id);
if (result.next()) {
return loadEpreuveIND(result);
}
// il n'y a pas de produit pour cet ID
return null;
} catch (SQLException e) {
throw new DAOException("L'epreuve " + id + " n'a pu être lu ", e);
} finally {
closeConnection(conn);
}
}
@Override
public Epreuve getEpreuveEQ(int id) throws DAOException {
Connection conn = null;
try {
conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet result = stmt.executeQuery("SELECT * FROM EPREUVEEQ WHERE IDEP =" + id);
if (result.next()) {
return loadEpreuveEQ(result);
}
// il n'y a pas de produit pour cet ID
return null;
} catch (SQLException e) {
throw new DAOException("L'epreuve " + id + " n'a pu être lu ", e);
} finally {
closeConnection(conn);
}
}
}