Package factories

Source Code of factories.FabPiece

package factories;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import data.programmation.Piece;
import data.programmation.Representation;

/**
*
* @author brahim
*
*/
public class FabPiece {
 
  /*
   * TODO: A RECHERCHER DANS LE CACHE
   * une fois rempli
   */
  /**
   * Cache contenant les pieces.
   * key=idPiece
   * value=Piece
   */
//  private HashMap cachePieces;

  /**
   * Connexion JDBC
   */
  private Connection c;
 
  /*
   * Traitement du singleton
   * de la fabrique
   */
  private static FabPiece instance;
 
  /**
   * Constructeur prive
   *
   */
  private FabPiece(){
//    this.cachePieces = new HashMap();
  }
 
  /**
   * Recuperation du singleton de FabPersonne
   * @return
   */
  public static FabPiece getInstance(){
    if(instance == null)
      instance = new FabPiece();
    return instance;
  }
 
 
  /**
   * Requetes SQL
   */
  /** Selection de toutes les pieces */
  String selectToutesPieces = "SELECT IDPIECE,TITREPIECE,AUTEUR,TITRESAISON,"
    + "TYPEPERIODE,DATEDEB,DATEFIN "
    + "FROM PIECE,PERIODE "
    + "WHERE PIECE.IDPIECE = PERIODE.IDPIECE " +
    "ORDER BY IDPIECE ASC";
 
  /** selection des pieces a periode ouverte a une date donnee */
  String selectPiecesPeriodeOuverte =
    "SELECT IDPIECE,TITREPIECE,AUTEUR,TITRESAISON," +
      "TYPEPERIODE,DATEDEB,DATEFIN " +
      "FROM PIECE,PERIODE " +
      "WHERE PIECE.IDPIECE = PERIODE.IDPIECE " +
      "AND ? >= DATEDEB " +
      "AND ? <= DATEFIN " +
      "ORDER BY IDPIECE ASC";
 
  /** recherche du titre d'une piece */
  String selectTitrePiece = "select titrePiece from piece p,seance s" +
      " where s.idPiece = p.idPiece and idSeance = ? ";
 
  /** selection des seances d'une piece */
  String selectSeancesPiece =
    "SELECT distinct IDSEANCE,DATESEANCE,HEURE,NBPLACESRESTANTES" +
      " FROM SEANCE WHERE IDPIECE = ?";
 
  /** recherche des tarifs pour une piece */
   /* 1. idpiece
   * 2. nomcategorie
   * 3. idzone
   * 4. montant
   */
  String selectTarifsPiece =
    "Select * from prix where idpiece = ?";
 
  // statements
  PreparedStatement pSelectPPO;
  PreparedStatement pSelectTP;
  // on recupere egalement les seances <=> composition
  PreparedStatement pSelectSeancesPiece;
  PreparedStatement pSelectTarifsPiece;
  PreparedStatement pSelectTitrePiece;


