public List<ArrayList<String>> getMessageGrilleById(int p_idMessage) {
   String script =
       "SELECT " //
           + EnStructMailRecu.EXPEDITEUR.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.SUJET.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.DATE_RECEPTION.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.STATUT.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.UID.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.ID_COMPTE.getNomChamp()
           + ", "
           + //
           EnStructMailRecu.ID_DOSSIER.getNomChamp() //
           + " FROM "
           + EnTable.MAIL_RECU.getNomTable()
           + //
           " WHERE " //
           + EnStructMailRecu.ID_MESSAGE.getNomChamp()
           + "="
           + p_idMessage;
   List<ArrayList<String>> lstResultat = requeteFact.getListeDenregistrement(script);
   return lstResultat;
 }
  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;
  }
 /**
  * Met a jour l'UID d'un message (lors du deplacement d'un message d'un dossier vers un autre
  * (Serveur IMAP par exemple)
  *
  * @param p_mlMessageGrille
  * @return
  */
 public boolean updateUIDMessage(MlMessageGrille p_mlMessageGrille) {
   String requete =
       "UPDATE "
           + EnTable.MAIL_RECU.getNomTable()
           + " SET "
           + EnStructMailRecu.UID.getNomChamp()
           + "='"
           + p_mlMessageGrille.getUidMessage()
           + "' WHERE "
           + EnStructMailRecu.ID_MESSAGE.getNomChamp()
           + "="
           + p_mlMessageGrille.getIdMessage();
   return requeteFact.executeRequete(requete);
 }
 /**
  * Obtenir le nombre de message dans un dossier
  *
  * @param p_idCompte
  * @param p_idDossier
  * @return
  */
 public int getnbMessageParDossier(int p_idCompte, int p_idDossier) {
   String requette =
       "select count ("
           + EnStructMailRecu.UID.getNomChamp()
           + ") FROM "
           + EnTable.MAIL_RECU.getNomTable()
           + " where "
           + EnStructMailRecu.ID_COMPTE.getNomChamp()
           + "="
           + p_idCompte
           + " and "
           + EnStructMailRecu.ID_DOSSIER.getNomChamp()
           + "="
           + p_idDossier;
   return Integer.parseInt(requeteFact.get1Champ(requette));
 }
 /**
  * savoir si l'uid est connu de la base
  *
  * @param uid - l'UID du message que l'on est en train de relever
  * @param p_idDossier - l'id du dossier dans lequel on fait la recherche
  * @return true si le message n'est pas present, false si le message est deja en base
  */
 public boolean isMessageUIDAbsent(String uid, int p_idDossier) {
   if (null == uid) {
     return true; // le message N'EST PAS EN BASE
   }
   String requete =
       "SELECT count (*) from "
           + EnTable.MAIL_RECU.getNomTable()
           + " where "
           + EnStructMailRecu.UID.getNomChamp()
           + "='"
           + uid.trim()
           + "' and "
           + EnStructMailRecu.ID_DOSSIER.getNomChamp()
           + "="
           + p_idDossier;
   return ("0".equals(requeteFact.get1Champ(requete)));
 }
  /**
   * 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();
        }
      }
    }
  }
  /**
   * Obtenir une liste des messages contenu dans un {@link MlDossier}
   *
   * @param p_idCompte
   * @param p_idDossierChoisi
   * @return la lsite des messages
   */
  public MlListeMessage getListeDeMessage(int p_idCompte, int p_idDossierChoisi) {
    AccesTablePieceJointe accesPJ = new AccesTablePieceJointe();
    MlListeMessage lstMessage = new MlListeMessage();
    String requette =
        "SELECT " //
            + EnStructMailRecu.ID_MESSAGE.getNomChamp()
            + ", " // idx0
            + EnStructMailRecu.UID.getNomChamp()
            + ", " // idx1
            + EnStructMailRecu.EXPEDITEUR.getNomChamp()
            + ", " // idx2
            + EnStructMailRecu.DEST.getNomChamp()
            + ", "
            + EnStructMailRecu.DEST_COPY.getNomChamp()
            + ", "
            + EnStructMailRecu.DEST_CACHE.getNomChamp()
            + ", " // idx
            // 3,4,5
            + EnStructMailRecu.SUJET.getNomChamp()
            + ", " // idx6
            // + EnStructMailRecu.CONTENU.getNomChamp()
            // + ", " // idx7
            + EnStructMailRecu.DATE_RECEPTION.getNomChamp() // idx8
            + ", "
            + EnStructMailRecu.STATUT.getNomChamp()
            + " FROM "
            + EnTable.MAIL_RECU.getNomTable() //
            + " where "
            + EnStructMailRecu.ID_COMPTE.getNomChamp()
            + "="
            + p_idCompte
            + " and "
            + EnStructMailRecu.ID_DOSSIER.getNomChamp()
            + "="
            + p_idDossierChoisi
            + " ORDER BY "
            + EnStructMailRecu.DATE_RECEPTION.getNomChamp()
            + " DESC";
    List<ArrayList<String>> lstResultat = requeteFact.getListeDenregistrement(requette);
    for (int i = 0; i < lstResultat.size(); i++) {
      ArrayList<String> unEnregistrement = lstResultat.get(i);
      MlMessage m = new MlMessage();
      m.setIdMessage(Integer.parseInt(unEnregistrement.get(0)));
      m.setUIDMessage(unEnregistrement.get(1));
      m.setExpediteur(decodeHTMLFromBase(unEnregistrement.get(2)));

      if (unEnregistrement.get(3) != null) { // DESTINATAIRE
        String[] tabDestinaire = unEnregistrement.get(3).split(";");
        ArrayList<String> lstDest = new ArrayList<String>();
        for (String des : tabDestinaire) {
          lstDest.add(des);
        }
        m.setDestinataire(lstDest);
      }
      if (unEnregistrement.get(4) != null) { // DESTINATAIRE COPY
        String[] tabDestinaire = unEnregistrement.get(4).split(";");
        ArrayList<String> lstDest = new ArrayList<String>();
        for (String des : tabDestinaire) {
          lstDest.add(des);
        }
        m.setDestinataireCopy(lstDest);
      }
      if (unEnregistrement.get(5) != null) { // DESTINATAIRE CACHE
        String[] tabDestinaire = unEnregistrement.get(5).split(";");
        ArrayList<String> lstDest = new ArrayList<String>();
        for (String des : tabDestinaire) {
          lstDest.add(des);
        }
        m.setDestinataireCache(lstDest);
      }

      m.setSujet(decodeHTMLFromBase(unEnregistrement.get(6)));
      // m.setContenu(unEnregistrement.get(7));
      m.setDateReception(RecupDate.getdateFromTimeStamp((unEnregistrement.get(7))));
      m.setLu((unEnregistrement.get(8).equals("T")));
      m.setIdDossier(p_idDossierChoisi);
      m.setIdCompte(p_idCompte);

      m.setHavePieceJointe(accesPJ.getListeIdPieceJointe(m.getIdMessage()).size() > 0);

      lstMessage.add(m);
    }

    return lstMessage;
    // return null;
  }