/**
   * Update the user expiration date with new values, and notify him with an email.
   *
   * @param nIdUser Id of the user to update
   * @param plugin The plugin
   */
  @SuppressWarnings("deprecation")
  public void updateUserExpirationDate(int nIdUser, Plugin plugin) {
    // We update the user account
    int nbMailSend = DatabaseUserHome.getNbAccountLifeTimeNotification(nIdUser, plugin);
    Timestamp newExpirationDate = SecurityUtils.getAccountMaxValidDate(_userParamService, plugin);
    DatabaseUserHome.updateUserExpirationDate(nIdUser, newExpirationDate, plugin);

    // We notify the user
    DatabaseAccountLifeTimeService accountLifeTimeService = new DatabaseAccountLifeTimeService();
    String strUserMail = accountLifeTimeService.getUserMainEmail(nIdUser);

    if ((nbMailSend > 0) && StringUtils.isNotBlank(strUserMail)) {
      String strBody =
          DatabaseTemplateService.getTemplateFromKey(PARAMETER_ACCOUNT_REACTIVATED_MAIL_BODY);

      ReferenceItem referenceItem =
          _userParamService.findByKey(PARAMETER_ACCOUNT_REACTIVATED_MAIL_SENDER, plugin);
      String strSender = (referenceItem == null) ? StringUtils.EMPTY : referenceItem.getName();

      referenceItem =
          _userParamService.findByKey(PARAMETER_ACCOUNT_REACTIVATED_MAIL_SUBJECT, plugin);

      String strSubject = (referenceItem == null) ? StringUtils.EMPTY : referenceItem.getName();

      Map<String, String> model = new HashMap<String, String>();
      accountLifeTimeService.addParametersToModel(model, nIdUser);

      HtmlTemplate template =
          AppTemplateService.getTemplateFromStringFtl(strBody, Locale.getDefault(), model);
      MailService.sendMailHtml(strUserMail, strSender, strSender, strSubject, template.getHtml());
    }
  }
  /**
   * Return the xsl export management page ( list of export format )
   *
   * @param request The Http request
   * @return Html of the xsl export management page
   */
  public String getManageXslExport(HttpServletRequest request) {
    HashMap<String, Object> model = new HashMap<String, Object>();
    List<XslExport> listXslExport = XslExportHome.getList();
    _strCurrentPageIndex =
        Paginator.getPageIndex(request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex);
    _nItemsPerPage =
        Paginator.getItemsPerPage(
            request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage);

    model.put(
        MARK_PERMISSION_CREATE,
        RBACService.isAuthorized(
            XslExport.RESOURCE_TYPE,
            RBAC.WILDCARD_RESOURCES_ID,
            XslExportResourceIdService.PERMISSION_CREATE,
            getUser()));
    model.put(
        MARK_PERMISSION_MODIFY,
        RBACService.isAuthorized(
            XslExport.RESOURCE_TYPE,
            RBAC.WILDCARD_RESOURCES_ID,
            XslExportResourceIdService.PERMISSION_MODIFY,
            getUser()));
    model.put(
        MARK_PERMISSION_DELETE,
        RBACService.isAuthorized(
            XslExport.RESOURCE_TYPE,
            RBAC.WILDCARD_RESOURCES_ID,
            XslExportResourceIdService.PERMISSION_DELETE,
            getUser()));

    LocalizedPaginator<XslExport> paginator =
        new LocalizedPaginator<XslExport>(
            listXslExport,
            _nItemsPerPage,
            getJspManageXslExport(request),
            PARAMETER_PAGE_INDEX,
            _strCurrentPageIndex,
            getLocale());

    model.put(MARK_PAGINATOR, paginator);
    model.put(MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPage);
    model.put(MARK_XSL_EXPORT_LIST, paginator.getPageItems());
    setPageTitleProperty(PROPERTY_MANAGE_XSL_EXPORT_TITLE);

    HtmlTemplate templateList =
        AppTemplateService.getTemplate(TEMPLATE_MANAGE_XSL_EXPORT, getLocale(), model);

    return getAdminPage(templateList.getHtml());
  }
  /**
   * Returns the Gismap HTML management page
   *
   * @param request The HTTP request.
   * @param nMode The current mode. [not implemented]
   * @throws UserNotSignedException
   * @throws SiteMessageException occurs when a site message need to be displayed
   */
  public String getManageGismap(HttpServletRequest request) {
    setPageTitleProperty(PROPERTY_PAGE_TITLE_FEATURES);

    Map<String, Object> model = new HashMap<String, Object>();

    // List<Geometry> listGeometry = GeometryHome.getList();
    model.put(PARAMETER_ADD, AddressParamHome.getAddressParameters());
    model.put(PARAMETER_MAP, GismapService.getInstance().getMapTemplate(request));

    HtmlTemplate templateList =
        AppTemplateService.getTemplate(TEMPLATE_HOME, request.getLocale(), model);

    return getAdminPage(templateList.getHtml());
  }
  /**
   * Gets the export format modification page
   *
   * @param request The HTTP request
   * @throws AccessDeniedException the {@link AccessDeniedException}
   * @return The export format creation page
   */
  public String getModifyXslExport(HttpServletRequest request) throws AccessDeniedException {
    if (!RBACService.isAuthorized(
        XslExport.RESOURCE_TYPE,
        RBAC.WILDCARD_RESOURCES_ID,
        XslExportResourceIdService.PERMISSION_MODIFY,
        getUser())) {
      throw new AccessDeniedException(MESSAGE_PERMISSION_DENIED);
    }

    XslExport xslExport;
    String strIdXslExport = request.getParameter(PARAMETER_ID_XSL_EXPORT);
    HashMap<String, Object> model = new HashMap<String, Object>();
    int nIdXslExport = Integer.parseInt(strIdXslExport);
    xslExport = XslExportHome.findByPrimaryKey(nIdXslExport);
    model.put(MARK_XSL_EXPORT, xslExport);

    Collection<Plugin> listPlugins = PluginService.getPluginList();
    ReferenceList refListPlugins = new ReferenceList();
    ReferenceItem refItem = new ReferenceItem();
    Plugin pluginCore = PluginService.getCore();
    refItem.setCode(pluginCore.getName());
    refItem.setName(pluginCore.getName());
    refListPlugins.add(refItem);

    for (Plugin plugin : listPlugins) {
      if (plugin != null) {
        refItem = new ReferenceItem();
        refItem.setCode(plugin.getName());
        refItem.setName(plugin.getName());
        refListPlugins.add(refItem);
      }
    }

    model.put(MARK_LIST_PLUGINS, refListPlugins);

    setPageTitleProperty(PROPERTY_MODIFY_XSL_EXPORT_TITLE);

    HtmlTemplate template =
        AppTemplateService.getTemplate(TEMPLATE_MODIFY_XSL_EXPORT, getLocale(), model);

    return getAdminPage(template.getHtml());
  }
  /**
   * Change all user's password and notify them with an email.
   *
   * @param strBaseURL The base url of the application
   * @param plugin The plugin
   * @param locale The locale to use
   */
  public void changeUserPasswordAndNotify(String strBaseURL, Plugin plugin, Locale locale) {
    // Alert all users their password have been reinitialized.
    Collection<DatabaseUser> listUsers = DatabaseUserHome.findDatabaseUsersList(plugin);

    for (DatabaseUser user : listUsers) {
      // Makes password
      String strPassword = SecurityUtils.makePassword(_userParamService, plugin);
      doModifyPassword(user, strPassword, plugin);

      if (StringUtils.isNotBlank(user.getEmail())) {
        // Sends password by e-mail
        ReferenceItem referenceItem =
            _userParamService.findByKey(PARAMETER_MAIL_PASSWORD_ENCRYPTION_CHANGED_SENDER, plugin);
        String strSenderEmail =
            (referenceItem == null) ? StringUtils.EMPTY : referenceItem.getName();
        referenceItem =
            _userParamService.findByKey(PARAMETER_MAIL_PASSWORD_ENCRYPTION_CHANGED_SUBJECT, plugin);

        String strEmailSubject =
            (referenceItem == null) ? StringUtils.EMPTY : referenceItem.getName();

        Map<String, Object> model = new HashMap<String, Object>();
        model.put(MARK_NEW_PASSWORD, strPassword);
        model.put(
            MARK_LOGIN_URL,
            strBaseURL + AdminAuthenticationService.getInstance().getLoginPageUrl());
        model.put(MARK_SITE_LINK, MailService.getSiteLink(strBaseURL, true));

        String strTemplate =
            DatabaseTemplateService.getTemplateFromKey(PARAMETER_MAIL_PASSWORD_ENCRYPTION_CHANGED);

        HtmlTemplate template =
            AppTemplateService.getTemplateFromStringFtl(strTemplate, locale, model);

        MailService.sendMailHtml(
            user.getEmail(), strSenderEmail, strSenderEmail, strEmailSubject, template.getHtml());
      }
    }
  }
  /**
   * Gets the xsl export creation page
   *
   * @param request The HTTP request
   * @throws AccessDeniedException the {@link AccessDeniedException}
   * @return The xsl export creation page
   */
  public String getCreateXslExport(HttpServletRequest request) throws AccessDeniedException {
    HashMap<String, Object> model = new HashMap<String, Object>();

    Collection<Plugin> listPlugins = PluginService.getPluginList();
    ReferenceList refListPlugins = new ReferenceList();
    ReferenceItem refItem = new ReferenceItem();
    Plugin pluginCore = PluginService.getCore();
    refItem.setCode(pluginCore.getName());
    refItem.setName(pluginCore.getName());
    refListPlugins.add(refItem);

    for (Plugin plugin : listPlugins) {
      if (plugin != null) {
        refItem = new ReferenceItem();
        refItem.setCode(plugin.getName());
        refItem.setName(plugin.getName());
        refListPlugins.add(refItem);
      }
    }

    model.put(MARK_LIST_PLUGINS, refListPlugins);

    if (!RBACService.isAuthorized(
        XslExport.RESOURCE_TYPE,
        RBAC.WILDCARD_RESOURCES_ID,
        XslExportResourceIdService.PERMISSION_CREATE,
        getUser())) {
      throw new AccessDeniedException(MESSAGE_PERMISSION_DENIED);
    }

    setPageTitleProperty(PROPERTY_CREATE_XSL_EXPORT_TITLE);

    HtmlTemplate template =
        AppTemplateService.getTemplate(TEMPLATE_CREATE_XSL_EXPORT, getLocale(), model);

    return getAdminPage(template.getHtml());
  }