  /**
   * Preparation des statements
   *
   */
  private void init() throws SQLException{
    // preparation des statements:
    pSelectPPO = this.c.prepareStatement(selectPiecesPeriodeOuverte);
    pSelectTP = this.c.prepareStatement(selectToutesPieces);
    pSelectSeancesPiece = this.c.prepareStatement(selectSeancesPiece);
    pSelectTarifsPiece = c.prepareStatement(selectTarifsPiece);
    pSelectTitrePiece = c.prepareStatement(selectTitrePiece);
 


  /**
   * 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();
  }

  /*
   * Fonctions classiques de la fabrique
   */

  /**
   * Recuperation d'un ensemble de Pieces, avec les Seances/Representations
   * 1. recuperation de seances pour une piece donnee
   * 2. recuperation de pieces pour une date donnee.
   */
  public Collection getSeancesPiece(String idPiece)
    throws SQLException{
    // liste contenant les seances de la piece donnee.
    ArrayList lesSeances = new ArrayList();

    pSelectSeancesPiece.clearParameters();
    pSelectSeancesPiece.setString(1, idPiece);
    ResultSet seancesRS = pSelectSeancesPiece.executeQuery();

    // recuperation de toutes les informations concernant les seances
    while(seancesRS.next()){
      /*
       * 1 = idseance = string
       * 2 = dateseance = date
       * 3 = heure = int
       * 4 = nbplacesrestantes = int
       */
      Representation repres = new Representation(
          seancesRS.getString(1),
          seancesRS.getDate(2),
          seancesRS.getInt(3)
          );
      repres.setNbPlacesRestantes(seancesRS.getInt(4));

      lesSeances.add(repres);
    }

    return lesSeances;
  }
 
 
  /**
   *
   * @param idPiece
   * @return
   * @throws SQLException
   */
  public String getTitrePiece(String idSeance) throws SQLException{
    pSelectTitrePiece.clearParameters();
    pSelectTitrePiece.setString(1, idSeance);
    ResultSet rsTitre = pSelectTitrePiece.executeQuery();
    if(rsTitre.next()){
      return rsTitre.getString(1);
    }
   
    return "";
   
  }
 
  /**
   * Recuperation de l'ensemble (COLLECTION) de pieces
   * avec les representations correspondantes.
   */
  public Collection getLesPieces(Date today)
    throws SQLException{
    /* liste des pieces trouvees a periode
     * de reservation ouverte.
     */
   
    ArrayList lesPieces = new ArrayList();
    ResultSet rs;
    /*
     * Si la date n'est pas definie, on recupere toutes les
     * pieces.
     */
    if(today == null){
      pSelectTP.clearParameters();
      rs = pSelectTP.executeQuery();
    }else{
      pSelectPPO.clearParameters();
      pSelectPPO.setDate(1, today);
      pSelectPPO.setDate(2, today);     
      rs = pSelectPPO.executeQuery();
    }
//    String idPieceTmp = "";
    Piece p; // = new Piece(idPieceTmp);

    while(rs.next()){
      /*
       * 1 IDPIECE = String
       * 2 TITREPIECE = String
       * 3 AUTEUR = String
       * 4 TITRESAISON = String
       * 5 TYPEPERIODE = String
       * 6 DATEDEB = Date
       * 7 DATEFIN = Date
       *
       * Ici il faut s'attendre a recevoir plusieurs fois
       * un rs avec IDPIECE identique: plusieurs types de
       * periodes de reservation!
       */
      String id = rs.getString(1);
      String titre = rs.getString(2);
      String auteur = rs.getString(3);
      String saison = rs.getString(4);

//      if(!id.equals(idPieceTmp)){
      p = new Piece(id, titre, auteur, saison);
//        idPieceTmp = id;
     
      // ajouter les representations pour cette piece:
      // le faire seulement si on cree une nouvelle piece!
      for(Iterator it = this.getSeancesPiece(id).iterator();
        it.hasNext(); ){
        p.addRepresentation((Representation)it.next());
      }
     
     
      //Ajout des tarifs
      pSelectTarifsPiece.clearParameters();
      pSelectTarifsPiece.setString(1, id);
      ResultSet rsTarifs = pSelectTarifsPiece.executeQuery();
      while(rsTarifs.next()){
        p.addTarif(rsTarifs.getString(2), rsTarifs.getString(3), rsTarifs.getDouble(4));
      }
     
      // ajouter la piece dans la liste des pieces a retourner.
      lesPieces.add(p);
     
      // ajouter la piece dans le cache:
      //this.cachePieces.put(id, p);
      //TODO: si on utilise le cache!
//      }

     
      // recuperation du reste des informations du ResultSet
      String type =rs.getString(5);
      Date deb = rs.getDate(6);
      Date fin = rs.getDate(7);
      // ajout du type et des dates debut/fin de la periode periodes
      p.setPeriodeEnCours(type);
      p.setPeriodeDebut(deb);
      p.setPeriodeFin(fin);
    }
   
    return lesPieces;
  }
  //Date d = Date.valueOf("2007-01-03");
 
}
TOP

Related Classes of factories.FabPiece

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.