@Override
 public void deverouillable(Verrou verrou) throws ServiceException {
   CompteUtilisateur compteUtilisateur =
       ((CompteUtilisateurDao) dao)
           .readByCodeVerrouByCauseVerrou(verrou.getCode(), verrou.getCause());
   if (compteUtilisateur == null)
     serviceException(
         ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_CODE_DEVEROUILLAGE_INCONNU);
 }
  @Override
  public void deverouiller(Verrou verrou, Credentials credentials) throws ServiceException {
    CompteUtilisateur compteUtilisateur =
        ((CompteUtilisateurDao) dao).readByUsername(credentials.getUsername());
    if (compteUtilisateur == null)
      serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INEXISTANT);

    // est ce que le compte est verouille
    if (compteUtilisateur.getVerrou() == null)
      serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_ACTIF);

    if (compteUtilisateur.getVerrou().getCause() == null
        || !compteUtilisateur.getVerrou().getCode().equals(verrou.getCode()))
      serviceException(
          ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_CODE_DEVEROUILLAGE_INCONNU);

    if (Cause.ACCESS_MULTIPLE.equals(verrou.getCause())
        && !compteUtilisateur.getCredentials().getPassword().equals(credentials.getPassword()))
      serviceException(ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_INEXISTANT);

    if (!compteUtilisateur.getVerrou().getJeton().equals(verrou.getJeton()))
      serviceException(
          ServiceExceptionType.IDENTIFICATION_COMPTE_UTILISATEUR_JETON_DEVEROUILLAGE_INCONNU);

    switch (verrou.getCause()) {
      case ACCESS_MULTIPLE:
        infos.clear();
        notifier(
            NotificationMessageType.AVIS_COMPTE_UTILISATEUR_DEVERROUILLE_ACCES_MULTIPLE,
            new Object[] {"nomPrenomsAgentEtat", compteUtilisateur.getUtilisateur().getNom()},
            compteUtilisateur);
        break;
      case REINITIALISATION_PASSWORD:
        compteUtilisateur
            .getCredentials()
            .setPassword(
                credentials.getPassword()); // on ecrase son ancien mot de passe avec le nouveau
        notifier(
            NotificationMessageType.AVIS_COMPTE_UTILISATEUR_DEVERROUILLE_REINITIALISATION_PASSWORD,
            new Object[] {
              "nomPrenomsAgentEtat",
              compteUtilisateur.getUtilisateur().getNom(),
              "loginUtilisateur",
              credentials.getUsername(),
              "motPasseUtilisateur",
              credentials.getPassword()
            },
            compteUtilisateur);
        break;
    }
    compteUtilisateur.setVerrou(null);
    dao.update(compteUtilisateur);
  }