package gui.chauffeur.avertissement;
import static gui.MotsCleProjet.CMD_CANCEL;
import static gui.MotsCleProjet.CMD_OK;
import static gui.MotsCleProjet.DATE_ERREUR_TEXTE;
import static gui.util.TaxiGuiUtil.FabricationButton;
import static gui.util.TaxiGuiUtil.MessageBox;
import gui.*;
import gui.chauffeur.gestionchauffeur.ChauffeurAffichable;
import gui.util.ErreurDeValidation;
import gui.util.TaxiGuiUtil;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.*;
import modele.chauffeur.*;
import dao.GestionnaireDeStockage;
import dao.IDao;
import dao.IReadOnlyDao;
/**
* class AvertissementEditionFenetre \n
* cr�e une fen�tre pour ajouter, modifier un enregistrement
* @author Kasandra
*
*/
class AvertissementEditionFenetre implements ActionListener {
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private JComboBox cmbChauf, cmbTypeAverti;
private JTextArea textDescrip;
private JLabel labDescrip, titres, labDateAverti, labIdChauf, labIdTypeAverti, textDtAverti, textDtFinAverti, labDateFin;
Date current = new GregorianCalendar().getTime();
ImageIcon ani;
private JComboBox cmbEtats;
private JPanel titre;
private Avertissement avertissement = new Avertissement();
static Font titreFont = new Font("Tahoma", 1, 12);
protected boolean okFlag;
public boolean OK_Button() {
return okFlag;
}
/**
* Constructeur
*/
public AvertissementEditionFenetre() {
aDialog = new JDialog(MainWindow.cadrePrincipal(), " Avertissement...", true);
textDescrip = new JTextArea();
textDescrip.setFont(titreFont);
textDescrip.setForeground(new java.awt.Color(66, 79, 120));
ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"));
textDtAverti = new JLabel();
textDtAverti.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textDtAverti.setIcon(ani);
textDtAverti.setFont(titreFont);
textDtAverti.setForeground(new java.awt.Color(66, 79, 120));
textDtAverti.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), 0, DateCalendar.Mode.DATE_SEULEMENT);
fen.affiche();
if (fen.okFlag) {
Date dateDebut = fen.retourDate();
if (dateDebut.after(new Date())) {
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
} else {
avertissement.setDateDebut(dateDebut);
textDtAverti.setText(new SimpleDateFormat(MotsCleProjet.DATE_FORMAT).format(dateDebut));
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateDebut);
calendar.add(Calendar.MONTH, 6);
textDtFinAverti.setText(new SimpleDateFormat(MotsCleProjet.DATE_FORMAT).format(calendar.getTime()));
}
} else {
textDtAverti.setText(DATE_ERREUR_TEXTE);
MessageBox(MainWindow.desktop(), "DATE INVALIDE...");
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
textDtFinAverti = new JLabel();
textDtFinAverti.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textDtFinAverti.setEnabled(false);
textDtFinAverti.setFont(titreFont);
textDtFinAverti.setForeground(new java.awt.Color(66, 79, 120));
cmbChauf = new JComboBox(getListeChauffeur());
cmbTypeAverti = new JComboBox(getListeTypeAvertissement());
cmbTypeAverti.setFont(titreFont);
okFlag = false;
}
/**
* Initialise les donn�es
*/
public void initializeDonnee(Avertissement avertissement) {
this.avertissement = avertissement;
textDescrip.setText(avertissement.getDescription());
textDtAverti.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(avertissement.getDateDebut()));
textDtFinAverti.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(avertissement.getDateFin()));
selectionneChauffeur(avertissement.getChauffeur());
selectionneTypeAvertissement(avertissement.getTypeAvertissement());
}
/**
* Selectionne r�f�rence chauffeur
* @param chauffeur
*/
private void selectionneChauffeur(ReferenceChauffeur chauffeur) {
int nbChauf = cmbChauf.getItemCount();
for (int i = 0; i<nbChauf; i++) {
@SuppressWarnings("unchecked")
ChauffeurAffichable<ReferenceChauffeur> chauffeurAffichable = (ChauffeurAffichable<ReferenceChauffeur>)cmbChauf.getItemAt(i);
if (chauffeurAffichable.getChauffeur().getId().equals(chauffeur.getId())) {
cmbChauf.setSelectedIndex(i);
break;
}
}
}
/**
* Selectionne type avertissement
* @param typeAvertissement
*/
private void selectionneTypeAvertissement(TypeAvertissement typeAvertissement) {
int nbTypeAverti = cmbTypeAverti.getItemCount();
for (int i = 0; i<nbTypeAverti; i++) {
if (((TypeAvertissementAffichable)cmbTypeAverti.getItemAt(i)).getTypeAvertissement().getId().equals(typeAvertissement.getId())) {
cmbTypeAverti.setSelectedIndex(i);
break;
}
}
}
/**
*
* @return avertissement
*/
public Avertissement renvoiAvertissement() {
return avertissement;
}
/**
* Panel description
*
* @return
*/
private JPanel creeDescripPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(600, 50));
labDescrip = new JLabel(" Description : *");
labDescrip.setFont(titreFont);
labDescrip.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDescrip);
// parameterPane.add(textDescrip.ChampsTxt);
parameterPane.add(textDescrip);
return parameterPane;
}
/**
* Panel date avertissement
*
* @return
*/
private JPanel creeDateDebAvertiPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(600, 25));
labDateAverti = new JLabel(" Date avertissement : *");
labDateAverti.setFont(titreFont);
labDateAverti.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateAverti);
parameterPane.add(textDtAverti);
return parameterPane;
}
private JPanel creeDateFinPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(600, 25));
labDateFin = new JLabel(" Date Fin : *");
labDateFin.setFont(titreFont);
labDateFin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateFin);
parameterPane.add(textDtFinAverti);
return parameterPane;
}
/**
* Panel id chauffeur
*
* @return
*/
private JPanel creeChauffeurPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(600, 25));
labIdChauf = new JLabel(" Id chauffeur :");
labIdChauf.setFont(titreFont);
labIdChauf.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labIdChauf);
parameterPane.add(cmbChauf);
return parameterPane;
}
/**
* Panel id type contrat
*
* @return
*/
private JPanel creeTypeAvertissementPane() {
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(600, 25));
labIdTypeAverti = new JLabel(" Id type avertissement :");
labIdTypeAverti.setFont(titreFont);
labIdTypeAverti.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labIdTypeAverti);
parameterPane.add(cmbTypeAverti);
return parameterPane;
}
/**
* Renvoie titre formulaire
*
* @return
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText(" Fiche avertissement");
titres.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
titres.setForeground(new Color(255, 255, 255));
titre = new JPanel();
titre.setLayout(new GridBagLayout());
titre.setPreferredSize(new Dimension(50, 45));
titre.setBackground(new Color(66, 79, 120));
titre.add(titres, gridBagTitre);
}
return titre;
}
/**
* D�finit la fen�tre et ses composants
*/
public void affiche() {
JToolBar toolBar = new JToolBar("Outils...");
JPanel parameterPane = new JPanel(false);
parameterPane.setLayout(new FlowLayout());
parameterPane.setPreferredSize(new Dimension(650, 300));
parameterPane.add(creeDescripPane());
parameterPane.add(creeDateDebAvertiPane());
parameterPane.add(creeDateFinPane());
parameterPane.add(creeChauffeurPane());
parameterPane.add(creeTypeAvertissementPane());
aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
aDialog.getContentPane().add(parameterPane, BorderLayout.CENTER);
aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_END);
toolBar.setBackground(new java.awt.Color(66, 79, 120));
toolBar.add(FabricationButton("OK", CMD_OK, "OK...", this));
toolBar.add(FabricationButton("ANNULER", CMD_CANCEL, "Annuler...", this));
Point p = MainWindow.cadrePrincipal().getLocation();
aDialog.setLocation((p.x + 450), (p.y + 200));
aDialog.pack();
aDialog.setVisible(true);
}
/**
* Gestionnaire des �v�nements
*/
public void actionPerformed(ActionEvent e) {
try {
// Restaure la couleur de fonds par d�faut.
for (JComponent composant : Arrays.<JComponent>asList(textDescrip, textDtAverti)) {
composant.setBackground(Color.WHITE);
composant.setToolTipText("");
}
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
Vector<ErreurDeValidation> erreursDeValidation = new Vector<ErreurDeValidation>();
if (textDescrip.getText().trim().equals("")) {
erreursDeValidation.add(new ErreurDeValidation(textDescrip, "le champ 'description avertissement' est obligatoire."));
}
Date dateAverti;
try {
dateAverti = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textDtAverti.getText());
avertissement.setDateDebut(dateAverti);
} catch (ParseException e1) {
erreursDeValidation.add(new ErreurDeValidation(textDtAverti, "le format date est invalide' "+ gui.MotsCleProjet.DATE_FORMAT));
//TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
}
if (!erreursDeValidation.isEmpty()) {
StringBuffer erreurAffichee = new StringBuffer();
for (ErreurDeValidation erreurDeValidation : erreursDeValidation) {
erreurAffichee.append(erreurDeValidation.getMessageErreur());
erreurAffichee.append("\n");
erreurDeValidation.getComposant().setBackground(Color.RED);
erreurDeValidation.getComposant().setToolTipText(erreurDeValidation.getMessageErreur());
}
TaxiGuiUtil.MessageBox(MainWindow.desktop(), erreurAffichee.toString(), "ERREUR");
return;
}
else{
avertissement.setDescription(textDescrip.getText());
Date dateFinAverti;
try {
dateFinAverti = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textDtFinAverti.getText());
avertissement.setDateFin(dateFinAverti);
} catch (ParseException e1) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
}
avertissement.setChauffeur(getChauffeurSelectionne());
avertissement.setTypeAvertissement(getTypeAvertissementSelectionne());
okFlag = true;
aDialog.setVisible(false);
} }
else if (CMD_CANCEL.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
}catch(Exception ex) {
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Erreur syst�me : " + ex.getMessage(), "Erreur syst�me");
}
}
/**
* Selectionne le chauffeur
* @return
*/
private ReferenceChauffeur getChauffeurSelectionne() {
@SuppressWarnings("unchecked")
ChauffeurAffichable<ReferenceChauffeur> chauffeurAffichable = (ChauffeurAffichable<ReferenceChauffeur>)cmbChauf.getSelectedItem();
return chauffeurAffichable.getChauffeur();
}
/**
* S�lmectionne type avertissement
* @return
*/
private TypeAvertissement getTypeAvertissementSelectionne() {
return ((TypeAvertissementAffichable)cmbTypeAverti.getSelectedItem()).getTypeAvertissement();
}
private Vector<ChauffeurAffichable<? extends IChauffeur>> getListeChauffeur() {
Vector<ChauffeurAffichable<? extends IChauffeur>> chauffeurAffichables = new Vector<ChauffeurAffichable<? extends IChauffeur>>();
ArrayList<ReferenceChauffeur> chauffeurs = getReferenceChauffeurDao().findAll();
for (ReferenceChauffeur chauffeur : chauffeurs) {
chauffeurAffichables.add(new ChauffeurAffichable<ReferenceChauffeur>(chauffeur));
}
return chauffeurAffichables;
}
private Vector<TypeAvertissementAffichable> getListeTypeAvertissement() {
Vector<TypeAvertissementAffichable> typeAvertissementAffichables = new Vector<TypeAvertissementAffichable>();
ArrayList<TypeAvertissement> typeAvertissement = getTypeAvertissementDao().findAll();
for (TypeAvertissement etypeAvertissement : typeAvertissement) {
typeAvertissementAffichables.add(new TypeAvertissementAffichable(etypeAvertissement));
}
return typeAvertissementAffichables;
}
/**
* retourne l'instance de la classe MySqlReferenceChauffeurDao pour pouvoir
* utiliser les m�thodes de l'interface IReadOnlyDao<ReferenceChauffeur>
* @return IReadOnlyDao<ReferenceChauffeur>
*/
private IReadOnlyDao<ReferenceChauffeur> getReferenceChauffeurDao() {
try {
return GestionnaireDeStockage.getInstance().getReferenceChauffeurDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
/**
* retourne l'instance de la classe MySqlTypeAvertissementDao pour pouvoir
* utiliser les m�thodes de l'interface IDao
* @return IDao<TypeAvertissement>
*/
private IDao<TypeAvertissement> getTypeAvertissementDao() {
try {
return GestionnaireDeStockage.getInstance().getTypeAvertissementDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}