MailingListJspBean.java

  1. /*
  2.  * Copyright (c) 2002-2022, City of Paris
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  *  1. Redistributions of source code must retain the above copyright notice
  10.  *     and the following disclaimer.
  11.  *
  12.  *  2. Redistributions in binary form must reproduce the above copyright notice
  13.  *     and the following disclaimer in the documentation and/or other materials
  14.  *     provided with the distribution.
  15.  *
  16.  *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
  17.  *     contributors may be used to endorse or promote products derived from
  18.  *     this software without specific prior written permission.
  19.  *
  20.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
  24.  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30.  * POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * License 1.0
  33.  */
  34. package fr.paris.lutece.portal.web.mailinglist;

  35. import java.util.ArrayList;
  36. import java.util.Collection;
  37. import java.util.Collections;
  38. import java.util.HashMap;
  39. import java.util.List;
  40. import java.util.Map;

  41. import javax.servlet.http.HttpServletRequest;

  42. import org.apache.commons.lang3.StringUtils;

  43. import fr.paris.lutece.portal.business.mailinglist.MailingList;
  44. import fr.paris.lutece.portal.business.mailinglist.MailingListFilter;
  45. import fr.paris.lutece.portal.business.mailinglist.MailingListHome;
  46. import fr.paris.lutece.portal.business.mailinglist.MailingListUsersFilter;
  47. import fr.paris.lutece.portal.business.mailinglist.Recipient;
  48. import fr.paris.lutece.portal.business.rbac.RBACRoleHome;
  49. import fr.paris.lutece.portal.service.admin.AccessDeniedException;
  50. import fr.paris.lutece.portal.service.mailinglist.AdminMailingListService;
  51. import fr.paris.lutece.portal.service.mailinglist.MailingListRemovalListenerService;
  52. import fr.paris.lutece.portal.service.message.AdminMessage;
  53. import fr.paris.lutece.portal.service.message.AdminMessageService;
  54. import fr.paris.lutece.portal.service.security.SecurityTokenService;
  55. import fr.paris.lutece.portal.service.template.AppTemplateService;
  56. import fr.paris.lutece.portal.service.util.AppLogService;
  57. import fr.paris.lutece.portal.service.util.AppPathService;
  58. import fr.paris.lutece.portal.service.util.AppPropertiesService;
  59. import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
  60. import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
  61. import fr.paris.lutece.portal.web.constants.Messages;
  62. import fr.paris.lutece.portal.web.constants.Parameters;
  63. import fr.paris.lutece.portal.web.util.LocalizedPaginator;
  64. import fr.paris.lutece.util.ReferenceList;
  65. import fr.paris.lutece.util.html.AbstractPaginator;
  66. import fr.paris.lutece.util.html.HtmlTemplate;
  67. import fr.paris.lutece.util.http.SecurityUtil;
  68. import fr.paris.lutece.util.sort.AttributeComparator;
  69. import fr.paris.lutece.util.url.UrlItem;

  70. /**
  71.  * Mailing ListJspBean
  72.  */
  73. public class MailingListJspBean extends AdminFeaturesPageJspBean
  74. {
  75.     private static final long serialVersionUID = -1589153949244582338L;

  76.     // Rights
  77.     public static final String RIGHT_MANAGE_MAILINGLISTS = "CORE_MAILINGLISTS_MANAGEMENT";

  78.     // Templates
  79.     private static final String TEMPLATE_MANAGE_MAILINGLISTS = "admin/mailinglist/manage_mailinglists.html";
  80.     private static final String TEMPLATE_CREATE_MAILINGLIST = "admin/mailinglist/create_mailinglist.html";
  81.     private static final String TEMPLATE_MODIFY_MAILINGLIST = "admin/mailinglist/modify_mailinglist.html";
  82.     private static final String TEMPLATE_ADD_USERS = "admin/mailinglist/add_users.html";
  83.     private static final String TEMPLATE_VIEW_USERS = "admin/mailinglist/view_users.html";

  84.     // Bookmarks
  85.     private static final String MARK_MAILINGLISTS_LIST = "mailinglists_list";
  86.     private static final String MARK_WORKGROUPS_LIST = "workgroups_list";
  87.     private static final String MARK_WORKGROUP_SELECTED = "selected_workgroup";
  88.     private static final String MARK_ROLES_LIST = "roles_list";
  89.     private static final String MARK_RECIPIENTS_LIST = "recipients_list";
  90.     private static final String MARK_MAILINGLIST = "mailinglist";
  91.     private static final String MARK_MAILINGLIST_FILTER = "mailinglistFilter";
  92.     private static final String MARK_PAGINATOR = "paginator";
  93.     private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";

  94.     // Properties
  95.     private static final String PROPERTY_CREATE_MAILINGLIST_PAGETITLE = "portal.mailinglist.create_mailinglist.pageTitle";
  96.     private static final String PROPERTY_MODIFY_MAILINGLIST_PAGETITLE = "portal.mailinglist.modify_mailinglist.pageTitle";
  97.     private static final String PROPERTY_VIEW_USERS_PAGETITLE = "portal.mailinglist.view_users.pageTitle";
  98.     private static final String PROPERTY_ADD_USERS_PAGETITLE = "portal.mailinglist.add_users.pageTitle";
  99.     private static final String PROPERTY_MAILINGLIST_PER_PAGE = "paginator.mailinglist.itemsPerPage";
  100.     private static final String MESSAGE_CONFIRM_REMOVE = "portal.mailinglist.message.confirmRemoveMailingList";
  101.     private static final String MESSAGE_CANNOT_REMOVE = "portal.mailinglist.message.cannotRemoveMailingList";
  102.     private static final String MESSAGE_FILTER_ALREADY_EXISTS = "portal.mailinglist.message.filterAlreadyExists";

  103.     // Parameters
  104.     private static final String PARAMETER_WORKGROUP = "workgroup";
  105.     private static final String PARAMETER_ROLE = "role";
  106.     private static final String PARAMETER_MAILINGLIST_ID = "id_mailinglist";
  107.     private static final String PARAMETER_NAME = "name";
  108.     private static final String PARAMETER_DESCRIPTION = "description";
  109.     private static final String PARAMETER_SESSION = "session";

  110.     // JSP
  111.     private static final String JSP_MODIFY_MAILINGLIST = "ModifyMailingList.jsp";
  112.     private static final String JSP_URL_REMOVE_MAILINGLIST = "jsp/admin/mailinglist/DoRemoveMailingList.jsp";
  113.     private static final String JSP_URL_MANAGE_MAILINGLISTS = "jsp/admin/mailinglist/ManageMailingLists.jsp";
  114.     private MailingListFilter _mailingListFilter;
  115.     private int _nItemsPerPage;
  116.     private String _strCurrentPageIndex;

  117.     /**
  118.      * Get the mailinglists management page. This page provides the list of all existing mailinglists.
  119.      *
  120.      * @param request
  121.      *            the http request
  122.      * @return the html code for the mailinglist management page
  123.      */
  124.     public String getManageMailinglists( HttpServletRequest request )
  125.     {
  126.         Map<String, Object> model = new HashMap<>( );

  127.         // Build filter
  128.         if ( StringUtils.isBlank( request.getParameter( PARAMETER_SESSION ) ) )
  129.         {
  130.             _mailingListFilter = new MailingListFilter( );
  131.             populate( _mailingListFilter, request );
  132.         }

  133.         List<MailingList> listMailinglists = AdminMailingListService.getUserMailingListsByFilter( getUser( ), _mailingListFilter );

  134.         // SORT
  135.         String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
  136.         String strAscSort = request.getParameter( Parameters.SORTED_ASC );
  137.         boolean bIsAscSort = true;

  138.         if ( StringUtils.isBlank( strSortedAttributeName ) )
  139.         {
  140.             strSortedAttributeName = PARAMETER_NAME;
  141.         }

  142.         if ( StringUtils.isNotBlank( strAscSort ) )
  143.         {
  144.             bIsAscSort = Boolean.parseBoolean( strAscSort );
  145.         }

  146.         Collections.sort( listMailinglists, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );

  147.         // Paginator
  148.         _strCurrentPageIndex = AbstractPaginator.getPageIndex( request, AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
  149.         int defaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_MAILINGLIST_PER_PAGE, 50 );
  150.         _nItemsPerPage = AbstractPaginator.getItemsPerPage( request, AbstractPaginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, defaultItemsPerPage );

  151.         UrlItem url = new UrlItem( AppPathService.getBaseUrl( request ) + JSP_URL_MANAGE_MAILINGLISTS );
  152.         url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName );
  153.         url.addParameter( Parameters.SORTED_ASC, Boolean.toString( bIsAscSort ) );
  154.         url.addParameter( PARAMETER_SESSION, PARAMETER_SESSION );

  155.         LocalizedPaginator<MailingList> paginator = new LocalizedPaginator<>( listMailinglists, _nItemsPerPage, url.getUrl( ),
  156.                 AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, request.getLocale( ) );

  157.         model.put( MARK_MAILINGLISTS_LIST, paginator.getPageItems( ) );
  158.         model.put( MARK_PAGINATOR, paginator );
  159.         model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( paginator.getItemsPerPage( ) ) );
  160.         model.put( MARK_MAILINGLIST_FILTER, _mailingListFilter );

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

  162.         return getAdminPage( template.getHtml( ) );
  163.     }

  164.     /**
  165.      * Get the mailinglist create page.
  166.      *
  167.      * @param request
  168.      *            the http request
  169.      * @return the html code for the mailinglist create page
  170.      */
  171.     public String getCreateMailinglist( HttpServletRequest request )
  172.     {
  173.         setPageTitleProperty( PROPERTY_CREATE_MAILINGLIST_PAGETITLE );

  174.         ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );

  175.         HashMap<String, Object> model = new HashMap<>( );
  176.         model.put( MARK_WORKGROUPS_LIST, listWorkgroups );

  177.         // LUTECE-890 : the first workgroup will be selected by default
  178.         if ( !listWorkgroups.isEmpty( ) )
  179.         {
  180.             model.put( MARK_WORKGROUP_SELECTED, listWorkgroups.get( 0 ).getCode( ) );
  181.         }

  182.         model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, TEMPLATE_CREATE_MAILINGLIST ) );
  183.         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_MAILINGLIST, getLocale( ), model );

  184.         return getAdminPage( template.getHtml( ) );
  185.     }

  186.     /**
  187.      * Process the data capture form for create a mailing list
  188.      *
  189.      * @param request
  190.      *            The HTTP Request
  191.      * @return The Jsp URL of the process result
  192.      * @throws AccessDeniedException
  193.      *             If the security token is invalid
  194.      */
  195.     public String doCreateMailingList( HttpServletRequest request ) throws AccessDeniedException
  196.     {
  197.         MailingList mailinglist = new MailingList( );
  198.         String strErrors = processFormData( request, mailinglist );

  199.         if ( strErrors != null )
  200.         {
  201.             return AdminMessageService.getMessageUrl( request, strErrors, AdminMessage.TYPE_STOP );
  202.         }
  203.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_CREATE_MAILINGLIST ) )
  204.         {
  205.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  206.         }

  207.         MailingListHome.create( mailinglist );

  208.         // Forward to modify page to enter users filters
  209.         UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
  210.         urlModify.addParameter( PARAMETER_MAILINGLIST_ID, mailinglist.getId( ) );

  211.         return urlModify.getUrl( );
  212.     }

  213.     /**
  214.      * Get the mailinglist modify page.
  215.      *
  216.      * @param request
  217.      *            the http request
  218.      * @return the html code for the mailinglist modify page
  219.      */
  220.     public String getModifyMailinglist( HttpServletRequest request )
  221.     {
  222.         setPageTitleProperty( PROPERTY_MODIFY_MAILINGLIST_PAGETITLE );

  223.         ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );

  224.         String strMailingListId = request.getParameter( PARAMETER_MAILINGLIST_ID );

  225.         if ( !StringUtils.isNumeric( strMailingListId ) )
  226.         {
  227.             AppLogService.error( " {} is not a valid mailing list id.", ( ) -> SecurityUtil.logForgingProtect( strMailingListId ) );

  228.             return getManageMailinglists( request );
  229.         }

  230.         int nMailingListId = Integer.parseInt( strMailingListId );
  231.         MailingList mailinglist = MailingListHome.findByPrimaryKey( nMailingListId );

  232.         if ( mailinglist == null )
  233.         {
  234.             AppLogService.error( "{} is not a valid mailing list id.", ( ) -> SecurityUtil.logForgingProtect( strMailingListId ) );

  235.             return getManageMailinglists( request );
  236.         }

  237.         Map<String, Object> model = new HashMap<>( );
  238.         model.put( MARK_WORKGROUPS_LIST, listWorkgroups );
  239.         model.put( MARK_MAILINGLIST, mailinglist );
  240.         model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, TEMPLATE_MODIFY_MAILINGLIST ) );

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

  242.         return getAdminPage( template.getHtml( ) );
  243.     }

  244.     /**
  245.      * Process the data capture form for modify a mailing list
  246.      *
  247.      * @param request
  248.      *            The HTTP Request
  249.      * @return The Jsp URL of the process result
  250.      * @throws AccessDeniedException
  251.      *             if the security token is invalid
  252.      */
  253.     public String doModifyMailingList( HttpServletRequest request ) throws AccessDeniedException
  254.     {
  255.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
  256.         int nId = Integer.parseInt( strId );
  257.         MailingList mailinglist = MailingListHome.findByPrimaryKey( nId );

  258.         String strErrors = processFormData( request, mailinglist );

  259.         if ( strErrors != null )
  260.         {
  261.             return AdminMessageService.getMessageUrl( request, strErrors, AdminMessage.TYPE_STOP );
  262.         }
  263.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_MODIFY_MAILINGLIST ) )
  264.         {
  265.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  266.         }

  267.         MailingListHome.update( mailinglist );

  268.         return getHomeUrl( request );
  269.     }

  270.     /**
  271.      * Returns the page of confirmation for deleting a mailinglist
  272.      *
  273.      * @param request
  274.      *            The Http Request
  275.      * @return the confirmation url
  276.      */
  277.     public String getConfirmRemoveMailingList( HttpServletRequest request )
  278.     {
  279.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );

  280.         ArrayList<String> listErrors = new ArrayList<>( );

  281.         if ( !MailingListRemovalListenerService.getService( ).checkForRemoval( strId, listErrors, getLocale( ) ) )
  282.         {
  283.             String strCause = AdminMessageService.getFormattedList( listErrors, getLocale( ) );
  284.             Object [ ] args = {
  285.                     strCause
  286.             };
  287.             return AdminMessageService.getMessageUrl( request, MESSAGE_CANNOT_REMOVE, args, AdminMessage.TYPE_STOP );
  288.         }
  289.         String strUrlRemove = JSP_URL_REMOVE_MAILINGLIST;
  290.         Map<String, String> parameters = new HashMap<>( );
  291.         parameters.put( PARAMETER_MAILINGLIST_ID, strId );
  292.         parameters.put( SecurityTokenService.PARAMETER_TOKEN, SecurityTokenService.getInstance( ).getToken( request, JSP_URL_REMOVE_MAILINGLIST ) );
  293.         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE, strUrlRemove, AdminMessage.TYPE_CONFIRMATION, parameters );

  294.     }

  295.     /**
  296.      * Process the data capture form for modify a mailing list
  297.      *
  298.      * @param request
  299.      *            The HTTP Request
  300.      * @return The Jsp URL of the process result
  301.      * @throws AccessDeniedException
  302.      *             if the security token is invalid
  303.      */
  304.     public String doRemoveMailingList( HttpServletRequest request ) throws AccessDeniedException
  305.     {
  306.         if ( !SecurityTokenService.getInstance( ).validate( request, JSP_URL_REMOVE_MAILINGLIST ) )
  307.         {
  308.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  309.         }
  310.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
  311.         int nId = Integer.parseInt( strId );

  312.         MailingListHome.remove( nId );

  313.         return getHomeUrl( request );
  314.     }

  315.     /**
  316.      * Get the view users page.
  317.      *
  318.      * @param request
  319.      *            the http request
  320.      * @return the html code for the mailinglist modify page
  321.      */
  322.     public String getViewUsers( HttpServletRequest request )
  323.     {
  324.         setPageTitleProperty( PROPERTY_VIEW_USERS_PAGETITLE );

  325.         HashMap<String, Object> model = new HashMap<>( );
  326.         Collection<Recipient> listRecipients;
  327.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );

  328.         if ( strId != null )
  329.         {
  330.             int nIdMailingList = Integer.parseInt( strId );
  331.             listRecipients = AdminMailingListService.getRecipients( nIdMailingList );
  332.         }
  333.         else
  334.         {
  335.             String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
  336.             String strRole = request.getParameter( PARAMETER_ROLE );
  337.             listRecipients = AdminMailingListService.getRecipients( strWorkgroup, strRole );
  338.         }

  339.         model.put( MARK_RECIPIENTS_LIST, listRecipients );

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

  341.         return getAdminPage( template.getHtml( ) );
  342.     }

  343.     /**
  344.      * Get the add users page.
  345.      *
  346.      * @param request
  347.      *            the http request
  348.      * @return the html code for the mailinglist modify page
  349.      */
  350.     public String getAddUsers( HttpServletRequest request )
  351.     {
  352.         setPageTitleProperty( PROPERTY_ADD_USERS_PAGETITLE );

  353.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
  354.         int nId = Integer.parseInt( strId );
  355.         MailingList mailinglist = MailingListHome.findByPrimaryKey( nId );

  356.         if ( mailinglist == null )
  357.         {
  358.             return getManageMailinglists( request );
  359.         }

  360.         ReferenceList listWorkgroups = AdminWorkgroupService.getUserWorkgroups( getUser( ), getLocale( ) );
  361.         ReferenceList listRoles = RBACRoleHome.getRolesList( );
  362.         listRoles.addItem( AdminMailingListService.ALL_ROLES, AdminMailingListService.ALL_ROLES );

  363.         Map<String, Object> model = new HashMap<>( );
  364.         model.put( MARK_WORKGROUPS_LIST, listWorkgroups );
  365.         model.put( MARK_ROLES_LIST, listRoles );
  366.         model.put( MARK_MAILINGLIST, mailinglist );
  367.         model.put( SecurityTokenService.MARK_TOKEN, SecurityTokenService.getInstance( ).getToken( request, TEMPLATE_ADD_USERS ) );

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

  369.         return getAdminPage( template.getHtml( ) );
  370.     }

  371.     /**
  372.      * Process the data capture form for adding users filters
  373.      *
  374.      * @param request
  375.      *            The HTTP Request
  376.      * @return The Jsp URL of the process result
  377.      * @throws AccessDeniedException
  378.      *             if the security token is invalid
  379.      */
  380.     public String doAddUsers( HttpServletRequest request ) throws AccessDeniedException
  381.     {
  382.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
  383.         String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
  384.         String strRole = request.getParameter( PARAMETER_ROLE );

  385.         int nId = Integer.parseInt( strId );
  386.         MailingListUsersFilter filter = new MailingListUsersFilter( );
  387.         filter.setWorkgroup( strWorkgroup );
  388.         filter.setRole( strRole );

  389.         if ( !AdminMailingListService.checkFilter( filter, nId ) )
  390.         {
  391.             if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_ADD_USERS ) )
  392.             {
  393.                 throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  394.             }
  395.             MailingListHome.addFilterToMailingList( filter, nId );

  396.             // Forward to modify page to enter users filters
  397.             UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
  398.             urlModify.addParameter( PARAMETER_MAILINGLIST_ID, nId );

  399.             return urlModify.getUrl( );
  400.         }

  401.         return AdminMessageService.getMessageUrl( request, MESSAGE_FILTER_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
  402.     }

  403.     /**
  404.      * Process the data capture form to remove users filters
  405.      *
  406.      * @param request
  407.      *            The HTTP Request
  408.      * @return The Jsp URL of the process result
  409.      * @throws AccessDeniedException
  410.      *             if the security token is invalid
  411.      */
  412.     public String doDeleteFilter( HttpServletRequest request ) throws AccessDeniedException
  413.     {
  414.         if ( !SecurityTokenService.getInstance( ).validate( request, TEMPLATE_MODIFY_MAILINGLIST ) )
  415.         {
  416.             throw new AccessDeniedException( ERROR_INVALID_TOKEN );
  417.         }

  418.         String strId = request.getParameter( PARAMETER_MAILINGLIST_ID );
  419.         String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );
  420.         String strRole = request.getParameter( PARAMETER_ROLE );

  421.         int nId = Integer.parseInt( strId );
  422.         MailingListUsersFilter filter = new MailingListUsersFilter( );
  423.         filter.setWorkgroup( strWorkgroup );
  424.         filter.setRole( strRole );
  425.         MailingListHome.deleteFilterToMailingList( filter, nId );

  426.         // Forward to modify page to enter users filters
  427.         UrlItem urlModify = new UrlItem( JSP_MODIFY_MAILINGLIST );
  428.         urlModify.addParameter( PARAMETER_MAILINGLIST_ID, nId );

  429.         return urlModify.getUrl( );
  430.     }

  431.     /**
  432.      * Process Form Data
  433.      *
  434.      * @param request
  435.      *            The HTTP request
  436.      * @param mailinglist
  437.      *            The mailing list
  438.      * @return An Error message or null if no error
  439.      */
  440.     private String processFormData( HttpServletRequest request, MailingList mailinglist )
  441.     {
  442.         String strErrors = null;
  443.         String strName = request.getParameter( PARAMETER_NAME );
  444.         String strDescription = request.getParameter( PARAMETER_DESCRIPTION );
  445.         String strWorkgroup = request.getParameter( PARAMETER_WORKGROUP );

  446.         if ( ( strName == null ) || ( strName.equals( "" ) ) || ( strDescription == null ) || ( strDescription.equals( "" ) ) )
  447.         {
  448.             return Messages.MANDATORY_FIELDS;
  449.         }

  450.         mailinglist.setName( strName );
  451.         mailinglist.setDescription( strDescription );
  452.         mailinglist.setWorkgroup( strWorkgroup );

  453.         return strErrors;
  454.     }
  455. }