/**
   * Construit un objet CompetitionLevel pour le niveaux fédéral définit à partir de la base de
   * données.
   *
   * <p>Si le niveau n'est pas trouvé pour la langue en parametre, mais disponible pour le français,
   * alors c'est le libellé français qui est utilisé.
   *
   * <p>Si le niveau n'est pas trouvé, le génére en mettant le code comme libellé.
   *
   * @param numLevel le code du niveau à retourner
   * @param federation la fédération associé au niveau
   * @param lang la langue du libellé.
   * @return le niveau de compétition généré.
   * @throws SQLException
   */
  @SuppressWarnings("nls")
  public static CompetitionLevel getCompetitionLevel(
      int numLevel, Federation federation, String lang) throws SQLException {
    String sql =
        "select * from NIVEAU_COMPETITION where CODENIVEAU=? and NUMFEDERATION=? and LANG=?";

    CompetitionLevel competitionLevel = null;

    PreparedStatement pstmt = ApplicationCore.dbConnection.prepareStatement(sql);
    try {
      pstmt.setInt(1, numLevel);
      pstmt.setInt(2, federation.getNumFederation());
      pstmt.setString(3, lang);

      ResultSet rs = pstmt.executeQuery();
      try {
        boolean enregexists = rs.next();
        if (!enregexists) {
          rs.close();

          pstmt.setString(3, "fr");

          rs = pstmt.executeQuery();
          enregexists = rs.next();
        }

        if (enregexists) {
          competitionLevel = new CompetitionLevel();
          competitionLevel.setFederation(federation);
          competitionLevel.setNumLevel(rs.getInt("CODENIVEAU"));
          competitionLevel.setLang(lang);
          competitionLevel.setLibelle(rs.getString("LIBELLE"));
          competitionLevel.setDefaut(rs.getBoolean("DEFAUT"));
        }
      } finally {
        rs.close();
      }
    } finally {
      pstmt.close();
    }

    if (competitionLevel == null) {
      competitionLevel = new CompetitionLevel();
      competitionLevel.setFederation(federation);
      competitionLevel.setNumLevel(numLevel);
      competitionLevel.setLang(lang);
      competitionLevel.setLibelle("Niveau " + numLevel);
    }

    return competitionLevel;
  }
  private void completePanel() {
    jlFederationLocaleNiveau.setText(profile.getConfiguration().getLangue());

    if (federation == null) return;

    jtfFederatonSigle.setText(federation.getSigleFederation());
    jtfFederatonName.setText(federation.getNomFederation());
    ccbCountryFederation.setSelectedCountry(federation.getCodeCountry());

    for (CompetitionLevel cl : federation.getCompetitionLevels()) {
      if (cl.getLang().equals(profile.getConfiguration().getLangue())) {
        String tmp = ""; // $NON-NLS-1$
        if (!jtfFederationNiveau.getText().isEmpty())
          tmp = jtfFederationNiveau.getText() + ","; // $NON-NLS-1$
        tmp += cl.getLibelle();
        jtfFederationNiveau.setText(tmp);
      } else {
        if (!mTraduction.containsKey(cl.getLang())) {
          addLocaleLevelField(cl.getLang());
          jcbAvailableLocale.removeItem(new Locale(cl.getLang()));
          if (jcbAvailableLocale.getItemCount() == 0) {
            jcbAvailableLocale.setEnabled(false);
            jbAddLocale.setEnabled(false);
          }
          jlAddLocaleInfo.setVisible(true);
        }
        String tmp = ""; // $NON-NLS-1$
        JTextField tmpTF = mTraduction.get(cl.getLang());
        if (!tmpTF.getText().isEmpty()) tmp = tmpTF.getText() + ","; // $NON-NLS-1$
        tmp += cl.getLibelle();
        tmpTF.setText(tmp);
      }
    }
  }
 /* (non-Javadoc)
  * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
  */
 @Override
 public void actionPerformed(ActionEvent e) {
   if (e.getSource() == jbValider) {
     if (federation == null)
       federation = new Federation(jtfFederatonName.getText(), jtfFederatonSigle.getText());
     else {
       federation.setNomFederation(jtfFederatonName.getText());
       federation.setSigleFederation(jtfFederatonSigle.getText());
     }
     federation.setCodeCountry(
         ((Country) ccbCountryFederation.getSelectedItem()).getCode().toLowerCase());
     federation.getCompetitionLevels().clear();
     boolean first = true;
     for (String level : jtfFederationNiveau.getText().split(",")) { // $NON-NLS-1$
       CompetitionLevel cl = new CompetitionLevel();
       cl.setDefaut(first);
       first = false;
       cl.setLang(profile.getConfiguration().getLangue());
       cl.setLibelle(level);
       federation.addCompetitionLevel(cl);
     }
     for (Entry<String, JTextField> le : mTraduction.entrySet()) {
       first = true;
       for (String level : le.getValue().getText().split(",")) { // $NON-NLS-1$
         CompetitionLevel cl = new CompetitionLevel();
         cl.setDefaut(first);
         first = false;
         cl.setLang(le.getKey());
         cl.setLibelle(level);
         federation.addCompetitionLevel(cl);
       }
     }
     try {
       federation.save();
     } catch (ObjectPersistenceException e1) {
       federation = null;
       DisplayableErrorHelper.displayException(e1);
       e1.printStackTrace();
     }
     setVisible(false);
   } else if (e.getSource() == jbAnnuler) {
     setVisible(false);
   } else if (e.getSource() == jbAddLocale) {
     Locale loc = (Locale) jcbAvailableLocale.getSelectedItem();
     addLocaleLevelField(loc.toString());
     mTraduction.get(loc.toString()).setText(jtfFederationNiveau.getText());
     jcbAvailableLocale.removeItem(loc);
     if (jcbAvailableLocale.getItemCount() == 0) {
       jcbAvailableLocale.setEnabled(false);
       jbAddLocale.setEnabled(false);
     }
     jlAddLocaleInfo.setVisible(true);
     redimDialog();
   }
 }