/**
   * Deplace une liste de message vers la corbeille
   *
   * @param p_list
   * @return
   */
  public boolean deplaceMessageVersCorbeille(MlListeMessageGrille p_list) {
    MlCompteMail cpt = null;
    if (p_list != null && p_list.size() > 0) {
      cpt = new MlCompteMail(p_list.get(0).getIdCompte());
    }
    for (MlMessageGrille m : p_list) {

      String requete =
          "UPDATE "
              + EnTable.MAIL_RECU.getNomTable()
              + " SET "
              + EnStructMailRecu.ID_DOSSIER.getNomChamp()
              + "="
              + cpt.getIdCorbeille()
              + " WHERE "
              + EnStructMailRecu.ID_MESSAGE.getNomChamp()
              + "="
              + m.getIdMessage();
      boolean succes = requeteFact.executeRequete(requete);
      if (!succes) {
        return false;
      }
    }

    return true; // si tout s'est bien passé ou si la liste etait vide
  }
  public MlListeMessageGrille getListeMessageGrille(int p_idCompte, int p_idDossierChoisi) {

    MlListeMessageGrille lstMessage = new MlListeMessageGrille();
    String script =
        "SELECT " //
            + EnStructMailRecu.EXPEDITEUR.getNomChamp()
            + ", "
            + EnStructMailRecu.SUJET.getNomChamp()
            + ", "
            + EnStructMailRecu.DATE_RECEPTION.getNomChamp()
            + ", "
            + EnStructMailRecu.STATUT.getNomChamp()
            + ", "
            + EnStructMailRecu.UID.getNomChamp()
            + ", "
            + EnStructMailRecu.ID_MESSAGE.getNomChamp()
            + " FROM "
            + EnTable.MAIL_RECU.getNomTable() //
            + " WHERE " //
            + EnStructMailRecu.ID_DOSSIER.getNomChamp()
            + "="
            + p_idDossierChoisi //
            + " AND " //
            + EnStructMailRecu.ID_COMPTE.getNomChamp()
            + "="
            + p_idCompte //
            + " ORDER BY "
            + EnStructMailRecu.DATE_RECEPTION.getNomChamp()
            + " DESC";

    List<ArrayList<String>> lstResultat = requeteFact.getListeDenregistrement(script);

    for (int i = 0; i < lstResultat.size(); i++) {
      ArrayList<String> aRecord = lstResultat.get(i);

      MlMessageGrille m = new MlMessageGrille();

      m.setExpediteur(decodeHTMLFromBase(aRecord.get(0)));
      m.setSujet(decodeHTMLFromBase(aRecord.get(1)));
      m.setDateReception(RecupDate.getdateFromTimeStamp((aRecord.get(2))));
      m.setLu(statutLecture.T.name().equals(aRecord.get(3)));
      m.setUidMessage(aRecord.get(4));
      m.setIdCompte(p_idCompte);
      m.setIdDossier(p_idDossierChoisi);
      m.setIdMessage(Integer.parseInt(aRecord.get(5)));
      m.setHavePieceJointe(messageHavePieceJointe(m.getIdMessage()));

      lstMessage.add(m);
    }

    return lstMessage;
  }
  /**
   * Enregistre un message dans la base
   *
   * @param m
   */
  public void createNewMessage(MlMessage m) {
    int idCompte = m.getIdCompte();
    int idDossierStockage = m.getIdDossier();
    String uidMessage = m.getUIDMessage();
    String expediteur = encodeHTMLforBase(m.getExpediteur());
    List<String> listeDestinataire = m.getDestinataire();
    List<String> listCopy = m.getDestinataireCopy();
    List<String> listCachee = m.getDestinataireCache();

    File fileToBlobDestinataires = createBlobFileFromlist(listeDestinataire, "destinataire");
    File fileToBlobDestCopy = createBlobFileFromlist(listCopy, "dest_copy");
    File fileToBlobDestHide = createBlobFileFromlist(listCachee, "hide_dest");

    String sujet = encodeHTMLforBase(m.getSujet());
    String contenu = m.getContenu();
    File fileToBlobContenu = createFileForBlob(contenu, "contenu");

    String dateReception = RecupDate.getTimeStamp(m.getDateReception());

    int tailleStringBuilder =
        uidMessage.length()
            + expediteur.length()
            /* + destinataires.length() */ + sujet.length()
            + 500;
    // on construit la requette
    StringBuilder requette = new StringBuilder(tailleStringBuilder);
    requette.ensureCapacity(tailleStringBuilder);
    requette.append("INSERT INTO " + EnTable.MAIL_RECU.getNomTable()); //
    requette.append("("); //
    requette.append(EnStructMailRecu.ID_COMPTE.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.ID_DOSSIER.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.UID.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.EXPEDITEUR.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.DEST.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.DEST_COPY.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.DEST_CACHE.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.SUJET.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.CONTENU.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.DATE_RECEPTION.getNomChamp() + ","); //
    requette.append(EnStructMailRecu.STATUT.getNomChamp() + ")"); //
    requette.append("VALUES ("); //
    requette.append(idCompte + ","); //
    requette.append(idDossierStockage + ",'"); //
    requette.append(uidMessage + "','"); //
    requette.append(expediteur + "',"); //
    requette.append("?,"); // lstDest
    requette.append("?,"); // lstDestCC
    requette.append("?,'"); // lstDestBCC
    requette.append(sujet + "',");
    requette.append("?,'"); // c'est pour le contenu qui sera stocké dans un
    // blob
    requette.append(dateReception + "',"); //
    if (m.isLu()) {
      requette.append("'T')");
    } else {
      requette.append("'F')");
    }

    // le status de lecture du message (F= nonlu,T=lu)

    // on l'execute

    boolean succes =
        requeteFact.executeRequeteWithBlob(
            requette.toString(),
            fileToBlobContenu,
            fileToBlobDestinataires,
            fileToBlobDestCopy,
            fileToBlobDestHide);
    if (succes) {

      // on recupere le nouvel id du message que l'on vient d'enregistrer
      String getMaxId =
          "SELECT max ("
              + EnStructMailRecu.ID_MESSAGE.getNomChamp()
              + ") FROM "
              + EnTable.MAIL_RECU.getNomTable();
      String maxId = requeteFact.get1Champ(getMaxId);
      // ("l'id de message que l'on vient d'enregistrer est: "
      // + maxId);

      // lst.add();

      // updateStatusLecture(lst, false);

      JTreeFactory treeFact = new JTreeFactory();
      MlListeMessageGrille lst = new MlListeMessageGrille();
      lst.add(new MlMessageGrille(Integer.parseInt(maxId)));
      treeFact.majUnreadCount(lst);

      verifEtSuppressionBlob(new File(m.getCheminPhysique()));
      verifEtSuppressionBlob(fileToBlobContenu);
      verifEtSuppressionBlob(fileToBlobDestinataires);
      verifEtSuppressionBlob(fileToBlobDestCopy);
      verifEtSuppressionBlob(fileToBlobDestHide);

      // on insere le contenu en base
      // si des pieces jointe sont presente, on enregistre leur chemin en
      // base avec l'id du message
      for (File f1 : m.getListePieceJointe()) {
        if (requeteFact.enregistrePieceJointe(maxId, f1)) {
          f1.delete();
        }
      }
    }
  }