package gui.course.trajet;
import static gui.MotsCleProjet.CMD_CANCEL;
import static gui.MotsCleProjet.CMD_OK;
import static gui.MotsCleProjet.IsNum;
import static gui.MotsCleProjet.IsNumString;
import static gui.util.TaxiGuiUtil.FabricationButton;
import gui.*;
import gui.course.tournee.TourneeAffichable;
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.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;
import javax.swing.*;
import modele.course.Tournee;
import modele.course.Trajet;
import util.HourFilter;
import dao.GestionnaireDeStockage;
import dao.ITourneeDao;
/**
* <p>TrajetEditionFenetre est la classe qui cr�e les composants de l'interface utilisateur</p>
* <p> Elle cr�e une fenetre dans laquelle on peut encoder ou de modifier de(s) enregistrement(s)</p>
* <p> cette classe n'est pas exploit�e pour le moment, car on encode tout dans la fen�tre de la tourn�e</p>
*
* @author Kasandra
*
*/
public class TrajetEditionFenetre implements ActionListener {
private JDialog aDialog;// R�f�rence � la boite de dialogue.
private JTextControlKey textAdrDep;
private JTextControlKey textKmDep;
private JTextControlKey textHrDep;
private JTextControlKey textAdrArriv;
private JTextControlKey textKmArriv;
private JTextControlKey textHrArriv;
private JTextControlKey textPrixCourse;
// private JTextControlKey textPxSuppleCourse;
static Font titreFont = new Font("Tahoma", 1, 12);
private JTextField txtPrixTraj, txtPrixSuplTraj;
private JTextField txtHrFinTraj, txtHrDebTraj, txtTotHrTraj;
private JTextField txtTotKmTrajet, txtTotPrixTraj;
private JPanel PaneTotaux = null;
private JLabel labAdrDep, labAdrFin, labKmDep, labKmFin, labHrDep, labHrFin, labPrix, labSupPrix, labTotKmTrajet, labTotHrTrajet, labTChauf;
private JComboBox cmbTrneeChauf;
private JLabel labTotPrix;
private JLabel titres;
JPanel titre = null;
private Trajet trajet = new Trajet();
/**
* Affiche le titre du formulaire
*
* @return titre
*/
private JPanel getTitre() {
if (titre == null) {
GridBagConstraints gridBagTitre = new GridBagConstraints();
gridBagTitre.gridx = 0;
gridBagTitre.gridy = 0;
titres = new JLabel();
titres.setText("Fiche trajet");
titres.setFont(new java.awt.Font("Comic Sans MS", 1, 20));
titres.setForeground(new java.awt.Color(255, 255, 255));
titre = new JPanel();
titre.setLayout(new GridBagLayout());
titre.setPreferredSize(new Dimension(50, 45));
titre.setBackground(new java.awt.Color(66, 79, 120));
titre.add(titres, gridBagTitre);
}
return titre;
}
/**
* Constructeur de la classe TrajetEditionFenetre
*/
public TrajetEditionFenetre() {
aDialog = new JDialog(MainWindow.cadrePrincipal(), " Fiche trajet ...", true);
cmbTrneeChauf = new JComboBox(getListeTournee());
textAdrDep = new JTextControlKey("", 50, IsNumString);
textKmDep = new JTextControlKey("", 10, IsNum);
getTxtHrDebTraj();
textAdrArriv = new JTextControlKey("", 50, IsNumString);
textKmArriv = new JTextControlKey("", 10, IsNum);
getTxtHrFinTraj();
getTextPrixTraj();
getTxtPrixSuplTrajet();
getTxtTotPrixTraj();
getTxtTotKmTrajet();
okFlag = false;
}
private boolean okFlag;
boolean OK_Button() {
return okFlag;
}
/**
* calcule somme
* @param a
* @param b
* @return
*/
public Double calculeSomme(String a, String b) {
Double n1, n2, som;
n1 = new Double(a);
n2 = new Double(b);
som = n1 + n2;
txtTotPrixTraj.setText(som.toString());
return som;
}
/**
* retourne texte total km trajet
* @return
* txtTotKmTrajet
*/
private JTextField getTxtTotKmTrajet() {
if (txtTotKmTrajet == null) {
txtTotKmTrajet = new JTextField();
txtTotKmTrajet.setFont(titreFont);
txtTotKmTrajet.setForeground(new java.awt.Color(66, 79, 120));
txtTotKmTrajet.setPreferredSize(new java.awt.Dimension(70, 20));
txtTotKmTrajet.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
Integer nb = 0;
nb = calculeTotKmTrajet(textKmDep.ChampsTxt.getText(), textKmArriv.ChampsTxt.getText());
txtTotKmTrajet.setText("" + nb);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
txtTotKmTrajet.setEditable(false);
}
return txtTotKmTrajet;
}
/**
* retourne total prix trajet
* @return
* txtTotPrixTraj
*/
private JTextField getTxtTotPrixTraj() {
if (txtTotPrixTraj == null) {
txtTotPrixTraj = new JTextField();
txtTotPrixTraj.setFont(titreFont);
txtTotPrixTraj.setForeground(Color.blue);
txtTotPrixTraj.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
double nb = 0.0;
nb = calculeSomme(txtPrixTraj.getText(), txtPrixSuplTraj.getText());
txtTotPrixTraj.setText("" + nb);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
txtTotPrixTraj.setPreferredSize(new java.awt.Dimension(70, 20));
txtTotPrixTraj.setEditable(false);
}
return txtTotPrixTraj;
}
/**
* Calcule total km trajet
* @param a
* @param b
* @return
*/
public Integer calculeTotKmTrajet(String a, String b) {
int n1, n2, som1;
n1 = new Integer(a);
n2 = new Integer(b);
som1 = n2 - n1;
txtTotKmTrajet.setText("" + som1);
return som1;
}
/**
* Retourne prix trajet
* @return
* txtPrixTra
*/
public JTextField getTextPrixTraj() {
if (txtPrixTraj == null) {
txtPrixTraj = new JTextField();
txtPrixTraj.setFont(titreFont);
txtPrixTraj.setForeground(new java.awt.Color(66, 79, 120));
txtPrixTraj.getText();
}
return txtPrixTraj;
}
/**
* Retourne prix supplement trajet
* @return
* txtPrixSuplTraj
*/
public JTextField getTxtPrixSuplTrajet() {
if (txtPrixSuplTraj == null) {
txtPrixSuplTraj = new JTextField();
txtPrixSuplTraj.setFont(titreFont);
txtPrixSuplTraj.setForeground(new java.awt.Color(66, 79, 120));
txtPrixSuplTraj.getText();
}
return txtPrixSuplTraj;
}
public JTextField getTxtHrDebTraj() {
if (txtHrDebTraj == null) {
txtHrDebTraj = new JTextField();
txtHrDebTraj.setFont(titreFont);
txtHrDebTraj.setForeground(new java.awt.Color(66, 79, 120));
txtHrDebTraj.setDocument(new HourFilter());
txtHrDebTraj.getText();
}
return txtHrDebTraj;
}
/**
* Retourne texte heure fin trajet
* @return
* txtHrFinTraj
*/
public JTextField getTxtHrFinTraj() {
if (txtHrFinTraj == null) {
txtHrFinTraj = new JTextField();
txtHrFinTraj.setFont(titreFont);
txtHrFinTraj.setForeground(new java.awt.Color(66, 79, 120));
txtHrFinTraj.setDocument(new HourFilter());
}
return txtHrFinTraj;
}
/**
* Intitialise le trajet
* @param trajet
*/
public void initializeDonnee(Trajet trajet) {
this.trajet = trajet;
selectionneTournee(trajet.getTournee());
textAdrDep.ChampsTxt.setText(trajet.getAddresseDepart());
textKmDep.ChampsTxt.setText(Long.toString(trajet.getKilometrageTaximetreDebut()));
txtHrDebTraj.setText((trajet.getHeureArrivee().toString()));
textAdrArriv.ChampsTxt.setText(trajet.getAddresseArrivee());
textKmArriv.ChampsTxt.setText(Long.toString(trajet.getKilometrageTaximetreFin()));
txtHrFinTraj.setText((trajet.getHeureArrivee().toString()));
txtPrixTraj.setText(trajet.getPrixCourse().toString());
txtPrixSuplTraj.setText(trajet.getPrixSupplementaire().toString());
}
/**
* Selectionne tourn�e
* @param etat
*/
private void selectionneTournee(Tournee tournee) {
int nbTournee = cmbTrneeChauf.getItemCount();
for (int i = 0; i<nbTournee; i++) {
if (((TourneeAffichable)cmbTrneeChauf.getItemAt(i)).getTournee().equals(tournee)) {
cmbTrneeChauf.setSelectedIndex(i);
break;
}
}
}
/**
*retourne le trajet
* @return
*/
public Trajet renvoiTrajet() {
return trajet;
}
/**
* Panel code tourn�e
* @return
*/
private JPanel trneeChaufPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labTChauf = new JLabel(" Tourn�e : *");
labTChauf.setFont(titreFont);
labTChauf.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labTChauf);
// parameterPane.add(new JLabel("Tourn�e chauffeur:"));
parameterPane.add(cmbTrneeChauf);
return parameterPane;
}
/**
* Panel Adresse D�part *
* @return
*/
private JPanel adrDepPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labAdrDep = new JLabel(" Adresse d�part trajet : *");
labAdrDep.setFont(titreFont);
labAdrDep.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labAdrDep);
// parameterPane.add(new JLabel("Adresse d�part trajet:"));
parameterPane.add(textAdrDep.ChampsTxt);
return parameterPane;
}
/**
* Panel km d�part
* @return
*/
private JPanel kmDepPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labKmDep = new JLabel(" Km d�part trajet : *");
labKmDep.setFont(titreFont);
labKmDep.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labKmDep);
// parameterPane.add(new JLabel("Km d�part trajet:"));
parameterPane.add(textKmDep.ChampsTxt);
return parameterPane;
}
/**
* Panel heure D�part
* @return
*/
private JPanel hrDepPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labHrDep = new JLabel(" Heure d�part trajet : *");
labHrDep.setFont(titreFont);
labHrDep.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labHrDep);
// parameterPane.add(new JLabel("Heure d�part trajet:"));
// parameterPane.add(textHrDep.ChampsTxt);
parameterPane.add(getTxtHrDebTraj());
return parameterPane;
}
/**
* Panel adresse fin
* @return
*/
private JPanel adrFinPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labAdrFin = new JLabel(" Adresse fin trajet : *");
labAdrFin.setFont(titreFont);
labAdrFin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labAdrFin);
// parameterPane.add(new JLabel("Adresse Fin trajet:"));
parameterPane.add(textAdrArriv.ChampsTxt);
return parameterPane;
}
/**
* Panel km fin trajet
* @return
*/
private JPanel kmFinPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labKmFin = new JLabel(" Km Fin trajet : *");
labKmFin.setFont(titreFont);
labKmFin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labKmFin);
// parameterPane.add(new JLabel("Km Fin trajet:"));
parameterPane.add(textKmArriv.ChampsTxt);
return parameterPane;
}
/**
* Panel heure fin trajet
* @return
*/
private JPanel hrFinPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labHrFin = new JLabel(" Heure fin trajet : *");
labHrFin.setFont(titreFont);
labHrFin.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labHrFin);
parameterPane.add(getTxtHrFinTraj());
return parameterPane;
}
/**
* Panel prix course
*
* @return
*/
private JPanel prixCoursePane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labPrix = new JLabel(" Prix trajet : *");
labPrix.setFont(titreFont);
labPrix.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labPrix);
parameterPane.add(getTextPrixTraj());
return parameterPane;
}
/**
* Panel suppl�ment course trajet
* @return
*/
private JPanel supplementCoursePane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(400, 25));
labSupPrix = new JLabel(" Suppl�ment prix trajet :");
labSupPrix.setFont(titreFont);
labSupPrix.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labSupPrix);
parameterPane.add(getTxtPrixSuplTrajet());
return parameterPane;
}
/**
* Panel centre
*
* @return
*/
private JPanel paneCentre() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setBackground(new java.awt.Color(170, 207, 249));
// parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(800, 300));
parameterPane.add(trneeChaufPane());
parameterPane.add(adrDepPane());
parameterPane.add(kmDepPane());
parameterPane.add(hrDepPane());
parameterPane.add(adrFinPane());
parameterPane.add(kmFinPane());
parameterPane.add(hrFinPane());
parameterPane.add(prixCoursePane());
parameterPane.add(supplementCoursePane());
return parameterPane;
}
/**
* Panel total km trajet
*
* @return
*/
private JPanel totalKmTrajetPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(200, 25));
labTotKmTrajet = new JLabel("Total Kilom�trage trajet :");
labTotKmTrajet.setFont(titreFont);
labTotKmTrajet.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labTotKmTrajet);
parameterPane.add(getTxtTotKmTrajet());
return parameterPane;
}
/**
* Panel total prix trajet
*
* @return
*/
private JPanel totalPrixTrajetPane() {
JPanel parameterPane = new JPanel(false);
//parameterPane.setBackground(Color.WHITE);
parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(200, 25));
labTotPrix = new JLabel("Total prix course :");
labTotPrix.setFont(titreFont);
labTotPrix.setForeground(new java.awt.Color(66, 79, 120));
parameterPane.add(labTotPrix);
parameterPane.add(getTxtTotPrixTraj());
return parameterPane;
}
/**
* Panel totaux
*
* @return
*/
private JPanel getPanneauTotaux() {
JPanel parameterPane = new JPanel(false);
parameterPane.setBackground(Color.WHITE);
parameterPane.setBackground(new java.awt.Color(170, 207, 249));
// parameterPane.setLayout(new GridLayout());
parameterPane.setPreferredSize(new Dimension(800, 100));
if (PaneTotaux == null) {
PaneTotaux = new JPanel();
PaneTotaux.setBackground(Color.white);
PaneTotaux.add(totalKmTrajetPane(), null);
PaneTotaux.add(totalPrixTrajetPane(), null);
}
return PaneTotaux;
}
/**
* Affiche les composant de la fen�tre
*/
public void affiche() {
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(1000, 850));
parameterPane.setBorder(BorderFactory.createTitledBorder(" Trajet tourn�e chauffeur"));
aDialog.getContentPane().add(getTitre(), BorderLayout.NORTH);
aDialog.getContentPane().add(paneCentre(), BorderLayout.CENTER);
aDialog.getContentPane().add(toolBar, BorderLayout.EAST);
aDialog.getContentPane().add(getPanneauTotaux(), 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);
}
/**
* <p> Gestionnaire des �v�nements </p>
* <p> effectue les erreurs de la validation</p>
*
*/
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (CMD_OK.equals(cmd)) {
Vector<ErreurDeValidation> erreursDeValidation = new Vector<ErreurDeValidation>();
String adresseDepart = null;
try {
adresseDepart = textAdrDep.ChampsTxt.getText();
} catch (Exception ex) {
erreursDeValidation.add(new ErreurDeValidation(textAdrDep.ChampsTxt, "le texte introduit n'est pas un chiffre"));
}
Long kmTaximetreDebut = null;
try {
kmTaximetreDebut = Long.parseLong(textKmDep.ChampsTxt.getText());
} catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(textKmDep.ChampsTxt, "le texte introduit pour le nombre de kilom�tre de d�but n'est pas un nombre"));
}
Date dateDepart = null;
try {
dateDepart = new SimpleDateFormat(gui.MotsCleProjet.DATE_TIME_FORMAT).parse(textHrDep.ChampsTxt.getText());
} catch (ParseException ex) {
erreursDeValidation.add(new ErreurDeValidation(textHrDep.ChampsTxt, "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT));
}
String adresseArrivee = null;
try {
adresseArrivee = textAdrArriv.ChampsTxt.getText();
} catch (Exception ex) {
erreursDeValidation.add(new ErreurDeValidation(textAdrArriv.ChampsTxt, "le texte introduit n'est pas un chiffre"));
}
Long kmTaximetreArrive = null;
try {
kmTaximetreArrive = Long.parseLong(textKmArriv.ChampsTxt.getText());
} catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(textKmArriv.ChampsTxt, "le texte introduit pour le nombre de kilom�tre de d�but n'est pas un nombre"));
}
Date dateArivee = null;
try {
dateArivee = new SimpleDateFormat(gui.MotsCleProjet.DATE_TIME_FORMAT).parse(textHrArriv.ChampsTxt.getText());
} catch (ParseException ex) {
erreursDeValidation.add(new ErreurDeValidation(textHrArriv.ChampsTxt, "Le format de date est invalide : attendu " + gui.MotsCleProjet.DATE_FORMAT));
}
BigDecimal prixCourse = null;
try {
prixCourse = new BigDecimal(textPrixCourse.ChampsTxt.getText());
} catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(textPrixCourse.ChampsTxt, "le texte introduit pour le nombre de kilom�tre de d�but n'est pas un nombre"));
}
BigDecimal prixSupplementCourse = null;
try {
prixSupplementCourse = new BigDecimal(txtPrixSuplTraj.getText());
} catch (NumberFormatException ex) {
erreursDeValidation.add(new ErreurDeValidation(textPrixCourse.ChampsTxt, "le texte introduit pour le nombre de kilom�tre de d�but n'est pas un nombre"));
}
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;
}
trajet.setTournee(getTourneeSelectionne());
trajet.setAddresseDepart(adresseDepart);
trajet.setKilometrageTaximetreDepart(kmTaximetreDebut);
trajet.setHeureDepart(dateDepart);
trajet.setAddresseArrivee(adresseArrivee);
trajet.setKilometrageTaximetreArrivee(kmTaximetreArrive);
trajet.setHeureArrivee(dateArivee);
trajet.setPrixCourse(prixCourse);
trajet.setPrixSupplementaire(prixSupplementCourse);
okFlag = true;
aDialog.setVisible(false);
} else if (CMD_CANCEL.equals(cmd)) {
okFlag = false;
aDialog.setVisible(false);
}
}
/**
* <p> retourne la tourn�e s�lectionn�e</p>
* @return tourn�e
*/
private Tournee getTourneeSelectionne() {
return ((TourneeAffichable)cmbTrneeChauf.getSelectedItem()).getTournee();
}
/**
* retourne la liste des chauffeurs qui ont �ffectu� les tourn�es
* @return
*/
private Vector<TourneeAffichable> getListeTournee() {
Vector<TourneeAffichable> tourneeAffichable = new Vector<TourneeAffichable>();
ArrayList<Tournee> tournee = getTourneeDao().findAll();
for (Tournee eTournee : tournee) {
tourneeAffichable.add(new TourneeAffichable(eTournee));
}
return tourneeAffichable;
}
/**
* retourne l'instance de la classe MysqlTourneeDao pour pouvoir
* utiliser les m�thodes de l'interface ITourneeDao
* @return Tourn�e Dao
*/
private ITourneeDao getTourneeDao() {
try {
return GestionnaireDeStockage.getInstance().getTourneeDao();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}