package application.modeles;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import application.exceptions.DataFormatException;
import application.outils.Database;
public class ModeleVideotheque implements interModeleVideotheque
{
private Database _DB;
public ModeleVideotheque(Database DB)
{
_DB = DB;
try {
_DB.connect();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void ajouterFilm(String titre, Collection<ModeleGenre> genres, ModeleIndividu realisateur, Collection<ModeleIndividu> acteurs) throws SQLException, DataFormatException
{
if(genres.size() < 1)
throw new DataFormatException("Il faut au moins un genre.");
if(acteurs.size() < 1)
throw new DataFormatException("Il faut au moins un acteur.");
if(realisateur.getPrenom() == null & realisateur.getNom() == null)
throw new DataFormatException("Le realisateur doit avoir au moins un nom ou un prenom.");
// Ajout du realisateur avant de pouvoir ajouter le film
realisateur.setDB(_DB);
int numRealisateur = realisateur.ajouter();
// Ajout du film
ModeleFilm film = new ModeleFilm(_DB);
film.setTitre(titre);
film.setRealisateur(realisateur);
int numFilm = film.ajouter();
// Si le film n'existe pas
if(numFilm > 0)
{
// Ajout des genres au film
Iterator<ModeleGenre> itGenres = genres.iterator();
CallableStatement cst = _DB.prepareCall("{call majVideotheque.ajouterGenre(?, ?)}");
ModeleGenreFilm genreFilm = new ModeleGenreFilm(_DB);
genreFilm.setNumFilm(numFilm);
while(itGenres.hasNext())
{
genreFilm.setCodeGenre(itGenres.next().getCode());
genreFilm.ajouter(cst);
}
cst.close();
// Ajout des acteurs au film
Iterator<ModeleIndividu> itActeurs = acteurs.iterator();
cst = _DB.prepareCall("{call majVideotheque.ajouterActeur(?, ?, ?)}");
ModeleActeur acteur = new ModeleActeur(_DB);
acteur.setNumFilm(numFilm);
ModeleIndividu individu;
while(itActeurs.hasNext())
{
individu = itActeurs.next();
if(individu.getPrenom() == null && individu.getNom() == null)
throw new DataFormatException("Un acteur n'a ni nom, ni prenom.");
acteur.setIndividu(individu);
acteur.ajouter(cst);
}
cst.close();
}
// Si le film existe
else
throw new DataFormatException("Le film existe deja.");
}
public Collection<ModeleGenre> getGenres() throws SQLException, DataFormatException
{
ModeleGenreCollection genreCollection = new ModeleGenreCollection(_DB);
Collection<ModeleGenre> genres = genreCollection.getTous();
return genres;
}
public Collection<ModeleRepartition> repartitionGenres() throws SQLException, DataFormatException
{
ModeleRepartitionCollection repartitionCollection = new ModeleRepartitionCollection(_DB);
Collection<ModeleRepartition> repartitions = repartitionCollection.getRepartitions();
return repartitions;
}
public Collection<ModeleClassement> top10Acteurs() throws SQLException, DataFormatException
{
ModeleClassementCollection classementCollection = new ModeleClassementCollection(_DB);
Collection<ModeleClassement> classements = classementCollection.top10Acteurs();
return classements;
}
public Collection<ModeleClassement> top10Realisateurs() throws SQLException, DataFormatException
{
ModeleClassementCollection classementCollection = new ModeleClassementCollection(_DB);
Collection<ModeleClassement> classements = classementCollection.top10Realisateurs();
return classements;
}
/*----------A-C-C-E-S-S-E-U-R-S---------------------------*/
public Database get_DB() {
return _DB;
}
public void set_DB(Database _db) {
_DB = _db;
}
}