package application.controleurs;
import java.awt.Color;
import java.awt.event.*;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Vector;
import javax.swing.JOptionPane;
import application.exceptions.*;
import application.modeles.ModeleGenre;
import application.modeles.ModeleIndividu;
import application.modeles.ModeleVideotheque;
import application.vues.VuePanelAjout;
/**
* Ce controleur servira pour les boutons d'ajout/supp d'acteurs et de genres (pour ajouter un film, il faut
* d'abord construire une liste d'acteurs et de genres), et pour l'ajout de film.
*
* @author Hitman
*/
public class ControleurPanelAjout implements ActionListener, MouseListener {
public static final String AJOUTER_ACTEUR = "AJOUTER ACTEUR";
public static final String AJOUTER_GENRE = "AJOUTER GENRE";
public static final String SUPPRIMER_ACTEUR = "SUPPRIMER ACTEUR";
public static final String SUPPRIMER_GENRE = "SUPPRIMER GENRE";
public static final String AJOUTER_FILM = "AJOUTER FILM";
private VuePanelAjout _pnl;
private ModeleVideotheque _mod;
public ControleurPanelAjout(VuePanelAjout pnl, ModeleVideotheque mod) {
_pnl = pnl;
_mod = mod;
}
@SuppressWarnings("static-access")
@Override
public void actionPerformed(ActionEvent event) {
JOptionPane info = new JOptionPane();
// Clic sur le bouton "Ajouter acteur"
if(event.getActionCommand() == AJOUTER_ACTEUR){
if(_pnl.get_txtAjoutActeur().getText().equals("")){
info.showMessageDialog(_pnl, "L'acteur doit avoir un prenom et/ou un nom !", ".:: Ajout d'un acteur ::.", info.ERROR_MESSAGE);
}
else if (acteurDejaAjoute(_pnl.get_txtAjoutActeur().getText())){
info.showMessageDialog(_pnl, "Attention, vous avez deja� ajoute cet acteur !", ".:: Ajout d'un acteur ::.", info.ERROR_MESSAGE);
}
else {
// Au clic sur ajouter acteur, on ajoute l'item dans la liste.
_pnl.get_lstActeurs().add(_pnl.get_txtAjoutActeur().getText());
_pnl.get_txtAjoutActeur().setText("");
}
}
// Clic sur le bouton "Supprimer acteur"
if(event.getActionCommand() == SUPPRIMER_ACTEUR){
if(_pnl.get_lstActeurs().getSelectedIndex()>=0){
_pnl.get_lblResultat().setForeground(Color.GREEN);
_pnl.get_lblResultat().setText("-");
_pnl.get_lstActeurs().remove(_pnl.get_lstActeurs().getSelectedItem());
}
else info.showMessageDialog(_pnl, "Veuillez selectionner un acteur a supprimer !", ".:: Suppression d'un acteur ::.", info.ERROR_MESSAGE);
}
// Clic sur le bouton "Ajouter genre"
if(event.getActionCommand() == AJOUTER_GENRE){
if(_pnl.get_cbxGenreFilm().getSelectedItem().toString() == "**-**"){
info.showMessageDialog(_pnl, "Il ne s'agit pas d'un genre", ".:: Ajout d'un genre ::.", info.ERROR_MESSAGE);
}
if(!genreDejaAjoute(_pnl.get_cbxGenreFilm().getSelectedItem().toString())){
_pnl.get_lstGenres().add(_pnl.get_cbxGenreFilm().getSelectedItem().toString());
}
else info.showMessageDialog(_pnl, "Ce genre a deja� ete ajoute pour ce film !", ".:: Ajout d'un genre ::.", info.ERROR_MESSAGE);
}
// Clic sur le bouton "Supprimer genre"
if(event.getActionCommand() == SUPPRIMER_GENRE){
if(_pnl.get_lstGenres().getSelectedIndex()>=0){
_pnl.get_lblResultat().setForeground(Color.GREEN);
_pnl.get_lblResultat().setText("-");
_pnl.get_lstGenres().remove(_pnl.get_lstGenres().getSelectedItem());
}
else info.showMessageDialog(_pnl, "Veuillez selectionner un genre a supprimer !", ".:: Suppression d'un genre ::.", info.ERROR_MESSAGE);
}
// Clic sur le bouton "Ajouter film"
if(event.getActionCommand() == AJOUTER_FILM){
this.ajouterFilm();
_pnl.reset();
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent event2) {
if(event2.getSource() == _pnl.get_btnAjouter_Acteur()){
_pnl.get_btnAjouter_Acteur().setForeground(Color.BLUE);
}
else if(event2.getSource() == _pnl.get_btnAjouter_Genre()){
_pnl.get_btnAjouter_Genre().setForeground(Color.BLUE);
}
else if(event2.getSource() == _pnl.get_btnSupprimer_Acteur()){
_pnl.get_btnSupprimer_Acteur().setForeground(Color.BLUE);
}
else if(event2.getSource() == _pnl.get_btnSupprimer_Genre()){
_pnl.get_btnSupprimer_Genre().setForeground(Color.BLUE);
}
else if(event2.getSource() == _pnl.get_btnAjouter_Film()){
_pnl.get_btnAjouter_Film().setForeground(Color.BLUE);
}
}
@Override
public void mouseExited(MouseEvent event3) {
if(event3.getSource() == _pnl.get_btnAjouter_Acteur()){
_pnl.get_btnAjouter_Acteur().setForeground(Color.BLACK);
}
if(event3.getSource() == _pnl.get_btnAjouter_Genre()){
_pnl.get_btnAjouter_Genre().setForeground(Color.BLACK);
}
if(event3.getSource() == _pnl.get_btnSupprimer_Acteur()){
_pnl.get_btnSupprimer_Acteur().setForeground(Color.BLACK);
}
if(event3.getSource() == _pnl.get_btnSupprimer_Genre()){
_pnl.get_btnSupprimer_Genre().setForeground(Color.BLACK);
}
if(event3.getSource() == _pnl.get_btnAjouter_Film()){
_pnl.get_btnAjouter_Film().setForeground(Color.BLACK);
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
/**
*
* Methode d'ajout de film qui est appelee lors du clic
* sur le bouton "Ajouter le film".
*
*/
@SuppressWarnings("static-access")
public void ajouterFilm(){
JOptionPane info = new JOptionPane();
try{
String[]Realisateur, Genre1;
int numReal, numFilm;
String nomRea = _pnl.get_txtRealisateur().getText();
if(nomRea.length() < 1)
throw new DataFormatException("Le nom du realisateur ne peut etre vide");
Realisateur = _pnl.get_txtRealisateur().getText().split("_");
String prenomRealisateur = Realisateur[0];
String nomRealisateur = null;
if(nomRea.contains("_"))
nomRealisateur = Realisateur[1];
String codeGenre, labelGenre, titre;
Collection<ModeleGenre> lstGenres = new Vector<ModeleGenre> ();
Collection<ModeleIndividu> lstActeurs = null;
// On commence par creer le realisateur
ModeleIndividu realisateur = new ModeleIndividu(prenomRealisateur, nomRealisateur);
// On recupere le titre du film.
titre =_pnl.get_txtTitreFilm().getText();
// On construit la liste des genres.
for(int i=0; i<_pnl.get_lstGenres().getItemCount(); i++){
Genre1 = _pnl.get_lstGenres().getItem(i).split(" - ");
codeGenre = Genre1[0];
labelGenre = Genre1[1];
ModeleGenre unGenre = new ModeleGenre(codeGenre, labelGenre );
lstGenres.add(unGenre);
unGenre.finalize();
}
// On construit la liste des acteurs.
lstActeurs = this.ajoutActeurs();
// On ajoute le film a partir de tous ces parametres.
_mod.ajouterFilm(titre, lstGenres, realisateur, lstActeurs);
}
catch (DataFormatException dataFExcept){
info.showMessageDialog(_pnl, dataFExcept.getMessage(), ".:: Ajouter un film ::.", info.ERROR_MESSAGE);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* Methode qui construit la liste des acteurs a ajouter.
* Elle est appelee dans la methode ajouterFilm ci-dessus
*
*/
@SuppressWarnings("static-access")
public Collection<ModeleIndividu> ajoutActeurs() {
Collection<ModeleIndividu> lstActeurs = new Vector<ModeleIndividu> ();
JOptionPane info = new JOptionPane();
try {
String[] Acteur;
String prenomActeur, nomActeur;
for(int i=0; i<_pnl.get_lstActeurs().getItemCount(); i++){
Acteur = _pnl.get_lstActeurs().getItem(i).split("_");
prenomActeur = Acteur[0];
nomActeur = null;
if(_pnl.get_lstActeurs().getItem(i).contains("_"))
nomActeur = Acteur[1];
ModeleIndividu unActeur = new ModeleIndividu(prenomActeur, nomActeur);
lstActeurs.add(unActeur);
unActeur.finalize();
}
} catch (DataFormatException e) {
info.showMessageDialog(_pnl, e.getMessage(), ".:: Ajout d'un acteur ::.", info.ERROR_MESSAGE);
}
return lstActeurs;
}
/**
*
* Methode permettant de verifier si l'acteur a deja
* ete ajoute a la liste des acteurs du film.
*
* @param chaine prenom et nom de l'acteur
* @return true si l'acteur est deja present
*
*/
public boolean acteurDejaAjoute(String chaine){
boolean dejaAjoute = false;
int i = 0;
while (!dejaAjoute && (i <_pnl.get_lstActeurs().getItemCount())){
if(chaine.toLowerCase().equals(_pnl.get_lstActeurs().getItem(i).toLowerCase())){
dejaAjoute = true;
}
i++;
}
return dejaAjoute;
}
/**
*
* Methode permettant de savoir si le genre a deja ete
* ajoute dans la liste des genres du film.
*
* @param chaine le codeGenre et le libelle du genre
* @return true si le genre est deja dans la liste
*
*/
public boolean genreDejaAjoute(String chaine){
boolean dejaAjoute = false;
int i = 0;
while (!dejaAjoute && (i <_pnl.get_lstGenres().getItemCount())){
if(chaine.toLowerCase().equals(_pnl.get_lstGenres().getItem(i).toLowerCase())){
dejaAjoute = true;
}
i++;
}
return dejaAjoute;
}
}