package factories;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import data.abonne.Abonne;
import data.theatre.Place;
import data.theatre.Rangee;
import data.theatre.Theatre;
import data.theatre.Zone;
import java.util.*;
/**
*
* @author brahim
*
*/
public class FabAbonne {
/**
* Connexion JDBC
*/
private Connection c;
/*
* Traitement du singleton de la fabrique
*/
private static FabAbonne instance;
/**
* Constructeur prive
*
*/
private FabAbonne() {
// this.cacheTheatre = new HashMap();
}
/**
* Recuperation du singleton de FabPersonne
*
* @return
*/
public static FabAbonne getInstance() {
if (instance == null)
instance = new FabAbonne();
return instance;
}
/**
* Requetes SQL
*/
/* Les infos sur le théatre */
String selectAbonne = "Select * from abonne where idAbonne = ?";
/* Permet de savoir si il existe une reservation pour un abonné et une piéce */
String selectReservation = "select idreservation from reservation where idabonne = ? "+
"and idseance in (select idseance from seance where idpiece = ?)";
/**
* Creation d'un fauteuil et d'une reservation
* insert into fauteuil values(1,1,'premier');
* insert into reservation values(1,'2007-01-01',10,'1EF','A-1',1,'premiere');
*
*/
/* Les statements */
PreparedStatement pSelectAbonne,pSelectReservation;
/**
* Preparation des statements
*
*/
private void init() throws SQLException {
// preparation des statements:
pSelectAbonne = c.prepareStatement(selectAbonne);
pSelectReservation = c.prepareStatement(selectReservation);
}
/**
* 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 idAbonne
* @return
*/
public Abonne rechercher(String idAbonne) throws SQLException {
pSelectAbonne.clearParameters();
pSelectAbonne.setString(1, idAbonne);
ResultSet rsAbonne = pSelectAbonne.executeQuery();
Abonne a = null;
FabTheatre ft = FabTheatre.getInstance();
ft.setConnection(c);
while(rsAbonne.next()){
String nom = rsAbonne.getString(2);
String prenom = rsAbonne.getString(3);
String adresse = rsAbonne.getString(4);
int nbPlaces = rsAbonne.getInt(5);
Date debutVal = rsAbonne.getDate(6);
Date finVal = rsAbonne.getDate(7);
String idZone = rsAbonne.getString(8);
Zone z = ft.parametrerZone(idZone);
a = new Abonne(idAbonne,nom,prenom,adresse,debutVal,finVal,nbPlaces,z);
}
return a;
}
/**
*
*
*
* @param idAbonne
* @param idPiece
* @return Le numéro de resevation de cette Abonnée pour cette pièce, null si pas de reservation
* @throws SQLException
*/
public String aReserve(String idAbonne, String idPiece) throws SQLException{
pSelectReservation.clearParameters();
pSelectReservation.setString(1, idAbonne);
pSelectReservation.setString(2, idPiece);
ResultSet rsReservation = pSelectReservation.executeQuery();
if(rsReservation.next()){
return rsReservation.getString(1);
}
return null;
}
}