package dao.implementation.mysql.voiture;
import modele.alerte.AlerteVoiture;
import modele.commun.Etat;
import modele.voiture.MarqueVoiture;
import modele.voiture.ModeleVoiture;
import modele.voiture.Voiture;
import dao.IVoitureDao;
import dao.implementation.mysql.AccessMySql;
import dao.implementation.mysql.alerte.MySqlAlerteVoitureDao;
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.Date;
/**
*
* <p> MySqlVoitureDao c'est une classe Dao qui impl�mente les m�thodes de l'interface IVoitureDao :</p>
* <ul>
* <li> public Voiture insert(final Voiture voiture) : insere une voiture; </p>
* <li> public Voiture update(final Voiture voiture) : met � jour un enregistrement de la voiture; </p>
* <li> public Voiture find(final int id): cherche la voiture par � partir de son id;
* <li> public ArrayList<Voiture> findAll(): charge depuis la base de donn�es et renvoie la liste de toutes les voitures; </li>
* <li> public void delete(final Voiture voiture) : supprime la voiture;
* <li> findByImmatriculation(String immatriculation): cherche une voiture par son immatriculation; (n'a pas �t� impl�menet�e) </li>
* </li>
* @author Kasandra
*/
public class MySqlVoitureDao implements IVoitureDao{
private static final String INSERT_VOITURE = "insert into tvoiture ( immatricVoit, numChassisVoit, dateAchatVoit, datePremImmatricVoit, numIdentifAggloVoit, numIdentifCentralTelVoit, kmVoit, indicatifKmFinCircuVoit, idMarqueVoit, idModVoit, idEtat) values (?,?,?, ?,?,?, ?,?,?,?,?)";
private static final String UPDATE_VOITURE = "update tvoiture set immatricVoit = ?, numChassisVoit = ?, dateAchatVoit = ?, datePremImmatricVoit = ?, numIdentifAggloVoit = ?, numIdentifCentralTelVoit = ?, kmVoit = ?, indicatifKmFinCircuVoit = ?, idMarqueVoit = ?, idModVoit = ?, idEtat = ? where idVoit = ?";
private static final String DELETE_VOITURE = "delete from tvoiture where idVoit = ?";
private static final String GET_ALL_VOITURE = "SELECT idVoit, immatricVoit, numChassisVoit, dateAchatVoit, datePremImmatricVoit, numIdentifAggloVoit, numIdentifCentralTelVoit, kmVoit, indicatifKmFinCircuVoit, tmarqueVoiture.idMarqueVoit, tmarqueVoiture.descripMarqueVoit, tmodeleVoiture.idModVoit, tmodeleVoiture.descripModVoit, TEtat.idEtat, TEtat.descripEtat FROM tvoiture, tmarqueVoiture, tmodelevoiture, TEtat WHERE tmarqueVoiture.idMarqueVoit = tvoiture.idMarqueVoit AND tmodeleVoiture.idModVoit = tvoiture.idModVoit AND tvoiture.idEtat = TEtat.idEtat";
private static final String GET_ALL_VOITURE_ACTIF = "SELECT idVoit, immatricVoit, numChassisVoit, dateAchatVoit, datePremImmatricVoit, numIdentifAggloVoit, numIdentifCentralTelVoit, kmVoit, indicatifKmFinCircuVoit, tmarqueVoiture.idMarqueVoit, tmarqueVoiture.descripMarqueVoit, tmodeleVoiture.idModVoit, tmodeleVoiture.descripModVoit, TEtat.idEtat, TEtat.descripEtat FROM tvoiture, tmarqueVoiture, tmodelevoiture, TEtat WHERE tmarqueVoiture.idMarqueVoit = tvoiture.idMarqueVoit AND tmodeleVoiture.idModVoit = tvoiture.idModVoit AND tvoiture.idEtat = TEtat.idEtat AND TEtat.descripEtat != 'inactif' ";
private static final String GET_VOITURE_BY_ID = GET_ALL_VOITURE + " and idVoit = ?";
public void delete(final Voiture voiture) {
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection.prepareStatement(DELETE_VOITURE);
smt.setInt(1, voiture.getId());
smt.executeUpdate();
} finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
}
public Voiture find(final int id) {
final Voiture[] result = new Voiture[1];
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection.prepareStatement(GET_VOITURE_BY_ID);
smt.setInt(1, id);
res = smt.executeQuery();
if (res.next()) {
result[0] = new Voiture(res.getInt(1));
result[0].setNumeroImmatriculation(res.getString(2));
result[0].setNumeroChassis(res.getString(3));
Date dateAchat = new Date(res.getDate(4).getTime());
result[0].setDateAchat(dateAchat);
Date datePremImmi = new Date(res.getDate(5).getTime());
result[0].setDatePremiereImmatriculation(datePremImmi);
result[0].setNumeroAgglomeration(Integer.parseInt(res.getString(6)));
result[0].setNumCentralTel(Integer.parseInt(res.getString(7)));
long kilometrage = Long.parseLong(res.getString(8));
result[0].setKilometrage(kilometrage);
result[0].setKilometrageFinCirculation(Long.parseLong(res.getString(9)));
MarqueVoiture marqueVoiture = new MarqueVoiture(res.getInt(10));
marqueVoiture.setLibelle(res.getString(11));
result[0].setMarque(marqueVoiture);
ModeleVoiture modeleVoiture = new ModeleVoiture(res.getInt(12));
modeleVoiture.setNomModele(res.getString(13));
result[0].setModele(modeleVoiture);
Etat etat = new Etat(res.getInt(14));
etat.setDescrip(res.getString(15));
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<Voiture> findAll() {
final ArrayList<Voiture> listeVoiture = new ArrayList<Voiture>();
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection.prepareStatement(GET_ALL_VOITURE);
res = smt.executeQuery();
while (res.next()) {
Voiture voiture = new Voiture(res.getInt(1));
voiture.setNumeroImmatriculation(res.getString(2));
voiture.setNumeroChassis(res.getString(3));
Date dateAchat = new Date(res.getDate(4).getTime());
voiture.setDateAchat(dateAchat);
Date datePremImmi = new Date(res.getDate(5).getTime());
voiture.setDatePremiereImmatriculation(datePremImmi);
voiture.setNumeroAgglomeration(res.getInt(6));
voiture.setNumCentralTel(res.getInt(7));
voiture.setKilometrage(res.getLong(8));
voiture.setKilometrageFinCirculation(res.getLong(9));
MarqueVoiture marqueVoiture = new MarqueVoiture(res.getInt(10));
marqueVoiture.setLibelle(res.getString(11));
voiture.setMarque(marqueVoiture);
ModeleVoiture ModeleVoiture = new ModeleVoiture(res.getInt(12));
ModeleVoiture.setNomModele(res.getString(13));
voiture.setModele(ModeleVoiture);
Etat etat = new Etat(res.getInt(14));
etat.setDescrip(res.getString(15));
voiture.setEtat(etat);
listeVoiture.add(voiture);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return listeVoiture;
}
public Voiture insert(final Voiture voiture) {
final Voiture[] result = new Voiture[1];
result[0] = null;
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement psmt = null;
try {
psmt = connection.prepareStatement(INSERT_VOITURE);
psmt.setString(1,voiture.getNumeroImmatriculation());
psmt.setString(2,voiture.getNumeroChassis());
psmt.setDate(3,new java.sql.Date(voiture.getDateAchat().getTime()));
psmt.setDate(4,new java.sql.Date(voiture.getDatePremiereImmatriculation().getTime()));
psmt.setInt(5, voiture.getNumuroAgglomeration());
psmt.setInt(6, voiture.getNumCentralTel());
psmt.setLong(7, voiture.getKilometrage());
psmt.setLong(8, voiture.getKilometrageFinCirculation());
psmt.setInt(9, voiture.getMarque().getId());
psmt.setInt(10, voiture.getModele().getId());
psmt.setInt(11, voiture.getEtat().getCdeEtat());
psmt.executeUpdate();
} finally {
if (psmt != null) {
psmt.close();
}
}
Statement smt = null;
ResultSet res = null;
try {
smt = connection.createStatement();
res = smt.executeQuery("select idVoit, immatricVoit, numChassisVoit, dateAchatVoit, datePremImmatricVoit, numIdentifAggloVoit, numIdentifCentralTelVoit, kmVoit, indicatifKmFinCircuVoit, tmarqueVoiture.idMarqueVoit, tmarqueVoiture.descripMarqueVoit, tmodeleVoiture.idModVoit,tmodeleVoiture.descripModVoit, TEtat.idEtat,TEtat.descripEtat from tvoiture, tmarquevoiture, tmodeleVoiture, TEtat where tmarqueVoiture.idMarqueVoit = tvoiture.idMarqueVoit and tmodeleVoiture.idModVoit = tvoiture.idModVoit and tvoiture.idEtat = TEtat.idEtat and idVoit = LAST_INSERT_ID()");
if (res.next()) {
result[0] = new Voiture(res.getInt(1));
result[0].setNumeroImmatriculation(res.getString(2));
result[0].setNumeroChassis(res.getString(3));
Date datePremImmi = new Date(res.getDate(4).getTime());
result[0].setDateAchat(datePremImmi);
Date dateAchat = new Date(res.getDate(5).getTime());
result[0].setDateAchat(dateAchat);
result[0].setNumeroAgglomeration(Integer.parseInt(res.getString(6)));
result[0].setNumCentralTel(Integer.parseInt(res.getString(7)));
result[0].setKilometrageFinCirculation(Long.parseLong(res.getString(8)));
result[0].setKilometrage(Long.parseLong(res.getString(9)));
MarqueVoiture marqueVoiture = new MarqueVoiture(res.getInt(10));
marqueVoiture.setLibelle(res.getString(11));
result[0].setMarque(marqueVoiture);
ModeleVoiture modeleVoiture = new ModeleVoiture(res.getInt(12));
modeleVoiture.setNomModele(res.getString(13));
result[0].setModele(modeleVoiture);
Etat etat = new Etat(res.getInt(14));
etat.setDescrip(res.getString(15));
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 Voiture update(final Voiture voiture) {
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection.prepareStatement(UPDATE_VOITURE);
smt.setString(1, voiture.getNumeroImmatriculation());
smt.setString(2, voiture.getNumeroChassis());
smt.setDate(3, new java.sql.Date(voiture.getDateAchat().getTime()));
smt.setDate(4, new java.sql.Date(voiture.getDatePremiereImmatriculation().getTime()));
smt.setInt(5, voiture.getNumuroAgglomeration());
smt.setInt(6, voiture.getNumCentralTel());
smt.setLong(7, voiture.getKilometrage());
smt.setLong(8, voiture.getKilometrageFinCirculation());
smt.setInt(9, voiture.getMarque().getId());
smt.setInt(10, voiture.getModele().getId());
smt.setInt(11, voiture.getEtat().getCdeEtat());
smt.setInt(12, voiture.getId());
smt.executeUpdate();
MySqlAlerteVoitureDao alerteVoitureDao = new MySqlAlerteVoitureDao();
for (AlerteVoiture alerte : voiture.getAlertes()) {
if (alerte.getId() == null) {
alerteVoitureDao.insert(alerte);
}
}
}
finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return voiture;
}
public Voiture findByImmatriculation(String immatriculation) {
return null;
}
@Override
public ArrayList<Voiture> findAllActif() {
final ArrayList<Voiture> listeVoiture = new ArrayList<Voiture>();
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection.prepareStatement(GET_ALL_VOITURE_ACTIF);
res = smt.executeQuery();
while (res.next()) {
Voiture voiture = new Voiture(res.getInt(1));
voiture.setNumeroImmatriculation(res.getString(2));
voiture.setNumeroChassis(res.getString(3));
Date dateAchat = new Date(res.getDate(4).getTime());
voiture.setDateAchat(dateAchat);
Date datePremImmi = new Date(res.getDate(5).getTime());
voiture.setDatePremiereImmatriculation(datePremImmi);
voiture.setNumeroAgglomeration(res.getInt(6));
voiture.setNumCentralTel(res.getInt(7));
voiture.setKilometrage(res.getLong(8));
voiture.setKilometrageFinCirculation(res.getLong(9));
MarqueVoiture marqueVoiture = new MarqueVoiture(res.getInt(10));
marqueVoiture.setLibelle(res.getString(11));
voiture.setMarque(marqueVoiture);
ModeleVoiture ModeleVoiture = new ModeleVoiture(res.getInt(12));
ModeleVoiture.setNomModele(res.getString(13));
voiture.setModele(ModeleVoiture);
Etat etat = new Etat(res.getInt(14));
etat.setDescrip(res.getString(15));
voiture.setEtat(etat);
listeVoiture.add(voiture);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return listeVoiture;
}
}