package gui.chauffeur.contrat;
import static gui.MotsCleProjet.CMD_CANCEL;
import static gui.MotsCleProjet.CMD_OK;
import static gui.MotsCleProjet.DATE_ERREUR_TEXTE;
import static gui.MotsCleProjet.IsNumString;
import static gui.util.TaxiGuiUtil.FabricationButton;
import static gui.util.TaxiGuiUtil.MessageBox;
import gui.DateCalendar;
import gui.JTextControlKey;
import gui.MainWindow;
import gui.MotsCleProjet;
import gui.PrjException;
import gui.chauffeur.gestionchauffeur.ChauffeurAffichable;
import gui.commun.etat.EtatAffichable;
import gui.util.ErreurDeValidation;
import gui.util.TaxiGuiUtil;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Point;
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.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import util.Periode;
import modele.chauffeur.Chauffeur;
import modele.chauffeur.Contrat;
import modele.chauffeur.IChauffeur;
import modele.chauffeur.MotifFinContrat;
import modele.chauffeur.PeriodeDeTravail;
import modele.commun.Etat;
import dao.GestionnaireDeStockage;
import dao.IDao;
import dao.IPeriodeDeTravailDao;
/**
* class PeriodeTravailEditionFenetre
* Cr�e interface graphique pour ajouter ou modifier un enregistrement
* @author Kasandra
*
*/
public class PeriodeTravailEditionFenetre implements ActionListener {
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private JTextControlKey textLibelle;
private JLabel titres, textDtDebCont, textDtFinCont;
private PeriodeDeTravail periodeDeTravail = new PeriodeDeTravail();
private JComboBox cmbEtats;
//private Periode periode = new Periode(dateDeb, dateFin);
private JPanel titre;
Date dateDeb, dateFin;
static Font titreFont = new Font("Tahoma", 1, 12);
ImageIcon ani;
private JLabel labLib;
private JComboBox cmbContrat=null, cmbChauffeur= null, cmbMotifFinContrat=null;
protected boolean okFlag;
public boolean OK_Button() {
return okFlag;
}
/**
* Constructeur
*/
public PeriodeTravailEditionFenetre() {
aDialog = new JDialog(MainWindow.cadrePrincipal(), " P�riode de travail...", true);
textLibelle = new JTextControlKey("", 30, IsNumString);
cmbChauffeur = new JComboBox(getListeChauffeur());
cmbContrat = new JComboBox(getListeContrat());
cmbMotifFinContrat = new JComboBox(getListeMotifFinContrat());
ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"));
textDtDebCont= new JLabel();
textDtDebCont.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textDtDebCont.setIcon(ani);
textDtDebCont.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), DateCalendar.Mode.DATE_SEULEMENT);
fen.affiche();
if (fen.okFlag) {
//Date date = fen.retourDate();
Date date = fen.retourDateSansTime();
textDtDebCont.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(date));
} else {
textDtDebCont.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) {}
});
//textDateFin = new JTextControlKey("",10,IsNumString);
ani = new ImageIcon(getClass().getClassLoader().getResource("images/logoCalender.jpg"));
textDtFinCont= new JLabel();
textDtFinCont.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(66, 79, 120), 2));
textDtFinCont.setIcon(ani);
textDtFinCont.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
DateCalendar fen = new DateCalendar(MainWindow.cadrePrincipal(), DateCalendar.Mode.DATE_SEULEMENT);
fen.affiche();
if (fen.okFlag) {
Date date = fen.retourDateSansTime();
textDtFinCont.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(date));
} else {
textDtFinCont.setText("");
}
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
cmbEtats = new JComboBox(getListeEtats());
okFlag = false;
}
/**
* Initialise p�riode de travail
* @param periode
*/
public void initializeDonnee(PeriodeDeTravail periodeDeTravail){
this.periodeDeTravail = periodeDeTravail;
textLibelle.ChampsTxt.setText(periodeDeTravail.getDescriptionPeriodeTravail());
selectionneChauffeur(periodeDeTravail.getChauffeur());
selectionneContrat(periodeDeTravail.getContrat());
selectionneMotifFinContrat(periodeDeTravail.getMotifFinContrat());
textDtDebCont.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(periodeDeTravail.getDateDebut()));
Date dateFin2 = periodeDeTravail.getDateFin();
if (dateFin2 != null) {
textDtFinCont.setText(new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).format(dateFin2));
} else {
textDtFinCont.setText("");
}
selectionneEtat(periodeDeTravail.getEtat());
}
/**
* Selectionne Etat
* @param etat
*/
private void selectionneEtat(Etat etat) {
int nbEtats = cmbEtats.getItemCount();
for (int i = 0; i<nbEtats; i++) {
if (((EtatAffichable)cmbEtats.getItemAt(i)).getEtat().getCdeEtat().equals(etat.getCdeEtat())) {
cmbEtats.setSelectedIndex(i);
break;
}
}
}
/**
* Selectionne chauffeur
* @param chauffeur
*/
private void selectionneChauffeur(Chauffeur chauffeur) {
int nbChauffeur = cmbChauffeur.getItemCount();
for (int i = 0; i< nbChauffeur; i++) {
if (((ChauffeurAffichable<?>)cmbChauffeur.getItemAt(i)).getChauffeur().getId().equals(chauffeur.getId())) {
cmbChauffeur.setSelectedIndex(i);
break;
}
}
}
/**
* SelectionneContrat
* @param contrat
*/
private void selectionneContrat(Contrat contrat) {
int nbContrat = cmbContrat.getItemCount();
for (int i = 0; i< nbContrat; i++) {
if (((ContratAffichable)cmbContrat.getItemAt(i)).getContrat().getId().equals(contrat.getId())) {
cmbContrat.setSelectedIndex(i);
break;
}
}
}
/**
* S�lectionne motif fin contrat
* @param motifFinContrat
*/
private void selectionneMotifFinContrat(MotifFinContrat motifFinContrat) {
int nbMotifFinContrat = cmbMotifFinContrat.getItemCount();
for (int i = 0; i< nbMotifFinContrat; i++) {
if (((MotifFinContratAffichable)cmbMotifFinContrat.getItemAt(i)).getMotifFinContrat().getId().equals(motifFinContrat.getId())) {
cmbMotifFinContrat.setSelectedIndex(i);
break;
}
}
}
/**
* Renvoie p�riode
* @return
*/
public PeriodeDeTravail renvoiPeriodeTravail() {
return periodeDeTravail;
}
/**
* Cr�e panel description p�riode de travail
* @return
*/
private JPanel creeLibellePane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
labLib = new JLabel(" Description p�riode de travail : *");
labLib.setFont(titreFont);
labLib.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labLib);
parameterPane.add(textLibelle.ChampsTxt);
return parameterPane;
}
/**
* Cr�e panel contrat
* @return
*/
private JPanel creeContratPane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labContrat = new JLabel(" Contrat : *");
labContrat.setFont(titreFont);
labContrat.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labContrat);
parameterPane.add(cmbContrat);
return parameterPane;
}
/**
* Cr�e motif fin contrat
* @return
*/
private JPanel creeMotifFinContratPane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labMotifin = new JLabel(" MotifFinContrat : ");
labMotifin.setFont(titreFont);
labMotifin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labMotifin);
parameterPane.add(cmbMotifFinContrat);
return parameterPane;
}
/**
* Cr�e panel chauffeur
* @return
*/
private JPanel creeChauffeurPane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labDateChauf = new JLabel(" Chauffeur : *");
labDateChauf.setFont(titreFont);
labDateChauf.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateChauf);
parameterPane.add(cmbChauffeur);
return parameterPane;
}
/**
* Cr�e panel date d�but
* @return
*/
private JPanel creeDateDebutPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labDateDeb = new JLabel(" Date d�but : *");
labDateDeb.setFont(titreFont);
labDateDeb.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateDeb);
parameterPane.add(textDtDebCont);
return parameterPane;
}
/**
* Cr�e panel dateFin
* @return
*/
private JPanel creeDateFinPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labDateFin = new JLabel(" Date fin : *");
labDateFin.setFont(titreFont);
labDateFin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labDateFin);
parameterPane.add(textDtFinCont);
return parameterPane;
}
/**
* Cr�e panel �tat p�riode de travail
* @return
*/
private JPanel creeEtatPeriodeTravailPane()
{
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.white);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(450, 25));
JLabel labEtat = new JLabel(" Etat Periode travail : *");
labEtat.setFont(titreFont);
labEtat.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labEtat);
parameterPane.add(cmbEtats);
return parameterPane;
}
/**
*
* @return titre du formulaire
*
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText(" Fiche p�riode de travail");
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() throws PrjException {
try {
JToolBar toolBar = new JToolBar("Outils...");
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(new Color(170, 207, 249));
parameterPane.setLayout(new FlowLayout());
parameterPane.setPreferredSize(new Dimension(600, 300));
//parameterPane.setBorder(BorderFactory.createTitledBorder(" "));
parameterPane.add(creeLibellePane());
parameterPane.add(creeChauffeurPane());
parameterPane.add(creeContratPane());
parameterPane.add(creeMotifFinContratPane());
parameterPane.add(creeDateDebutPane());
parameterPane.add(creeDateFinPane());
parameterPane.add(creeEtatPeriodeTravailPane());
aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
aDialog.getContentPane().add(parameterPane, BorderLayout.CENTER);
aDialog.getContentPane().add(toolBar, BorderLayout.PAGE_END);
toolBar.setBackground(new 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);
} catch (NullPointerException exc) {
throw new PrjException(exc.getMessage());
}
}
/**
* Gestionnaire des �v�nements
*/
public void actionPerformed(ActionEvent e) {
try {
// Restaure la couleur de fonds par d�faut.
for (JComponent composant : Arrays.<JComponent>asList(textLibelle.ChampsTxt, textDtDebCont, textDtFinCont)) {
composant.setBackground(Color.WHITE);
composant.setToolTipText("");
}
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
Vector<ErreurDeValidation> erreursDeValidation = new Vector<ErreurDeValidation>();
if (textLibelle.ChampsTxt.getText().trim().equals("")) {
erreursDeValidation.add(new ErreurDeValidation(textLibelle.ChampsTxt, "le champ 'description p�riode contrat' est obligatoire."));
}
Date dateDebut = null;
try {
dateDebut = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textDtDebCont.getText());
periodeDeTravail.setDateDebut(dateDebut);
} catch (ParseException e1) {
//TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
erreursDeValidation.add(new ErreurDeValidation(textDtDebCont, "le champ 'date d�but p�riode contrat' est obligatoire: attendu " + gui.MotsCleProjet.DATE_FORMAT));
}
Date dateFin = null;
if (textDtFinCont.getText().trim().equals("")) {
periodeDeTravail.setDateFin(null);
} else {
try {
dateFin = new SimpleDateFormat(gui.MotsCleProjet.DATE_FORMAT).parse(textDtFinCont.getText());
periodeDeTravail.setDateFin(dateFin);
} catch (ParseException e1) {
//TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT, "Erreur");
erreursDeValidation.add(new ErreurDeValidation(textDtFinCont, "le champ 'date d�but p�riode contrat' est obligatoire: attendu " + gui.MotsCleProjet.DATE_FORMAT));
}
}
if (dateDebut != null) {
// v�rifier que le chauffeur n'a pas de de p�riode de travail pour les dates sp�cifi�es.
Collection<PeriodeDeTravail> periodesDeTravailExistantesDuChauffeur = getPeriodeDeTravailDao().findByChauffeur(getChauffeurSelectionne());
for (PeriodeDeTravail periodeDeTravailExistante : periodesDeTravailExistantesDuChauffeur) {
if (!periodeDeTravailExistante.getId().equals(periodeDeTravail.getId())) {
if (periodeDeTravailExistante.getPeriode().couvre(new Periode(dateDebut, dateFin))) {
erreursDeValidation.add(new ErreurDeValidation(textDtFinCont, "Une p�riode de travail est d�j� d�finie porula p�riode [" + new SimpleDateFormat(MotsCleProjet.DATE_FORMAT).format(dateDebut) + "," + (dateFin != null ? new SimpleDateFormat(MotsCleProjet.DATE_FORMAT).format(dateFin) : "<null>" )+ "]"));
}
}
}
}
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{
periodeDeTravail.setDescriptionPeriodeTravail( textLibelle.ChampsTxt.getText());
periodeDeTravail.setChauffeur(getChauffeurSelectionne());
periodeDeTravail.setContrat(getContratSelectionne());
periodeDeTravail.setMotifFinContrat(getMotifFinContratSelectionne());
periodeDeTravail.setEtat(getEtatSelectionne());
okFlag = true;
aDialog.setVisible(false);
}
}
else if (CMD_CANCEL.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
} catch (Exception ex) {
ex.printStackTrace();
TaxiGuiUtil.MessageBox(MainWindow.desktop(), "Erreur syst�me : " + ex.getMessage(), "Erreur syst�me");
}
}
/**
* S�lectionne �tat p�riode de travail
* @return
*/
private Etat getEtatSelectionne() {
return ((EtatAffichable)cmbEtats.getSelectedItem()).getEtat();
}
/**
* S�lectionne contrat
* @return
*/
private Contrat getContratSelectionne() {
return ((ContratAffichable)cmbContrat.getSelectedItem()).getContrat();
}
/**
* S�lectionne chauffeur
* @return
*/
private Chauffeur getChauffeurSelectionne() {
return ((ChauffeurAffichable<Chauffeur>)cmbChauffeur.getSelectedItem()).getChauffeur();
}
/**
* renvoie motif fin contrat
* @return
*/
private MotifFinContrat getMotifFinContratSelectionne() {
return ((MotifFinContratAffichable)cmbMotifFinContrat.getSelectedItem()).getMotifFinContrat();
}
/**
*
* @return contratAffichables
*/
private Vector<ContratAffichable> getListeContrat() {
Vector<ContratAffichable> contratAffichables = new Vector<ContratAffichable>();
ArrayList<Contrat> contrat = getContratDao().findAll();
for (Contrat econtrat : contrat) {
contratAffichables.add(new ContratAffichable(econtrat));
}
return contratAffichables;
}
/**
*
* @return IDao<Contrat> contrat
*/
private IDao<Contrat> getContratDao() {
try {
return GestionnaireDeStockage.getInstance().getContratDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
/**
*
* @return motifFinContratAffichables
*/
private Vector<MotifFinContratAffichable> getListeMotifFinContrat() {
Vector<MotifFinContratAffichable> motifFinContratAffichables = new Vector<MotifFinContratAffichable>();
ArrayList<MotifFinContrat> motifFinContrat = getMotifFinContratDao().findAll();
for (MotifFinContrat emotifFinContrat : motifFinContrat) {
motifFinContratAffichables.add(new MotifFinContratAffichable(emotifFinContrat));
}
return motifFinContratAffichables;
}
/**
*
* @return IDao<MotifFinContrat> motif fin contrat
*/
private IDao<MotifFinContrat> getMotifFinContratDao() {
try {
return GestionnaireDeStockage.getInstance().getMotifFinContratDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
/**
*
* @return chauffeurAffichables
*/
private Vector<ChauffeurAffichable<? extends IChauffeur>> getListeChauffeur() {
Vector<ChauffeurAffichable<? extends IChauffeur>> chauffeurAffichables = new Vector<ChauffeurAffichable<? extends IChauffeur>>();
ArrayList<Chauffeur> chauffeur = getChauffeurDao().findAll();
for (Chauffeur echauffeur : chauffeur) {
chauffeurAffichables.add(new ChauffeurAffichable<Chauffeur>(echauffeur));
}
return chauffeurAffichables;
}
/**
*
* @return IDao<Chauffeur> chauffeur
*/
private IDao<Chauffeur> getChauffeurDao() {
try {
return GestionnaireDeStockage.getInstance().getChauffeurDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
/**
*
* @return etatsAffichables
*/
private Vector<EtatAffichable> getListeEtats() {
Vector<EtatAffichable> etatsAffichables = new Vector<EtatAffichable>();
ArrayList<Etat> etats = getEtatDao().findAll();
for (Etat etat : etats) {
etatsAffichables.add(new EtatAffichable(etat));
}
return etatsAffichables;
}
/**
* retourne l'instance de la classe MysqlEtatDao pour pouvoir
* utiliser les m�thodes de l'interface IDao
* @return IDao<Etat>
*/
private IDao<Etat> getEtatDao() {
try {
return GestionnaireDeStockage.getInstance().getEtatDao();
} 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 MysqlPeriodeDeTravailDao pour pouvoir
* utiliser les m�thodes de l'interface IPeriodeDeTravailDao
* @return IPeriodeDeTravailDao
*/
private IPeriodeDeTravailDao getPeriodeDeTravailDao() {
try {
return GestionnaireDeStockage.getInstance().getPeriodeDeTravailDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}