package entreprise;

import java.util.Comparator;

/**
 * Comparateur d'employés. Utilise le salaire pour comparer 2 employés.
 */
public class CompareSalaires implements Comparator<Employe> {
  /** vrai si on veut un tri croissant */
  private boolean croissant;

  /**
   * Crée un comparateur.
   * 
   * @param croissant
   *          vrai si le comparateur compare suivant le montant du salaire : le
   *          plus petit est celui qui a le plus petit salaire. Sinon, le plus
   *          petit est celui qui a le plus grand salaire.
   */
  public CompareSalaires(boolean croissant) {
    this.croissant = croissant;
  }

  /**
   * Par défaut, le comparateur sert pour un tri croissant.
   */
  public CompareSalaires() {
    this(true);
  }

  /**
   * Permet d'utiliser le même comparateur pour des tris croissants ou
   * décroissants.
   */
  public void setCroissant(boolean croissant) {
    this.croissant = croissant;
  }

  /**
   * Compare 2 employés suivant leur salaire.
   * 
   * @return un nombre positif si le salaire de e1 est supérieur au salaire de
   *         e2, 0 si les 2 salaires sont les mêmes, et négatif sinon.
   */
  public int compare(Employe e1, Employe e2) {
    // La méthode static "compare" de Double convient parfaitement à ce traitement :
     return (croissant ? 1 : -1) * Double.compare(e1.getSalaire(), e2.getSalaire());
     
    // On aurait aussi pu faire des simples comparaisons :
//    double s1 = e1.getSalaire();
//    double s2 = e2.getSalaire();
//    if (croissant)
//      // ordre croissant
//      if (s1 >= s2)
//        return 1;
//      else
//        return -1;
//    else
//    // ordre décroissant
//    if (s1 >= s2)
//      return -1;
//    else
//      return 1;
  }
}