/**
   * Perform the export format supression
   *
   * @param request The HTTP request
   * @throws AccessDeniedException the {@link AccessDeniedException}
   * @return The URL to go after performing the action
   */
  public String doRemoveXslExport(HttpServletRequest request) throws AccessDeniedException {
    if (!RBACService.isAuthorized(
        XslExport.RESOURCE_TYPE,
        RBAC.WILDCARD_RESOURCES_ID,
        XslExportResourceIdService.PERMISSION_DELETE,
        getUser())) {
      throw new AccessDeniedException(MESSAGE_PERMISSION_DENIED);
    }

    // ArrayList<String> listErrors = new ArrayList<String>( );
    String strIdXslExport = request.getParameter(PARAMETER_ID_XSL_EXPORT);
    int nIdXslExport = Integer.parseInt(strIdXslExport);
    XslExport xslExport = XslExportHome.findByPrimaryKey(nIdXslExport);

    // if ( !XslExportRemovalListenerService.getService( ).checkForRemoval( strIdXslExport,
    // listErrors, getLocale( ) ) )
    // {
    // String strCause = AdminMessageService.getFormattedList( listErrors, getLocale( ) );
    // Object[] args =
    // { strCause };
    //
    // return AdminMessageService.getMessageUrl( request, MESSAGE_CAN_NOT_REMOVE_XSL_EXPORT, args,
    // AdminMessage.TYPE_STOP );
    // }
    XslExportHome.remove(nIdXslExport);

    if (xslExport.getFile() != null) {
      FileHome.remove(xslExport.getFile().getIdFile());
    }

    return getJspManageXslExport(request);
  }
  /**
   * Perform the xsl export modification
   *
   * @param request The HTTP request
   * @throws AccessDeniedException the {@link AccessDeniedException}
   * @return The URL to go after performing the action
   */
  public String doModifyXslExport(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);
    int nIdXslExport = Integer.parseInt(strIdXslExport);
    xslExport = XslExportHome.findByPrimaryKey(nIdXslExport);

    String strError = getXslExportData(request, xslExport);

    if (strError != null) {
      return strError;
    }

    // if xslExport
    File fileStore = XslExportHome.findByPrimaryKey(nIdXslExport).getFile();

    if (xslExport.getFile() != null) {
      // the file has been modified
      File fileSource = xslExport.getFile();
      // init id file source and id physical file before update
      fileSource.setIdFile(fileStore.getIdFile());

      if (fileStore.getPhysicalFile() != null) {
        fileSource
            .getPhysicalFile()
            .setIdPhysicalFile(fileStore.getPhysicalFile().getIdPhysicalFile());
      }

      FileHome.update(fileSource);
    } else {
      xslExport.setFile(fileStore);
    }

    XslExportHome.update(xslExport);

    return getJspManageXslExport(request);
  }
  /**
   * 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());
  }
  /**
   * 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());
  }
  /**
   * Initiate a download of a XSL file
   *
   * @param request The request
   * @param response The response
   * @throws IOException Throw an exception if the outputstream has error.
   */
  public void doDownloadXslExport(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String strXslExportId = request.getParameter(PARAMETER_ID_XSL_EXPORT);

    if (strXslExportId != null) {
      int nXslExportId = Integer.parseInt(strXslExportId);
      XslExport xslExport = XslExportHome.findByPrimaryKey(nXslExportId);

      String strMimetype = xslExport.getFile().getMimeType();
      response.setContentType((strMimetype != null) ? strMimetype : "application/octet-stream");
      response.setHeader(
          "Content-Disposition",
          "attachement; filename=\"" + xslExport.getFile().getTitle() + "\"");

      OutputStream out = response.getOutputStream();
      PhysicalFile physicalFile =
          PhysicalFileHome.findByPrimaryKey(
              xslExport.getFile().getPhysicalFile().getIdPhysicalFile());
      out.write(physicalFile.getValue());
      out.flush();
      out.close();
    }
  }
  /**
   * Perform the xsl export creation
   *
   * @param request The HTTP request
   * @throws AccessDeniedException the {@link AccessDeniedException}
   * @return The URL to go after performing the action
   */
  public String doCreateXslExport(HttpServletRequest request) throws AccessDeniedException {
    XslExport xslExport = new XslExport();
    String strError = getXslExportData(request, xslExport);

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

    if (strError != null) {
      return strError;
    }

    if (xslExport.getFile() != null) {
      xslExport.getFile().setIdFile(FileHome.create(xslExport.getFile()));
    }

    XslExportHome.create(xslExport);

    return getJspManageXslExport(request);
  }