Package factories

Source Code of factories.FabTheatre

package factories;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import data.theatre.Place;
import data.theatre.Rangee;
import data.theatre.Theatre;
import data.theatre.Zone;

import java.util.*;

/**
*
* @author brahim
*
*/
public class FabTheatre {

  /**
   * Connexion JDBC
   */
  private Connection c;

  /*
   * Traitement du singleton de la fabrique
   */
  private static FabTheatre instance;

  /**
   * Constructeur prive
   *
   */
  private FabTheatre() {
    // this.cacheTheatre = new HashMap();
  }

  /**
   * Recuperation du singleton de FabPersonne
   *
   * @return
   */
  public static FabTheatre getInstance() {
    if (instance == null)
      instance = new FabTheatre();
    return instance;
  }

  /**
   * Requetes SQL
   */

  /* Les infos sur le théatre */
  String selectTheatre = "Select theatre from saison";

  /* Les zones */
  String selectZones = "Select distinct idzone from theatre";

  /* Les rangées et places d'une zone */
  String selectRangees = "select idrangee,nbfauteuils from theatre where "
      + " idzone = ? group by idzone,idrangee,nbfauteuils";

  /* Les places restantes */
  String selectPlacesLibre = "select nbPlacesZone - sum(nbplacesreservees) "
      + "from reservation r,zone z where idzone = ? and z.idzone = r.idzone "
      + " and r.idseance = ?";

  /** recuperation du nombre total de places d'une zone */
  String selectNbPlacesZone = "select nbPlacesZone from zone where idZone = ?";
 
  /** recherche du nombre de reservations d'une seance concernant une zone */
  String selectNbReservations = "select count(*) from reservation where idseance = ? and idZone = ? ";

  /**
   * select nbPlacesZone - sum(nbplacesreservees) from reservation r,zone z
   * where idzone = 'premiere' and z.idzone = r.idzone and r.idseance = '1AV';
   */

  /* Les statements */
  PreparedStatement pSelectTheatre, pSelectZones, pSelectRangees,
      pSelectPlacesLibre, pSelectNbPlacesZone,pSelectNbReservations;

  /**
   * Preparation des statements
   *
   */
  private void init() throws SQLException {
    // preparation des statements:
    pSelectTheatre = c.prepareStatement(selectTheatre);
    pSelectZones = c.prepareStatement(selectZones);
    pSelectRangees = c.prepareStatement(selectRangees);
    pSelectPlacesLibre = c.prepareStatement(selectPlacesLibre);
    pSelectNbPlacesZone = c.prepareStatement(selectNbPlacesZone);
    pSelectNbReservations = c.prepareStatement(selectNbReservations);
  }

  /**
   * Mise en place d'une connexion JDBC au singleton
   *
   * @param c
   * @throws SQLException
   */
  public void setConnection(Connection c) throws SQLException {
    this.c = c;
    this.init();
  }

  /**
   *
   * @param z
   * @return
   * @throws SQLException
   */
  public Zone parametrerZone(String idZone) throws SQLException{
    Zone zone = new Zone(idZone);
    pSelectRangees.clearParameters();
    pSelectRangees.setString(1, idZone);
    ResultSet rsRangees = pSelectRangees.executeQuery();
    // Pour les rangées
    while(rsRangees.next()){
      String idRangee = rsRangees.getString(1);
      Rangee r = new Rangee(idRangee);
      int nbPlaces = rsRangees.getInt(2);
      for(int i=1;i<=nbPlaces;i++){         
        r.addPlace(new Place(i));
      }
     
      // On ajout cette rangée à la zone
      zone.addRangee(r);
    }
    return zone;
  }
 
  /**
   *
   * @return
   * @throws SQLException
   */
  public Collection getZones() throws SQLException{
    ArrayList listZones = new ArrayList();
    // On récupére les zones
    pSelectZones.clearParameters();
    ResultSet rsZones = pSelectZones.executeQuery();
   
    // On paramètre les objets zones avant de les ajouter
    while(rsZones.next()){
      String idZone = rsZones.getString(1);
      listZones.add(idZone);
    }
   
    return listZones;
  }
 
 
  /**
   *
   * @param idSeance
   * @param idZone
   * @return
   * @throws SQLException
   */
  public int getPlacesRestantes(String idSeance, String idZone) throws SQLException{
    pSelectNbPlacesZone.clearParameters();
    pSelectNbPlacesZone.setString(1, idZone);
   
    int nbPlacesZone = 0;
   
    ResultSet rsNbPlacesZone = pSelectNbPlacesZone.executeQuery();
    if(rsNbPlacesZone.next()){
      nbPlacesZone = rsNbPlacesZone.getInt(1);
    }
   
    //Nombre de réservations existantes => Pas de nvl ...
    int nbReservations = 0;
    pSelectNbReservations.clearParameters();
    pSelectNbReservations.setString(1, idSeance);
    pSelectNbReservations.setString(2, idZone);
    ResultSet rsNbReservations = pSelectNbReservations.executeQuery();
    if(rsNbReservations.next()){
      nbReservations = rsNbReservations.getInt(1);
    }
   
    // Pas de réservation pour cette séance dans cette zone, on renvoit le nombre total
    if(nbReservations == 0){
      return nbPlacesZone;
    }
   
    pSelectPlacesLibre.clearParameters();
    pSelectPlacesLibre.setString(1,idZone);
    pSelectPlacesLibre.setString(2,idSeance);
   
    ResultSet rsPlacesLibre = pSelectPlacesLibre.executeQuery();
    if(rsPlacesLibre.next()){
      //System.out.println("[FT idSeance = "+idSeance +" idZone = "+idZone+"] PLACES TOTAL = "+nbPlacesZone);
      //System.out.println("[FT idSeance = "+idSeance +" idZone = "+idZone+" ] PLACES LIBRES = "+rsPlacesLibre.getInt(1));
      //int nbPlacesRestantes = rsPlacesLibre.getInt(1);
     
      return rsPlacesLibre.getInt(1);
      //System.out.println("Places restantes = "+nbPlacesRestantes);
      //if(nbReservations == 0){
      //  return (nbPlacesRestantes==0)?nbPlacesZone:nbPlacesRestantes;
      //}
    }
   
    /*
     * Pas de réservation pour cette zone et cette séance, on renvoie le
     * nombre total
     */
    return 0;
    //return nbPlacesZone;
   
  }
 

  /**
   *
   * @return
   * @throws SQLException
   */
  public Theatre getTheatre() throws SQLException{
    pSelectTheatre.clearParameters();
    ResultSet rsTheatre = pSelectTheatre.executeQuery();
    Theatre theatre = new Theatre(rsTheatre.getString(1));
   
    // On récupére les zones
    pSelectZones.clearParameters();
    ResultSet rsZones = pSelectZones.executeQuery();
   
    // On paramètre les objets zones avant de les ajouter
    while(rsZones.next()){
      String idZone = rsZones.getString(1);
     
      // On paramétre cette zone (ajout des rangées ...)
      Zone z = this.parametrerZone(idZone);     
      // On ajoute cette zone au théatre
      theatre.addZone(z);
    }
   
   
    return theatre;
  }
 
 

}
TOP

Related Classes of factories.FabTheatre

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.