package dao.implementation.mysql.chauffeur;
import gui.MainWindow;
import gui.util.TaxiGuiUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import sun.swing.AccessibleMethod;
import modele.chauffeur.Chauffeur;
import modele.chauffeur.Contrat;
import modele.chauffeur.MotifFinContrat;
import modele.chauffeur.PeriodeDeTravail;
import modele.commun.Etat;
import dao.IDao;
import dao.IPeriodeDeTravailDao;
import dao.implementation.mysql.AccessMySql;
/**
* class MySqlPeriodeTravailDao impl�mente les m�thodes DAO insert(final
* PeriodeTravail periodeTravail) update(final PeriodeTravail periodeTravail)
* find(final int id) findAll() delete( final PeriodeTravail periodeTravail) *
* Cette classe permet l'acc�s avec la base de donn�es
*
* @author Kasandra
*
*/
public class MySqlPeriodeDeTravailDao implements IPeriodeDeTravailDao {
private static final String INSERT_PERIODE_TRAVAIL = "insert into TPeriodeTravail (description, idChauf, idCont, idMotifFinCont, dateDebut, dateFin, idEtat) values (?,?, ?,?, ?,?, ?)";
private static final String UPDATE_PERIODE_TRAVAIL = "update TPeriodeTravail set description = ?, idChauf = ?, idCont = ?, idMotifFinCont = ?, dateDebut = ?, dateFin = ?, idEtat = ? where idPeriodeTrav = ?";
private static final String DELETE_PERIODE_TRAVAIL = "delete from TPeriodeTravail where idPeriodeTrav = ?";
private static final String GET_ALL_PERIODE_TRAVAIL = "select idPeriodeTrav, description, tchauffeurs.idChauf, tchauffeurs.nomChauf, tcontrat.idCont, tcontrat.statutCont, tmotiffincontrat.idMotifFinCont,tmotiffincontrat.descripMotifFinCont, dateDebut, dateFin, tetat.idEtat, tetat.descripEtat from TPeriodeTravail, tcontrat, tmotiffincontrat, tchauffeurs, tetat where tperiodetravail.idChauf= tchauffeurs.idChauf and TPeriodeTravail.idCont= tcontrat.idCont and tmotiffincontrat.idMotifFinCont= tperiodetravail.idMotifFinCont and tperiodetravail.idEtat = tetat.idEtat";
private static final String GET_PERIODE_TRAVAIL_BY_ID = GET_ALL_PERIODE_TRAVAIL
+ " where idPeriodeTrav = ?";
private static final String GET_PERIODE_TRAVAIL_BY_CODE = GET_ALL_PERIODE_TRAVAIL
+ " where idPeriodeTrav = ?";
private static final String GET_PERIODE_TRAVAIL_BY_CHAUFFEUR = GET_ALL_PERIODE_TRAVAIL
+ " and tchauffeurs.idChauf = ?";
// cr�er une classe mysqlbasedao
public void delete(final PeriodeDeTravail periodeDeTravail) {
// �tablit la connexion avec la base de donn�es et la synchronise
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection
.prepareStatement(DELETE_PERIODE_TRAVAIL);
smt.setInt(1, periodeDeTravail.getId());
smt.executeUpdate();
} finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
}
public PeriodeDeTravail find(final int id) {
final PeriodeDeTravail[] result = new PeriodeDeTravail[1];
// �tablit la connexion avec la base de donn�es et la synchronise
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection
.prepareStatement(GET_PERIODE_TRAVAIL_BY_ID);
smt.setInt(1, id);
res = smt.executeQuery();
if (res.next()) {
result[0] = new PeriodeDeTravail(res.getInt(1));
result[0].setDescriptionPeriodeTravail(res
.getString(2));
Chauffeur chauffeur = new Chauffeur(res.getInt(3));
chauffeur.setNom(res.getString(4));
result[0].setChauffeur(chauffeur);
Contrat contrat = new Contrat(res.getInt(5));
contrat.setStatut(res.getString(6));
result[0].setContrat(contrat);
MotifFinContrat motifFinContrat = new MotifFinContrat(
res.getInt(7));
motifFinContrat.setLibelle(res.getString(8));
result[0].setMotifFinContrat(motifFinContrat);
Etat etat = new Etat(res.getInt(9));
etat.setDescrip(res.getString(10));
result[0].setEtat(etat);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return result[0];
}
public ArrayList<PeriodeDeTravail> findAll() {
final ArrayList<PeriodeDeTravail> listePeriodeDeTravail = new ArrayList<PeriodeDeTravail>();
// �tablit la connexion avec la base de donn�es et la synchronise
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection
.prepareStatement(GET_ALL_PERIODE_TRAVAIL);
res = smt.executeQuery();
while (res.next()) {
PeriodeDeTravail periodeDeTravail = new PeriodeDeTravail(
res.getInt(1));
periodeDeTravail.setDescriptionPeriodeTravail(res
.getString(2));
Chauffeur chauffeur = new Chauffeur(res.getInt(3));
chauffeur.setNom(res.getString(4));
periodeDeTravail.setChauffeur(chauffeur);
Contrat contrat = new Contrat(res.getInt(5));
contrat.setStatut(res.getString(6));
periodeDeTravail.setContrat(contrat);
MotifFinContrat motifFinContrat = new MotifFinContrat(
res.getInt(7));
motifFinContrat.setLibelle(res.getString(8));
periodeDeTravail
.setMotifFinContrat(motifFinContrat);
Date dateDeb = new Date(res.getDate(9).getTime());
periodeDeTravail.setDateDebut(dateDeb);
java.sql.Date sqlDateFin = res.getDate(10);
Date dateFin = sqlDateFin == null ? null : new Date(sqlDateFin.getTime());
periodeDeTravail.setDateFin(dateFin);
Etat etat = new Etat(res.getInt(11));
etat.setDescrip(res.getString(12));
periodeDeTravail.setEtat(etat);
listePeriodeDeTravail.add(periodeDeTravail);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return listePeriodeDeTravail;
}
@Override
public Collection<PeriodeDeTravail> findByChauffeur(final Chauffeur chauffeur) {
final ArrayList<PeriodeDeTravail> periodesDeTravail = new ArrayList<PeriodeDeTravail>();
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection
.prepareStatement(GET_PERIODE_TRAVAIL_BY_CHAUFFEUR);
smt.setInt(1, chauffeur.getId());
res = smt.executeQuery();
while (res.next()) {
PeriodeDeTravail periodeDeTravail = new PeriodeDeTravail(
res.getInt(1));
periodeDeTravail.setDescriptionPeriodeTravail(res
.getString(2));
Chauffeur chauffeur = new Chauffeur(res.getInt(3));
chauffeur.setNom(res.getString(4));
periodeDeTravail.setChauffeur(chauffeur);
Contrat contrat = new Contrat(res.getInt(5));
contrat.setStatut(res.getString(6));
periodeDeTravail.setContrat(contrat);
MotifFinContrat motifFinContrat = new MotifFinContrat(
res.getInt(7));
motifFinContrat.setLibelle(res.getString(8));
periodeDeTravail
.setMotifFinContrat(motifFinContrat);
Date dateDeb = new Date(res.getDate(9).getTime());
periodeDeTravail.setDateDebut(dateDeb);
java.sql.Date sqlDateFin = res.getDate(10);
final Date dateFin;
if (sqlDateFin != null) {
dateFin = new Date(sqlDateFin.getTime());
} else {
dateFin = null;
}
periodeDeTravail.setDateFin(dateFin);
Etat etat = new Etat(res.getInt(11));
etat.setDescrip(res.getString(12));
periodeDeTravail.setEtat(etat);
periodesDeTravail.add(periodeDeTravail);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return periodesDeTravail;
}
public PeriodeDeTravail insert(final PeriodeDeTravail periodeDeTravail) {
final PeriodeDeTravail[] result = new PeriodeDeTravail[1];
result[0] = null;
// �tablit la connexion avec la base de donn�es et la synchronise
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement psmt = null;
try {
psmt = connection
.prepareStatement(INSERT_PERIODE_TRAVAIL);
psmt.setString(1, periodeDeTravail
.getDescriptionPeriodeTravail());
psmt.setInt(2, periodeDeTravail.getChauffeur().getId());
psmt.setInt(3, periodeDeTravail.getContrat().getId());
psmt.setInt(4, periodeDeTravail.getMotifFinContrat()
.getId());
psmt.setDate(5, new java.sql.Date(periodeDeTravail
.getDateDebut().getTime()));
psmt.setDate(6, versSqlDateNullAuthoris�(periodeDeTravail.getDateFin()));
psmt.setInt(7, periodeDeTravail.getEtat().getCdeEtat());
psmt.executeUpdate();
} finally {
if (psmt != null) {
psmt.close();
}
}
Statement smt = null;
ResultSet res = null;
try {
smt = connection.createStatement();
res = smt
.executeQuery("select idPeriodeTrav, description, tchauffeurs.idChauf, tchauffeurs.nomChauf, tcontrat.idCont, tcontrat.statutCont, tmotiffincontrat.idMotifFinCont,tmotiffincontrat.descripMotifFinCont, dateDebut, dateFin, tetat.idEtat, tetat.descripEtat from TPeriodeTravail, tcontrat, tmotiffincontrat, tchauffeurs, tetat where tperiodetravail.idChauf= tchauffeurs.idChauf and TPeriodeTravail.idCont= tcontrat.idCont and tmotiffincontrat.idMotifFinCont= tperiodetravail.idMotifFinCont and tperiodetravail.idEtat = tetat.idEtat and idPeriodeTrav = LAST_INSERT_ID()");
if (res.next()) {
result[0] = new PeriodeDeTravail(res.getInt(1));
result[0].setDescriptionPeriodeTravail(res
.getString(2));
Chauffeur chauffeur = new Chauffeur(res.getInt(3));
chauffeur.setNom(res.getString(4));
result[0].setChauffeur(chauffeur);
Contrat contrat = new Contrat(res.getInt(5));
contrat.setStatut(res.getString(6));
result[0].setContrat(contrat);
MotifFinContrat motifFinContrat = new MotifFinContrat(
res.getInt(7));
motifFinContrat.setLibelle(res.getString(8));
result[0].setMotifFinContrat(motifFinContrat);
result[0].setDateDebut(res.getDate(9));
result[0].setDateFin(res.getDate(10));
Etat etat = new Etat(res.getInt(11));
etat.setDescrip(res.getString(12));
result[0].setEtat(etat);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return result[0];
}
private java.sql.Date versSqlDateNullAuthoris�(Date dateSource) {
final java.sql.Date sqlDate;
if (dateSource != null) {
sqlDate = new java.sql.Date(dateSource.getTime());
} else {
sqlDate = null;
}
return sqlDate;
}
public PeriodeDeTravail update(final PeriodeDeTravail periodeDeTravail) {
// �tablit la connexion avec la base de donn�es et la synchronise
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection
.prepareStatement(UPDATE_PERIODE_TRAVAIL);
smt.setString(1, periodeDeTravail
.getDescriptionPeriodeTravail());
smt.setInt(2, periodeDeTravail.getChauffeur().getId());
smt.setInt(3, periodeDeTravail.getContrat().getId());
smt.setInt(4, periodeDeTravail.getMotifFinContrat()
.getId());
smt.setDate(5, new java.sql.Date(periodeDeTravail
.getDateDebut().getTime()));
smt.setDate(6, versSqlDateNullAuthoris�(periodeDeTravail.getDateFin()));
smt.setInt(7, periodeDeTravail.getEtat().getCdeEtat());
smt.setInt(8, periodeDeTravail.getId());
smt.executeUpdate();
} finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return periodeDeTravail;
}
public PeriodeDeTravail findByCode(final String codePeriode) {
// �tablit la connexion avec la base de donn�es et la synchronise
final PeriodeDeTravail[] result = new PeriodeDeTravail[1];
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection
.prepareStatement(GET_PERIODE_TRAVAIL_BY_CODE);
smt.setString(1, codePeriode);
res = smt.executeQuery();
if (res.next()) {
result[0] = new PeriodeDeTravail(res.getInt(2));
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return result[0];
}
}