package dao;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import business.Utilisateur;
public class DaoAmitie {
/* ------------------------------------------------ REQUETES PRECOMPILEES */
private static CallableStatement statementGetAmis = null;
private static CallableStatement statementGetDemandesAmiFaites = null;
private static CallableStatement statementGetDemandesAmiRecues = null;
private static CallableStatement statementDemanderAmi = null;
private static CallableStatement statementAccepterAmi = null;
private static CallableStatement statementRefuserAmi = null;
private static CallableStatement statementSupprimerAmi = null;
/* --------------------------------------------------------- CONSTRUCTEUR */
static {
try {
statementGetAmis = DbConnection.getInstance().prepareCall("{call getAmis(?)}");
statementGetDemandesAmiFaites = DbConnection.getInstance().prepareCall("{call getDemandesAmiFaites(?)}");
statementGetDemandesAmiRecues = DbConnection.getInstance().prepareCall("{call getDemandesAmiRecues(?)}");
statementDemanderAmi = DbConnection.getInstance().prepareCall("{call demanderAmi(?, ?)}");
statementAccepterAmi = DbConnection.getInstance().prepareCall("{call accepterAmi(?, ?)}");
statementRefuserAmi = DbConnection.getInstance().prepareCall("{call refuserAmi(?, ?)}");
statementSupprimerAmi = DbConnection.getInstance().prepareCall("{call supprimerAmi(?, ?)}");
}
catch (SQLException e) {
e.printStackTrace();
}
}
/* -------------------------------------------------------------- METHODE */
public static List<Utilisateur> getAmis(int id_utilisateur) {
List<Utilisateur> amis = null;
try {
ResultSet rs = null;
synchronized(statementGetAmis) {
statementGetAmis.setInt(1, id_utilisateur);
rs = statementGetAmis.executeQuery();
}
if(rs != null) {
amis = new ArrayList<Utilisateur>();
while(rs.next()) {
double ratio = rs.getInt("nbParisTotal") > 0 ? ((double) rs.getInt("nbParisJustes")) / rs.getInt("nbParisTotal") : 0.0;
amis.add(new Utilisateur(
rs.getInt("id_utilisateur"),
rs.getString("mail"),
rs.getString("pseudo"),
null, // motDePasse
rs.getInt("points"),
rs.getInt("score"),
rs.getInt("nbParisJustes"),
rs.getInt("nbParisTotal"),
ratio));
}
}
}
catch(SQLException e) {
e.printStackTrace();
}
return amis;
}
public static List<Utilisateur> getDemandesAmiFaites(int id_utilisateur) {
List<Utilisateur> amis = null;
try {
ResultSet rs = null;
synchronized(statementGetDemandesAmiFaites) {
statementGetDemandesAmiFaites.setInt(1, id_utilisateur);
rs = statementGetDemandesAmiFaites.executeQuery();
}
if(rs != null) {
amis = new ArrayList<Utilisateur>();
while(rs.next()) {
double ratio = rs.getInt("nbParisTotal") > 0 ? ((double) rs.getInt("nbParisJustes")) / rs.getInt("nbParisTotal") : 0.0;
amis.add(new Utilisateur(
rs.getInt("id_utilisateur"),
rs.getString("mail"),
rs.getString("pseudo"),
null, // motDePasse
rs.getInt("points"),
rs.getInt("score"),
rs.getInt("nbParisJustes"),
rs.getInt("nbParisTotal"),
ratio));
}
}
}
catch(SQLException e) {
e.printStackTrace();
}
return amis;
}
public static List<Utilisateur> getDemandesAmiRecues(int id_utilisateur) {
List<Utilisateur> amis = null;
try {
ResultSet rs = null;
synchronized(statementGetDemandesAmiRecues) {
statementGetDemandesAmiRecues.setInt(1, id_utilisateur);
rs = statementGetDemandesAmiRecues.executeQuery();
}
if(rs != null) {
amis = new ArrayList<Utilisateur>();
while(rs.next()) {
double ratio = rs.getInt("nbParisTotal") > 0 ? ((double) rs.getInt("nbParisJustes")) / rs.getInt("nbParisTotal") : 0.0;
amis.add(new Utilisateur(
rs.getInt("id_utilisateur"),
rs.getString("mail"),
rs.getString("pseudo"),
null, // motDePasse
rs.getInt("points"),
rs.getInt("score"),
rs.getInt("nbParisJustes"),
rs.getInt("nbParisTotal"),
ratio));
}
}
}
catch(SQLException e) {
e.printStackTrace();
}
return amis;
}
/* -------------------------------------------------------------- METHODE */
public static boolean demanderAmi(int id_demandeur, int id_cible) {
try {
synchronized(statementDemanderAmi) {
statementDemanderAmi.setInt(1, id_demandeur);
statementDemanderAmi.setInt(2, id_cible);
statementDemanderAmi.execute();
}
}
catch(SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean accepterAmi(int id_cible, int id_demandeur) {
try {
synchronized(statementAccepterAmi) {
statementAccepterAmi.setInt(1, id_cible);
statementAccepterAmi.setInt(2, id_demandeur);
statementAccepterAmi.execute();
}
}
catch(SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean refuserAmi(int id_cible, int id_demandeur) {
try {
synchronized(statementRefuserAmi) {
statementRefuserAmi.setInt(1, id_cible);
statementRefuserAmi.setInt(2, id_demandeur);
statementRefuserAmi.execute();
}
}
catch(SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean supprimerAmi(int id_demandeur, int id_cible) {
try {
synchronized(statementSupprimerAmi) {
statementSupprimerAmi.setInt(1, id_demandeur);
statementSupprimerAmi.setInt(2, id_cible);
statementSupprimerAmi.execute();
}
}
catch(SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
}