Package importation.xls

Source Code of importation.xls.XlsTourneeImportateur$ITrajetListener

package importation.xls;

import gui.MotsCleProjet;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.Sheet;
import jxl.Workbook;

import modele.course.Tournee;
import modele.course.Trajet;

/**
* <p>XlsTourneeImportateur : c'est une classe qui importe les fichiers (tourn�es) au format Xls</p>
* <p> Il importe les deux fichiers en m�me temps,
*  il s'agit de la feuille excel de la tourn�e et des trajets</p>
*
* @author Kasandra
*
*/
public class XlsTourneeImportateur {

  /**
   * importe les fichiers
   * @param fluxFichier : flux entr�e
   * @param nomDeLaFeuilleTourn�e : feuille de la tourn�e
   * @param decodeurTournee :d�codeur de la tourn�e
   * @param nomDeLaFeuilleTrajet : feuille des trajets
   * @param decodeurTrajet : d�codeur des trajets
   *
   * @return  Collection<Tournee>
   *
   * @throws Exception
   */
  public Collection<Tournee> importe(InputStream fluxFichier, String nomDeLaFeuilleTourn�e, IXlsDecodeur<Tournee> decodeurTournee, String nomDeLaFeuilleTrajet, IXlsDecodeur<Trajet> decodeurTrajet) throws Exception {
        Workbook classeur = null;
       
        try {
          // prend dans un fichier Xls et   lit le contenu du fichier entr�
            classeur = Workbook.getWorkbook(fluxFichier);
           
            //Obtient la feuille avec le nom sp�cifi� � partir de ce classeur.
        Sheet feuilleTourn�e = classeur.getSheet(nomDeLaFeuilleTourn�e);
       
        //d�finit  un ensemble de couples (tableau cl�/valeur pour la tournee
            final HashMap<String, Tournee>  tourn�es = importeTourn�es(feuilleTourn�e, decodeurTournee);
           
        Sheet feuilleTrajets = classeur.getSheet(nomDeLaFeuilleTrajet);
            importeTrajets(feuilleTrajets, decodeurTrajet, new ITrajetListener() {
        @Override
        public void onTrajet(String idTourn�e, Trajet trajet) {
          Tournee tournee = tourn�es.get(idTourn�e);
          tournee.addTrajet(trajet);
          trajet.setTournee(tournee);
        }
            });
            return tourn�es.values();
        }
        finally {
            if (classeur != null) {
                classeur.close();
            }
        }
   
   
  }

  /**
   * importe les trajets
   * @param feuilleTrajets:  feuille excel trajet
   * @param decodeurTrajet : d�codeur trajet
   * @param trajetListener
   *
   * <p> Si le contenu de la cellule c'est une date, il le formate au format voulu.</p>
   * <p> Dans notre cas, on a besoin d'afficher seulement l'heure.</p>
   */
  private void importeTrajets(Sheet feuilleTrajets, IXlsDecodeur<Trajet> decodeurTrajet, ITrajetListener trajetListener) {
   
    final int nombreDeLignes = feuilleTrajets.getRows();
   
    int[] colonnesALire = decodeurTrajet.colonnesALire();
   
    for (int numeroDeLigne = 0; numeroDeLigne < nombreDeLignes; numeroDeLigne++) {
        Map<Integer,String> ligne = new HashMap<Integer,String>();
     
        for (int numeroDeColonne : colonnesALire) {
         
         
          String valeurDeLaCellule;
          Cell cellule = feuilleTrajets.getCell(numeroDeColonne,numeroDeLigne);
         
          if (cellule.getType() == CellType.DATE) {
            //Une cellule de feuille de calcul qui contient une date
            DateCell celluleDate = (DateCell) cellule;
            Date date = celluleDate.getDate();
            valeurDeLaCellule = new SimpleDateFormat(MotsCleProjet.TIME_FORMAT).format(date);
          } else {
            valeurDeLaCellule = cellule.getContents();
          }
            ligne.put(numeroDeColonne,valeurDeLaCellule);
      }
      trajetListener.onTrajet(ligne.get(0), decodeurTrajet.decode(ligne));
    }
  }

  /**
   * <p>Importe la tourn�e </p>
   * <p>Il re�oit en param�tre :</p>   *
   * @param feuilleTourn�e : feuille excel de la tourn�e
   * @param decodeurTournee : d�code la tourn�e
   *
   * <p> Si le contenu de la cellule c'est une date, il le formate au format voulu.</p>
   * <p> Dans notre cas, on a besoin d'afficher la date et l'heure.</p>
   *
   * @return tourn�es
   */
  private HashMap<String, Tournee> importeTourn�es(Sheet feuilleTourn�e, IXlsDecodeur<Tournee> decodeurTournee) {
   
    HashMap<String, Tournee> tourn�es = new HashMap<String, Tournee>();;
   
    final int nombreDeLignes = feuilleTourn�e.getRows();
   
    int[] colonnesALire = decodeurTournee.colonnesALire();
   
    for (int numeroDeLigne = 0; numeroDeLigne < nombreDeLignes; numeroDeLigne ++) {
     
        Map<Integer,String> ligne = new HashMap<Integer,String>();
       
        for (int numeroDeColonne : colonnesALire) {
         
          String valeurDeLaCellule;
          Cell cellule = feuilleTourn�e.getCell(numeroDeColonne,numeroDeLigne);
         
          if (cellule.getType() == CellType.DATE) {
            //Une cellule de feuille de calcul qui contient une date
            DateCell celluleDate = (DateCell) cellule;
            Date date = celluleDate.getDate();
            valeurDeLaCellule = new SimpleDateFormat(MotsCleProjet.DATE_TIME_FORMAT).format(date);
          } else {
            valeurDeLaCellule = cellule.getContents();
          }
            ligne.put(numeroDeColonne,valeurDeLaCellule);
        }
       
        tourn�es.put(ligne.get(0),decodeurTournee.decode(ligne));
    }
    return tourn�es;
  }
 
  /**
   * l'interface ITrajetListener
   * @author Kasandra
   *
   */
  private interface ITrajetListener {
    /**
     *
     * @param idTourn�e
     * @param trajet
     */
    void onTrajet(String idTourn�e, Trajet trajet);
  }
}
TOP

Related Classes of importation.xls.XlsTourneeImportateur$ITrajetListener

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.