Package view

Source Code of view.InsertStationsInLine

package view;

import java.util.Collections;
import java.util.Date;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.UIManager;

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

/**
* La classe <b>InsertStationsInLine</b> hérite de la classe abstraite InsertDatas
* et permet d'ajouter une station dans une ligne
*
* @version 1.0
* @author Pierre Facq
* @author Alan Grente-Lequertier
* @author Alexandre Paris-Vergne
* @author Thomas Sileghem
*
* @see Station
* @see Line
*
*/
public class InsertStationsInLine extends InsertDatas{

  Line temp;
  int positionInList;
  int positionStation;
 
  /**
   * Initialise une InsertStationsInLine avec une ligne vide
   *
   * @param controller le controlleur principal du logiciel
   */
  public InsertStationsInLine(Controller controller) {
    super();
    this.temp=new Line();
    this.controller=controller;
  }
 
  /**
   * Lance une pop-up permettant de choisir la ligne dans laquelle
   * on va insérer une ou des stations
   */
  @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
    JComboBox line = new JComboBox();
    AutoCompleteSupport support = AutoCompleteSupport.install(
            line, GlazedLists.eventListOf(lines));
   
    //Crée un message contenant une chaîne de caractères et la liste déroulante
    Object[] message = new Object[] { "Ligne : ", line};
   
    //Crée la pop-up contenant le message
    int r = JOptionPane.showConfirmDialog(null, message,
        "Choisir la ligne à modifier", JOptionPane.OK_CANCEL_OPTION);
   
    //Si l'utilisateur a cliqué sur le bouton "OK"
    if (r == JOptionPane.OK_OPTION) {
      temp.setName(line.getSelectedItem().toString());
      temp=new Line(controller.copyLine(temp));
     
      //Récupère la position de la ligne dans la liste de lignes
      positionInList=controller.positionInListLine(temp);
     
      addStationsPopup();
    }
  }

  /**
   * Lance une pop-up qui permet d'ajouter une station après une
   * autre station dans une ligne
   */
  public void addStationsPopup(){
    String lineStations = "Ordre des stations : \n";
   
    //Affiche les stations de la ligne dans l'ordre départ->arrivée
    for(int i=0;i<temp.getStations().size();i++)
    {
      if(i==(temp.getStations().size()-1))
      {
        lineStations+=temp.getStations().get(i).getName();
        lineStations+="\n\n";
      }
      else
      {
        lineStations+=temp.getStations().get(i).getName();
        lineStations+="->";
      }
    }
   
    String[] stations = controller.getStationsNames();
   
    //Liste déroulante avec système d'auto-complétion contenant les
    //noms des stations
    JComboBox stationToAdd = new JComboBox();
    AutoCompleteSupport support = AutoCompleteSupport.install(
            stationToAdd, GlazedLists.eventListOf(stations));
   
    String[] stationsOfLineNames = temp.getStationsNamesExceptLast();
    JComboBox stationsOfLine = new JComboBox();
    AutoCompleteSupport support2 = AutoCompleteSupport.install(
            stationsOfLine, GlazedLists.eventListOf(stationsOfLineNames));
   
    //Crée un message contenant des chaînes de caractères ainsi que les listes déroulantes
    Object[] message = new Object[] { lineStations,
        "Station à ajouter", stationToAdd,
        "Ajouter après la station : ", stationsOfLine};
   
    //Remplace le texte du bouton "YES" par "Valider et continuer"
    UIManager.put("OptionPane.yesButtonText", "Valider et continuer")
   
    //Remplace le texte du bouton "YES" par "Finaliser"
    UIManager.put("OptionPane.noButtonText", "Finaliser")
   
    //Crée la pop-up contenant le message
    int r = JOptionPane.showConfirmDialog(null, message,
        "Choisir une station à ajouter", JOptionPane.YES_NO_CANCEL_OPTION);
   
    //Si l'utilisateur a cliqué sur le bouton "Valider et continuer" ou "Finaliser"
    if (r == JOptionPane.YES_OPTION || r == JOptionPane.NO_OPTION)
    {
      if(r == JOptionPane.YES_OPTION)
      {
        Station tempStation = new Station();
       
        //Vérifie qu'il y a bien une station de sélectionnée
        if(stationToAdd.getSelectedItem()==null)
        {
          errorPopup("noStationToAdd");
          return;
        }
       
        tempStation.setName(stationToAdd.getSelectedItem().toString());
       
        tempStation=controller.copyStation(tempStation);
       
        //Vérifie que la station existe
        if(tempStation==null)
        {
          errorPopup("badStationToAdd");
          return;
        }
       
        //Vérifie qu'il y a bien une station de la ligne de sélectionnée
        if(stationsOfLine.getSelectedItem()==null)
        {
          errorPopup("noStationOfLine");
          return;
        }
       
        //Récupère la position de la station dans la liste de stations de la ligne
        positionStation=temp.getPositionStation(stationsOfLine.getSelectedItem().toString());
       
        //Ajoute la station dans la liste de stations de la ligne
        temp.getStations().add(positionStation,tempStation);
        addStationsPopup();
      }
      else
      {
        confirmPopup();
      }
    }
  }
 
  /**
   * Lance la pop-up permettant de confirmer l'insertion des données
   */
  @Override
  public void confirmPopup() {
    String lineStations = "Ordre des stations : \n";
    for(int i=0;i<temp.getStations().size();i++)
    {
      if(i==(temp.getStations().size()-1))
      {
        lineStations+=temp.getStations().get(i).getName();
        lineStations+="\n\n";
      }
      else
      {
        lineStations+=temp.getStations().get(i).getName();
        lineStations+="->";
      }
    }
   
    //Message contenant une chaîne de caractères
    Object[] message = new Object[] { lineStations};
   
    //Remplace le texte du bouton "YES" 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) {
      //Modifie la ligne avec les nouvelles stations d'intégrées
      controller.alterLine(temp,positionInList);
    }
  }

  /**
   * 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 "noStationToAdd" :
      JOptionPane.showMessageDialog(null,"Erreur, pas de station sélectionnée");
    break;
    case "badStationToAdd" :
      JOptionPane.showMessageDialog(null,"Erreur, station inexistante");
    break;
    case "noStationOfLine" :
      JOptionPane.showMessageDialog(null,"Erreur, il faut sélectionner une station appartenant à la ligne");
    break;
    }
  }
}
TOP

Related Classes of view.InsertStationsInLine

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.