/**
*
*/
package metier.reservations;
import java.sql.SQLException;
import java.util.Date;
import metier.GestionConnection;
import data.reservation.Reservation;
import exceptions.ReservationInexistanteException;
import exceptions.metier.ImpossibleTaskException;
import factories.FabReservation;
/**
* Class Métier permettant de gérer les cas d'utilisation annulation et validation.
*
*
*
* @author Ait Elhaj Brahim
* @author Matej Hausenblas
*
*/
public class AnnulationValidation {
/* Gestion de la connection */
private GestionConnection gc;
/**
* Création d'un objet métier pour la gestion du cas d'utilisation 1.
*
*/
public AnnulationValidation(){
gc = new GestionConnection();
}
/**
* Renvoie un objet réservation.
*
* @param idReservation L'id de la réservation
* @return La réservation récupérée de la fabrique
*/
public Reservation getReservation(String idReservation){
/* Utilisation de la fabrique de théatre */
FabReservation fr = FabReservation.getInstance();
try{
fr.setConnection(gc.getConnection());
//On récupére la réservation
Reservation res = fr.getReservation(idReservation);
return res;
}catch(SQLException se){
se.printStackTrace();
}catch(NumberFormatException nfe){
nfe.printStackTrace();
}
return null;
}
/**
* Renvoie la date de validation d'une réservation
*
* @param idReservation L'identifiant de la réservation
* @return La date de validation null si la réservation n'a pas été validée
*/
public Date reservationValidee(String idReservation){
FabReservation fr = FabReservation.getInstance();
try{
fr.setConnection(gc.getConnection());
return fr.reservationValidee(idReservation);
//Date dateConfirmation =
}catch(SQLException se){
se.printStackTrace();
}
return null;
}
/**
* Annule toutes les Reservations expirées a la date donnée.
*
* @param dateOfTheDay Date courante en fonction de laquelle seront annulées ou pas les réservations
* @throws SQLException Exception renvoyée en cas de problème avec la base de donnée.
*/
public void annulerAnciennesReservations(Date dateOfTheDay) {
FabReservation fr = FabReservation.getInstance();
try{
fr.setConnection(gc.getConnection());
fr.annulerAnciennesReservations(dateOfTheDay);
}catch(SQLException se){
se.printStackTrace();
}
}
/**
* Annule un réservation sur la base de son identifiant
*
* @param id L'identifiant de la réservation à annuler
*
* @throws ImpossibleTaskException Tâche impossible à réaliser
* @throws ReservationInexistanteException La réservation saisie n'existe pas
*/
public void annulerReservation(String id)
throws ImpossibleTaskException, ReservationInexistanteException{
FabReservation fr = FabReservation.getInstance();
try{
fr.setConnection(gc.getConnection());
if(!fr.reservationExiste(id)){
throw new ReservationInexistanteException("La reservation "
+id+" n'existe pas");
}
fr.supprimerReservation(id);
}catch(SQLException se){
throw new ImpossibleTaskException(se.getMessage());
}
}
/**
* @param idReservation L'identifiant de la réservation
* @param dateLimite La date limite de confirmation
* @throws SQLException En cas de problème avec la base de donnée
* @throws ReservationInexistanteException La réservation saisie n'existe pas
*/
public void confirmerReservation(String idReservation, java.util.Date dateLimite)
throws SQLException, ReservationInexistanteException{
GestionConnection gcConfirmer = new GestionConnection();
// activation d'un fabrique de reservations
FabReservation fr = FabReservation.getInstance();
fr.setConnection(gcConfirmer.getConnection());
/* on essaie la confirmation, si l'identifiant passe
* en parametre est invalide, on recoit une exception fabrique,
* et on lance une exception metier.
*/
try{
fr.confirmerReservation(idReservation, dateLimite);
//On shutdown pour être sur que les changements sont pris en compte
gc.shutDown();
}catch(ReservationInexistanteException rie){
throw new ReservationInexistanteException("METIER: "+rie.getMessage());
}
}
}