/**
*
*/
package metier.theatre;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import data.reservation.Fauteuil;
import data.reservation.Reservation;
import data.reservation.Seance;
import data.theatre.Place;
import data.theatre.Zone;
import exceptions.metier.PlaceInexistanteException;
import factories.FabReservation;
import factories.FabTheatre;
import metier.GestionConnection;
/**
* @author Matej Hausenblas matej.hausenblas@gmail.com
*
*/
public class OutilsTheatre {
private GestionConnection gc;
public OutilsTheatre(){
gc = new GestionConnection();
}
/**
* Deletion d'un Fauteuil d'une Zone.
* @param z Zone d'ou il faut supprimer la Place
* @param f Fauteuil a supprimer, tel qu'on le recupere dans Reservation
* @return boolean resultat de l'operation.
* @throws PlaceInexistanteException Au cas ou la Place n'existe pas dans cette zone
*/
public void removePlace(Zone z, Fauteuil f)
throws PlaceInexistanteException{
if( !z.removePlace(f.getRangee(), f.getNumero()) )
throw new PlaceInexistanteException();
}
/**
* Recuperation d'une image de Zone dont on a soustrait
* les places occupees dans des Reservations existantes.
* @param idZone String identifiant la Zone qu'on veut recuperer.
* @return
* @throws SQLException en cas de probleme de connexion a la BdD
*/
public Zone getImageZonePlacesLibres(String idZone, String idSeance)
throws SQLException{
/* recuperation des fabriques necessaires */
FabTheatre ft = FabTheatre.getInstance();
FabReservation fr = FabReservation.getInstance();
ft.setConnection(gc.getConnection());
fr.setConnection(gc.getConnection());
// creation d'une zone inoccupee
Zone z = ft.parametrerZone(idZone);
/* Deletion des places deja reservees de la zone.
* On parcourt toutes les reservations concernant cette Zone et seance
* Pour chaque reservation on enleve les Fauteuils occupes par celle-ci
* dans la Zone resultat.
*/
Collection lesReservations = fr.getLesReservations(idSeance, idZone);
for(Iterator itRes = lesReservations.iterator(); itRes.hasNext();){
Reservation r = (Reservation)itRes.next();
Collection lesFauteuils = r.getLesFauteuils();
System.out.println("INFO: Fauteuils de la reservation "+r.getIdReserv()+":\n"+lesFauteuils);
for(Iterator itFauteuils = lesFauteuils.iterator();
itFauteuils.hasNext();){
Fauteuil f = (Fauteuil)itFauteuils.next();
try{
this.removePlace(z, f);
}catch(PlaceInexistanteException pie){
System.err.println("WARNING: tentative de supprimer une place " +
"non existante dans la zone");
}
}
}
return z;
}
}