package dao.implementation.mysql.voiture;
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;
import dao.IDao;
import dao.implementation.mysql.AccessMySql;
import modele.commun.TypeUnite;
import modele.voiture.FicheEntretien;
import modele.voiture.TypeEntretien;
import modele.voiture.Voiture;
/**
* Class MySqlFicheEntretien
* @author Kasandra
*
*/
public class MySqlFicheEntretien implements IDao<FicheEntretien>{
private static final String INSERT_FICHE_ENTRETIEN = "insert into tficheentretienvoiture (idVoit, descriptionEntret, dateDernierEntret, dateProchainEntret, idTypeEntret, kmDernierVoitEntret, kmProchainVoitEntret, kmPrevenirAvantEntret, coutEntret, nombreUniteEntret, idTypeUnite) values (?,?, ?,?, ?,?, ?,?, ?, ?,?)";
private static final String UPDATE_FICHE_ENTRETIEN = "update tficheentretienvoiture set idVoit = ?, descriptionEntret = ?, dateDernierEntret = ?, dateProchainEntret = ?, idTypeEntret = ?, kmDernierVoitEntret = ?, kmProchainVoitEntret = ?, kmPrevenirAvantEntret = ?, coutEntret = ?, nombreUniteEntret = ?, idTypeUnite = ? where idFicheEntret = ?";
private static final String DELETE_FICHE_ENTRETIEN = "delete from tficheentretienvoiture where idFicheEntret = ?";
private static final String GET_ALL_FICHE_ENTRETIEN = "SELECT idFicheEntret, tvoiture.idVoit, tvoiture.numIdentifAggloVoit, descriptionEntret, dateDernierEntret, dateProchainEntret, ttypeentretien.idTypeEntret, ttypeentretien.descripTypeEntret, kmDernierVoitEntret, kmProchainVoitEntret, kmPrevenirAvantEntret, coutEntret, nombreUniteEntret, ttypeunite.idTypeUnite, ttypeunite.descripTypeUnite FROM tficheentretienvoiture, tvoiture, ttypeentretien, ttypeunite WHERE tficheentretienvoiture.idVoit = tvoiture.idVoit AND tficheentretienvoiture.idTypeEntret = ttypeentretien.idTypeEntret AND tficheentretienvoiture.idTypeUnite = ttypeunite.idTypeUnite";
private static final String GET_FICHE_ENTRETIEN_BY_ID = GET_ALL_FICHE_ENTRETIEN + " where idFicheEntret = ?";
public void delete(final FicheEntretien ficheEntretien) {
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection.prepareStatement(DELETE_FICHE_ENTRETIEN);
smt.setInt(1, ficheEntretien.getId());
smt.executeUpdate();
} finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
}
public FicheEntretien find(final int id) {
final FicheEntretien[] result = new FicheEntretien[1];
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection.prepareStatement(GET_FICHE_ENTRETIEN_BY_ID);
smt.setInt(1, id);
res = smt.executeQuery();
if (res.next()) {
result[0] = new FicheEntretien(res.getInt(1));
Voiture voiture = new Voiture(res.getInt(2));
voiture.setNumeroAgglomeration(res.getInt(3));
result[0].setVoiture(voiture);
TypeEntretien typeEntretien = new TypeEntretien(res.getInt(2));
typeEntretien.setLibelle(res.getString(3));
result[0].setTypeEntretien(typeEntretien);
TypeUnite typeUnite = new TypeUnite(res.getInt(2));
typeUnite.setLibelle(res.getString(3));
result[0].setTypeUnite(typeUnite);
}
} 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<FicheEntretien> findAll() {
final ArrayList<FicheEntretien> listeFicheEntretien = new ArrayList<FicheEntretien>();
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
ResultSet res = null;
try {
smt = connection.prepareStatement(GET_ALL_FICHE_ENTRETIEN);
res = smt.executeQuery();
while (res.next()) {
FicheEntretien ficheEntretien = new FicheEntretien(res.getInt(1));
Voiture voiture = new Voiture(res.getInt(2));
voiture.setNumeroAgglomeration(res.getInt(3));
ficheEntretien.setVoiture(voiture);
ficheEntretien.setLibelle(res.getString(4));
Date dateDernierEntret = new Date(res.getDate(5).getTime());
ficheEntretien.setDateDernierEntretien(dateDernierEntret);
Date dateProchainEntret = new Date(res.getDate(6).getTime());
ficheEntretien.setDateProchaineEntretien(dateProchainEntret);
TypeEntretien typeEntretien = new TypeEntretien(res.getInt(7));
typeEntretien.setLibelle(res.getString(8));
ficheEntretien.setTypeEntretien(typeEntretien);
ficheEntretien.setKmDernierEntretien(res.getLong(9));
ficheEntretien.setKmProchainEntretien(res.getLong(10));
ficheEntretien.setKmPrevenirAvantEntretien(res.getLong(11));
ficheEntretien.setCoutEntretien(res.getDouble(12));
ficheEntretien.setNbUnite(res.getInt(13));
TypeUnite typeUnite = new TypeUnite(res.getInt(14));
typeUnite.setLibelle(res.getString(15));
ficheEntretien.setTypeUnite(typeUnite);
listeFicheEntretien.add(ficheEntretien);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return listeFicheEntretien;
}
public FicheEntretien insert(final FicheEntretien ficheEntretien) {
final FicheEntretien[] result = new FicheEntretien[1];
result[0] = null;
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement psmt = null;
try {
psmt = connection.prepareStatement(INSERT_FICHE_ENTRETIEN);
psmt.setInt(1,ficheEntretien.getVoiture().getId());
psmt.setString(2,ficheEntretien.getLibelle());
psmt.setDate(3,new java.sql.Date(ficheEntretien.getDateDernierEntretien().getTime()));
psmt.setDate(4,new java.sql.Date(ficheEntretien.getDateProchaineEntretien().getTime()));
psmt.setInt(5,ficheEntretien.getTypeEntretien().getId());
psmt.setLong(6,ficheEntretien.getKmDernierEntretien());
psmt.setLong(7,ficheEntretien.getKmProchainEntretien());
psmt.setLong(8,ficheEntretien.getKmPrevenirAvantEntretien());
psmt.setDouble(9,ficheEntretien.getCoutEntretien());
psmt.setInt(10,ficheEntretien.getNbUnite());
psmt.setInt(11,ficheEntretien.getTypeUnite().getId());
psmt.executeUpdate();
}
finally {
if (psmt != null) {
psmt.close();
}
}
Statement smt = null;
ResultSet res = null;
try {
smt = connection.createStatement();
res = smt.executeQuery("select idFicheEntret, tvoiture.idVoit, tvoiture.numIdentifAggloVoit, dateDernierEntret, dateProchainEntret, typeentretien.idTypeEntret, ttypeentretien.descripTypeEntret, kmDernierVoitEntret, kmProchainVoitEntret, kmPrevenirAvantEntret, coutEntret, nombreUniteEntret, ttypeunite.idUnite, ttypeunite.descripTypeUnite from tficheentretienvoiture, tvoiture, ttypeentretien, ttypeunite where tficheentretienvoiture.idVoit = tvoiture.idVoit and tficheentretienvoiture.idTypeEntret = ttypeentretien.idTypeEntret and tficheentretienvoiture.idTypeUnite= ttypeunite.idTypeUnite and idFicheEntret = LAST_INSERT_ID()");
if (res.next()) {
result[0] = new FicheEntretien(res.getInt(1));
result[0].setLibelle(res.getString(2));
Voiture voiture = new Voiture(res.getInt(3));
voiture.setNumeroAgglomeration(res.getInt(4));
result[0].setVoiture(voiture);
Date dateDernierEntret = new Date(res.getDate(5).getTime());
result[0].setDateDernierEntretien(dateDernierEntret);
Date dateProchainEntret = new Date(res.getDate(6).getTime());
result[0].setDateProchaineEntretien(dateProchainEntret);
TypeEntretien typeEntretien = new TypeEntretien(res.getInt(7));
typeEntretien.setLibelle(res.getString(8));
result[0].setTypeEntretien(typeEntretien);
result[0].setKmDernierEntretien(res.getLong(9));
result[0].setKmProchainEntretien(res.getLong(10));
result[0].setKmPrevenirAvantEntretien(res.getLong(11));
result[0].setCoutEntretien(res.getDouble(12));
result[0].setNbUnite(res.getInt(13));
TypeUnite typeUnite = new TypeUnite(res.getInt(14));
typeUnite.setLibelle(res.getString(15));
result[0].setTypeUnite(typeUnite);
}
} finally {
try {
if (res != null) {
res.close();
}
} finally {
if (smt != null) {
smt.close();
}
}
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
return result[0];
}
public FicheEntretien update(final FicheEntretien ficheEntretien) {
AccessMySql.withConnection(new AccessMySql.RunnableWithConnection() {
public void runWithconnection(Connection connection) {
try {
PreparedStatement smt = null;
try {
smt = connection.prepareStatement(UPDATE_FICHE_ENTRETIEN);
smt.setInt(1, ficheEntretien.getVoiture().getId());
smt.setString(2, ficheEntretien.getLibelle());
smt.setDate(3, new java.sql.Date(ficheEntretien.getDateDernierEntretien().getTime()));
smt.setDate(4, new java.sql.Date(ficheEntretien.getDateProchaineEntretien().getTime()));
smt.setInt(5, ficheEntretien.getTypeEntretien().getId());
smt.setLong(6, ficheEntretien.getKmDernierEntretien());
smt.setLong(7, ficheEntretien.getKmProchainEntretien());
smt.setLong(8, ficheEntretien.getKmPrevenirAvantEntretien());
smt.setDouble(9, ficheEntretien.getCoutEntretien());
smt.setInt(10, ficheEntretien.getNbUnite());
smt.setInt(11, ficheEntretien.getTypeUnite().getId());
smt.setInt(12, ficheEntretien.getId());
smt.executeUpdate();
}
finally {
if (smt != null) {
smt.close();
}
}
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
});
return ficheEntretien;
}
}