private void updateCbParcours() {
    myView.getCbParcours().removeAllItems();
    if (eodHabilitations.selectedObjects() != null
        && eodHabilitations.selectedObjects().count() == 1) {
      FormationHabilitation selectedHabilitation =
          (FormationHabilitation) eodHabilitations.selectedObject();
      int niveau = selectedHabilitation.fhabNiveau().intValue();
      int ordre1 = niveau * 2 - 1;
      int ordre2 = ordre1 + 1;

      EOQualifier qualifier =
          EOQualifier.qualifierWithQualifierFormat(
              "("
                  + MaquetteRepartitionSem.SEMESTRE_KEY
                  + "."
                  + MaquetteSemestre.MSEM_ORDRE_KEY
                  + " = %@ or "
                  + MaquetteRepartitionSem.SEMESTRE_KEY
                  + "."
                  + MaquetteSemestre.MSEM_ORDRE_KEY
                  + " = %@) and "
                  + MaquetteRepartitionSem.PARCOURS_KEY
                  + "."
                  + MaquetteParcours.FORMATION_SPECIALISATION_KEY
                  + " = %@ and "
                  + MaquetteRepartitionSem.FANN_KEY_KEY
                  + " = %@",
              new NSArray<Object>(
                  new Object[] {
                    new Integer(ordre1),
                    new Integer(ordre2),
                    selectedHabilitation.formationSpecialisation(),
                    selectedHabilitation.fannKey()
                  }));
      EOSortOrdering sortSemestres =
          EOSortOrdering.sortOrderingWithKey(
              MaquetteRepartitionSem.SEMESTRE_KEY + "." + MaquetteSemestre.MSEM_ORDRE_KEY,
              EOSortOrdering.CompareCaseInsensitiveAscending);
      EOSortOrdering sortParcours =
          EOSortOrdering.sortOrderingWithKey(
              MaquetteRepartitionSem.PARCOURS_KEY + "." + MaquetteParcours.MPAR_LIBELLE_KEY,
              EOSortOrdering.CompareCaseInsensitiveAscending);

      NSArray<MaquetteRepartitionSem> semestres =
          MaquetteRepartitionSem.fetchMaquetteRepartitionSems(
              ec,
              qualifier,
              new NSArray<EOSortOrdering>(new EOSortOrdering[] {sortSemestres, sortParcours}));

      myView.getCbParcours().addItem(null);
      for (int i = 0; i < semestres.count(); i++) {
        myView.getCbParcours().addItem(semestres.objectAtIndex(i));
      }
    }
  }
  public void ajouterPreference() {
    NSArray<FormationHabilitation> habilitations = eodHabilitations.selectedObjects();
    if (habilitations == null || habilitations.count() == 0) {
      WindowHandler.showInfo(
          "Veuillez rechercher et sélectionner un diplôme dans la table du dessus");
      return;
    }

    for (int i = 0; i < habilitations.count(); i++) {
      FormationHabilitation habilitation = habilitations.objectAtIndex(i);
      NSArray<FormationHabilitation> preferedHabilitations =
          (NSArray<FormationHabilitation>)
              eodHabilitationsChoisies.displayedObjects().valueForKey(PrefScol.HABILITATION_KEY);
      if (preferedHabilitations.containsObject(habilitation)) {
        WindowHandler.showInfo(
            "Ce diplôme est déjà dans votre liste des préférences ("
                + habilitation.formationSpecialisation().scolFormationDiplome().fdipAbreviation()
                + ")");
        if (habilitations.count() == 1) {
          return;
        }
        continue;
      }

      PrefScol prefScol = PrefScol.createPrefScol(ec);
      prefScol.setHabilitationRelationship(habilitation);
      prefScol.setAnneeRelationship((FormationAnnee) myView.getCbAnnee().getSelectedItem());
      prefScol.setIndividuRelationship((IndividuUlr) app.userInfo("individu"));
      if (myView.getCbParcours().getSelectedItem() != null) {
        prefScol.setMaquetteRepartitionSemRelationship(
            (MaquetteRepartitionSem) myView.getCbParcours().getSelectedItem());
      }
    }
    if (!app.saveChanges()) {
      WindowHandler.showError(
          "Impossible d'ajouter le(s) diplôme(s) aux préférences : Contactez le service info SVP");
    } else {
      updatePreferences();
    }
  }
  private void init() {
    myView
        .getBtChercher()
        .addActionListener(
            new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                updateEodHabilitations();
              }
            });
    myView.getBtAjouter().setIcon(WidgetHandler.imageIcon("down"));
    myView
        .getBtAjouter()
        .addActionListener(
            new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                ajouterPreference();
              }
            });
    myView.getBtSupprimer().setIcon(WidgetHandler.imageIcon("up"));
    myView
        .getBtSupprimer()
        .addActionListener(
            new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
                retirerPreference();
              }
            });

    NSArray<FormationAnnee> formationAnnee = app.getFormationAnnees();
    myView.getCbAnnee().removeAllItems();
    for (int i = 0; i < formationAnnee.count(); i++) {
      FormationAnnee fAnnee = formationAnnee.objectAtIndex(i);
      myView.getCbAnnee().addItem(fAnnee);
      if (fAnnee.fannCourante().equals("O")) {
        myView.getCbAnnee().setSelectedItem(fAnnee);
      }
    }

    myView.getCbParcours().removeAllItems();

    RechercheListener myRechercheListener = new RechercheListener();
    myView.getBtChercher().addActionListener(myRechercheListener);
    myView.getTfGrade().addActionListener(myRechercheListener);
    myView.getTfDiplome().addActionListener(myRechercheListener);
    myView.getCbAnnee().addActionListener(new ChangementAnneeListener());

    myView.getMyEOTableHabilitations().addListener(new ListenerTableHabilitations());

    EOSortOrdering sortDiplome =
        EOSortOrdering.sortOrderingWithKey(
            FormationHabilitation.FORMATION_SPECIALISATION_KEY
                + "."
                + FormationSpecialisation.SCOL_FORMATION_DIPLOME_KEY
                + "."
                + FormationDiplome.FDIP_ABREVIATION_KEY,
            EOSortOrdering.CompareCaseInsensitiveAscending);
    EOSortOrdering sortNiveau =
        EOSortOrdering.sortOrderingWithKey(
            FormationHabilitation.FHAB_NIVEAU_KEY, EOSortOrdering.CompareAscending);
    eodHabilitations.setSortOrderings(
        new NSArray<EOSortOrdering>(new EOSortOrdering[] {sortDiplome, sortNiveau}));

    EOSortOrdering sortDiplomePref =
        EOSortOrdering.sortOrderingWithKey(
            PrefScol.HABILITATION_KEY
                + "."
                + FormationHabilitation.FORMATION_SPECIALISATION_KEY
                + "."
                + FormationSpecialisation.SCOL_FORMATION_DIPLOME_KEY
                + "."
                + FormationDiplome.FDIP_ABREVIATION_KEY,
            EOSortOrdering.CompareAscending);
    EOSortOrdering sortNiveauPref =
        EOSortOrdering.sortOrderingWithKey(
            PrefScol.HABILITATION_KEY + "." + FormationHabilitation.FHAB_NIVEAU_KEY,
            EOSortOrdering.CompareAscending);
    eodHabilitationsChoisies.setSortOrderings(
        new NSArray<EOSortOrdering>(new EOSortOrdering[] {sortDiplomePref, sortNiveauPref}));

    updateEodHabilitations();
    updatePreferences();
  }