Package view

Source Code of view.InsertTimetable

package view;

import java.awt.Choice;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.UIManager;

import model.Line;
import model.Station;
import model.Timetable;
import ca.odell.glazedlists.GlazedLists;
import ca.odell.glazedlists.swing.AutoCompleteSupport;
import controller.Controller;

/**
* La classe <b>InsertTimetable</b> hérite de la classe abstraite InsertDatas
* et permet d'ajouter une timetable
*
* @version 1.0
* @author Pierre Facq
* @author Alan Grente-Lequertier
* @author Alexandre Paris-Vergne
* @author Thomas Sileghem
*
* @see Timetable
*
*/
public class InsertTimetable extends InsertDatas implements ActionListener{

  JComboBox line;
  JComboBox station;
  Timetable temp;
  int numberPeriod;
 
  /**
   * Initialise une InsertTimetable avec une timetable vide
   *
   * @param controller le controlleur principal du logiciel
   */
  public InsertTimetable(Controller controller) {
    super();
    this.temp=new Timetable();
    this.controller=controller;
  }
 
  /**
   * Lance une pop-up permettant de créer une nouvelle timetable
   */
  @Override
  public void createPopup() {
    String[] lines = controller.getLinesNames();
   
    //Crée une liste déroulante avec système d'autocomplétion contenant
    //le nom des lignes
    line = new JComboBox();
    AutoCompleteSupport support = AutoCompleteSupport.install(
            line, GlazedLists.eventListOf(lines));
   
    //Ajoute un listener sur la liste déroulante qui permet d'actualiser
    //la liste déroulante "station" en fonction du choix de ligne
    line.addActionListener(this);
   
    //Crée une liste déroulante vierge
    station = new JComboBox();
   
    //Liste déroulante contenant "semaine" ou "week-end"
    Choice period = new Choice();
    period.addItem("Semaine");
    period.addItem("Week-end");
   
    Line tempLine = new Line();
    Station tempStation = new Station();
   
    //Crée un message contenant des chaînes de caractères et les listes déroulantes
    Object[] message = new Object[] { "Ligne : ", line,
        "Station : ", station, "Période : " , period};
   
    //Crée la pop-up contenant le message
    int r = JOptionPane.showConfirmDialog(null, message,
        "Ajouter des horaires", JOptionPane.OK_CANCEL_OPTION);
   
    //Si l'utilisateur a cliqué sur le bouton "OK"
    if (r == JOptionPane.OK_OPTION) {
      tempLine.setName(line.getSelectedItem().toString());
      tempStation.setName(station.getSelectedItem().toString());
     
      if(period.getSelectedItem()=="Semaine")
        numberPeriod=0;
      else
        numberPeriod=1;
     
      tempLine=controller.copyLine(tempLine);
      tempStation=controller.copyStation(tempStation);
     
      //On vérifie que la ligne et la station existent
      if(tempLine!=null && tempStation!=null)
      {
      temp.setLine(tempLine);
      temp.setStation(tempStation);
     
      //Si la timetable existe déjà, on lance la modification de la timetable
      if(controller.checkTimetableNames(temp.getLine().getName(),temp.getStation().getName()))
      {
        AlterTimetable alterTimetable = new AlterTimetable(controller,temp);
        alterTimetable.alterPopup();
      }
      else
        insertTimetables();
      }
      else
        errorPopup("lineOrStation");
    }
  }

  /**
   * Lance une pop-up permettant de rajouter un horaire
   */
  public void insertTimetables(){
    Calendar cal = Calendar.getInstance();
    cal.set(1970,0,1,8,0,0);
    JSpinner time = new JSpinner( new SpinnerDateModel() );
    JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(time, "HH:mm");
    time.setEditor(timeEditor);
    time.setValue(cal.getTime());
   
    Object[] message = new Object[] { "Horaire : ", time};
   
    UIManager.put("OptionPane.yesButtonText", "Valider et continuer")
    UIManager.put("OptionPane.noButtonText", "Finaliser")
    int r = JOptionPane.showConfirmDialog(null, message,
        "Ajouter des horaires", JOptionPane.YES_NO_CANCEL_OPTION);
    if (r == JOptionPane.YES_OPTION || r == JOptionPane.NO_OPTION)
    {
      if(r == JOptionPane.YES_OPTION)
      {
        temp.getPeriods().get(numberPeriod).getPasses().add((Date)time.getValue());
        insertTimetables();
      }
      else
      {
        Collections.sort(temp.getPeriods().get(numberPeriod).getPasses());
        confirmPopup();
      }
    }
  }
 
  /**
   * Lance la pop-up permettant de confirmer la modification des données
   */
  @Override
  public void confirmPopup() {
    String[] dates = temp.getPeriods().get(numberPeriod).getDates();
    String horaires = new String();
   
    horaires+="Horaires : \n";
    for(int i=0;i<dates.length;i++)
    {
      horaires+=dates[i];
      horaires+="\n";
    }
   
    //Message contenant des chaînes de caractères et les nouvelles données de la station
    Object[] message = new Object[] { "Nom de la ligne : "+temp.getLine().getName(),
        "Nom de la station : "+temp.getStation().getName(),
        "Période : "+temp.getPeriods().get(numberPeriod).getLabel(),
        horaires
        };
   
    //On change le nom du bouton "OK" par "Valider"
    UIManager.put("OptionPane.okButtonText", "Valider")
   
    //Lance la pop-up de confirmation
    int r = JOptionPane.showConfirmDialog(null, message,
        "Vérifiez vos informations", JOptionPane.OK_CANCEL_OPTION);
   
    //Si l'utilisateur a cliqué sur le bouton "Valider"
    if (r == JOptionPane.OK_OPTION) {
      controller.insertFilledTimetable(temp);
    }
  }

  /**
   * Actualise la liste déroulante contenant les noms des stations en
   * fonction de la ligne sélectionnée
   */
  @Override
    public void actionPerformed(ActionEvent e) {
    HashMap<String, Line> map = new HashMap<String, Line>();
    map = controller.getLinesMap();
    Line temp = map.get(line.getSelectedItem().toString());
   
        DefaultComboBoxModel model = new DefaultComboBoxModel(temp.getStationsNames());
        station.setModel(model);
    }
 
  /**
   * Lance une pop-up avec un message en cas d'erreur
   * @param error une chaîne de caractères identifiant l'erreur
   */
  private void errorPopup(String error) {
    switch (error)
    {
    case "lineOrStation" :
      JOptionPane.showMessageDialog(null,"Erreur, ligne ou station inexistante(s)");
    break;
    }
  }
 
}
TOP

Related Classes of view.InsertTimetable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.