/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Thread;
import Bean.Jdbc_MySQL;
import Servlet.Servlet_Login;
import java.beans.Beans;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TimeOutReservations implements Runnable{
@Override
public void run() {
System.out.println("Thread timeOutStarted");
while(true){
try {
Thread.sleep(1000 * 5); // 5 secondes
} catch (InterruptedException ex) {
Logger.getLogger(TimeOutReservations.class.getName()).log(Level.SEVERE, null, ex);
}
gestionTimeOut();
}
}
private void gestionTimeOut() {
LinkedList<String> listeReservation = getListeReservationExpiree("min", 1); // plus de 20 minutes.
for(String idReservation : listeReservation){
supprimerReservation(idReservation);
}
}
private LinkedList<String> getListeReservationExpiree(String type, int duree) {
LinkedList<String> listeReservation = null;
Jdbc_MySQL dbsql;
try {
dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String requete = "SELECT * FROM reservations WHERE payé = '0'";
ResultSet tuples = (ResultSet)dbsql.select(requete);
while(tuples.next()){
String idReservation = tuples.getString("id");
String date = tuples.getString("date_reservation");
String heure = tuples.getString("heure_reservation");
String dateStringNow = getDateNow();
String heureStringNow = getHeureNow();
heure = ajoutTemp(heure, type, duree);
Date dateNow = convertDate(dateStringNow, heureStringNow);
Date dateReservation = convertDate(date, heure);
int retour = dateNow.compareTo(dateReservation);
if(retour == 1){
if(listeReservation == null){
listeReservation = new LinkedList<String>();
}
listeReservation.add(idReservation);
}
}
} catch (Exception ex) {
Logger.getLogger(TimeOutReservations.class.getName()).log(Level.SEVERE, null, ex);
}
return listeReservation;
}
private void supprimerReservation(String idReservation) {
try {
Jdbc_MySQL dbsql = (Jdbc_MySQL) Beans.instantiate(null, "Bean.Jdbc_MySQL");
dbsql.init();
String request = "DELETE FROM reservations WHERE id = '"+idReservation+"'";
dbsql.update(request);
dbsql.Disconnect();
} catch (Exception ex) {
Logger.getLogger(Servlet_Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
private String getDateNow() {
Date now = new Date();
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
String date = dateFormat.format(now);
return date;
}
private String getHeureNow() {
Date now = new Date();
DateFormat dateFormat = new SimpleDateFormat("HH:mm");
String heure = dateFormat.format(now);
return heure;
}
private Date convertDate(String date, String heure) {
String dateComplete = date + "-" + heure;
String format = "dd-MM-yyyy-HH:mm";
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = null;
String test = null;
try {
d = (Date)sdf.parse(dateComplete);
test = sdf.format(d);
} catch (ParseException ex) {
Logger.getLogger(TimeOutReservations.class.getName()).log(Level.SEVERE, null, ex);
}
return d;
}
private String ajoutTemp(String heure, String type, int duree) {
String[] split = heure.split(":");
String h = split[0];
String m = split[1];
if(type.equals("min")){
int minute = Integer.parseInt(m);
minute += duree;
return h + ":" + String.valueOf(minute);
}else{
int heu = Integer.parseInt(h);
heu += duree;
return String.valueOf(heu) + ":" + m;
}
}
}