/**
  * Obtenir le contenu d'un message a partir de son ID et le stocke dans un String
  *
  * @param p_idMessage
  * @return
  */
 public String getContenuFromIdForString(int p_idMessage) {
   String requette =
       "SELECT "
           + EnStructMailRecu.CONTENU.getNomChamp()
           + " FROM "
           + EnTable.MAIL_RECU.getNomTable()
           + " WHERE "
           + EnStructMailRecu.ID_MESSAGE.getNomChamp()
           + "="
           + p_idMessage;
   return requeteFact.get1Champ(requette);
 }
  /**
   * Obtenir le contenu d'un message a partir de son id et le stocke dans un File
   *
   * @param p_idMessage
   * @param p_pleinecran
   * @return le contenu sous forme de File
   */
  public File getContenuFromIdForFile(int p_idMessage, boolean p_pleinecran) {
    String requette =
        "SELECT "
            + EnStructMailRecu.CONTENU.getNomChamp()
            + " FROM "
            + EnTable.MAIL_RECU.getNomTable()
            + " WHERE "
            + EnStructMailRecu.ID_MESSAGE.getNomChamp()
            + "="
            + p_idMessage;
    File contenuHTML;
    if (p_pleinecran) {
      contenuHTML = new File(GestionRepertoire.RecupRepTravail() + "/tempo/contenu_p.html");
    } else {
      contenuHTML = new File(GestionRepertoire.RecupRepTravail() + "/tempo/contenu.html");
    }
    if (contenuHTML.exists()) {
      contenuHTML.delete();
    }

    contenuHTML.deleteOnExit();

    return requeteFact.writeBlobToFile(requette, contenuHTML);
  }
  /**
   * 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();
        }
      }
    }
  }