View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de 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.role;
35  
36  import fr.paris.lutece.portal.business.role.Role;
37  import fr.paris.lutece.portal.business.role.RoleHome;
38  import fr.paris.lutece.portal.service.message.AdminMessage;
39  import fr.paris.lutece.portal.service.message.AdminMessageService;
40  import fr.paris.lutece.portal.service.role.RoleRemovalListenerService;
41  import fr.paris.lutece.portal.service.template.AppTemplateService;
42  import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
43  import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
44  import fr.paris.lutece.portal.web.constants.Messages;
45  import fr.paris.lutece.util.html.HtmlTemplate;
46  import fr.paris.lutece.util.string.StringUtil;
47  import fr.paris.lutece.util.url.UrlItem;
48  
49  import java.util.ArrayList;
50  import java.util.Collection;
51  import java.util.HashMap;
52  import java.util.Map;
53  
54  import javax.servlet.http.HttpServletRequest;
55  
56  import org.apache.commons.lang.StringUtils;
57  
58  
59  /**
60   * JspBean for Role management
61   */
62  public class RoleJspBean extends AdminFeaturesPageJspBean
63  {
64      ////////////////////////////////////////////////////////////////////////////////
65      // Constant
66  
67      // Right
68      /**
69       * Right to manage roles
70       */
71      public static final String RIGHT_ROLES_MANAGEMENT = "CORE_ROLES_MANAGEMENT";
72  
73      /**
74       * Serial version UID
75       */
76      private static final long serialVersionUID = -764350969432795013L;
77  
78      // Markers
79      private static final String MARK_ROLES_LIST = "roles_list";
80      private static final String MARK_ROLE = "role";
81      private static final String MARK_DEFAULT_VALUE_WORKGROUP_KEY = "workgroup_key_default_value";
82      private static final String MARK_WORKGROUP_KEY_LIST = "workgroup_key_list";
83  
84      // Parameters
85      private static final String PARAMETER_PAGE_ROLE = "role";
86      private static final String PARAMETER_PAGE_ROLE_DESCRIPTION = "role_description";
87      private static final String PARAMETER_PAGE_WORKGROUP = "workgroup_key";
88  
89      // Templates
90      private static final String TEMPLATE_MANAGE_ROLES = "admin/role/manage_roles.html";
91      private static final String TEMPLATE_PAGE_ROLE_MODIFY = "admin/role/modify_page_role.html";
92      private static final String TEMPLATE_CREATE_PAGE_ROLE = "admin/role/create_page_role.html";
93  
94      // Jsp
95      private static final String PATH_JSP = "jsp/admin/role/";
96      private static final String JSP_REMOVE_ROLE = "DoRemovePageRole.jsp";
97  
98      // Properties
99      private static final String PROPERTY_PAGE_TITLE_CREATE_ROLE = "portal.role.create_role.pageTitle";
100     private static final String PROPERTY_PAGE_TITLE_MODIFY_ROLE = "portal.role.modify_role.pageTitle";
101 
102     // Message
103     private static final String MESSAGE_ROLE_EXIST = "portal.role.message.roleexist";
104     private static final String MESSAGE_ROLE_FORMAT = "portal.role.message.roleformat";
105     private static final String MESSAGE_CONFIRM_REMOVE = "portal.role.message.confirmRemoveRole";
106     private static final String MESSAGE_CANNOT_REMOVE_ROLE = "portal.role.message.cannotRemoveRole";
107 
108     /**
109      * Creates a new RoleJspBean object.
110      */
111     public RoleJspBean(  )
112     {
113     }
114 
115     /**
116      * Returns Page Role management form
117      * @param request The Http request
118      * @return Html form
119      */
120     public String getManagePageRole( HttpServletRequest request )
121     {
122         setPageTitleProperty( null );
123 
124         Map<String, Object> model = new HashMap<String, Object>(  );
125         Collection<Role> listRoles = RoleHome.findAll(  );
126         listRoles = AdminWorkgroupService.getAuthorizedCollection( listRoles, getUser(  ) );
127         model.put( MARK_ROLES_LIST, listRoles );
128 
129         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ROLES, getLocale(  ), model );
130 
131         return getAdminPage( template.getHtml(  ) );
132     }
133 
134     /**
135      * Insert a new PageRole
136      * @param request The HTTP request
137      * @return String The html code page
138      */
139     public String getCreatePageRole( HttpServletRequest request )
140     {
141         setPageTitleProperty( PROPERTY_PAGE_TITLE_CREATE_ROLE );
142 
143         Map<String, Object> model = new HashMap<String, Object>(  );
144 
145         model.put( MARK_DEFAULT_VALUE_WORKGROUP_KEY, AdminWorkgroupService.ALL_GROUPS );
146         model.put( MARK_WORKGROUP_KEY_LIST, AdminWorkgroupService.getUserWorkgroups( getUser(  ), getLocale(  ) ) );
147 
148         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_PAGE_ROLE, getLocale(  ), model );
149 
150         return getAdminPage( template.getHtml(  ) );
151     }
152 
153     /**
154      * Create PageRole
155      * @param request The HTTP request
156      * @return String The url page
157      */
158     public String doCreatePageRole( HttpServletRequest request )
159     {
160         String strPageRole = request.getParameter( PARAMETER_PAGE_ROLE );
161         String strPageRoleDescription = request.getParameter( PARAMETER_PAGE_ROLE_DESCRIPTION );
162         String strPageWorkgroup = request.getParameter( PARAMETER_PAGE_WORKGROUP );
163 
164         // Mandatory field
165         if ( ( strPageRole == null ) || strPageRole.equals( "" ) || ( strPageRoleDescription == null ) ||
166                 strPageRoleDescription.equals( "" ) || ( strPageWorkgroup == null ) )
167         {
168             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
169         }
170 
171         // Check if code is valid
172         if ( !StringUtil.checkCodeKey( strPageRole ) )
173         {
174             return AdminMessageService.getMessageUrl( request, MESSAGE_ROLE_FORMAT, AdminMessage.TYPE_STOP );
175         }
176 
177         // Check if role exist
178         if ( RoleHome.findExistRole( strPageRole ) )
179         {
180             return AdminMessageService.getMessageUrl( request, MESSAGE_ROLE_EXIST, AdminMessage.TYPE_STOP );
181         }
182 
183         Role role = new Role(  );
184         role.setRole( strPageRole );
185         role.setRoleDescription( strPageRoleDescription );
186         role.setWorkgroup( strPageWorkgroup );
187         RoleHome.create( role );
188 
189         return getHomeUrl( request );
190     }
191 
192     /**
193      *
194      * @param request The HTTP request
195      * @return String The html code page
196      */
197     public String getModifyPageRole( HttpServletRequest request )
198     {
199         setPageTitleProperty( PROPERTY_PAGE_TITLE_MODIFY_ROLE );
200 
201         Map<String, Object> model = new HashMap<String, Object>(  );
202 
203         String strPageRole = request.getParameter( PARAMETER_PAGE_ROLE );
204 
205         Role role = RoleHome.findByPrimaryKey( strPageRole );
206 
207         if ( role == null )
208         {
209             return getManagePageRole( request );
210         }
211 
212         model.put( MARK_ROLE, role );
213         model.put( MARK_WORKGROUP_KEY_LIST, AdminWorkgroupService.getUserWorkgroups( getUser(  ), getLocale(  ) ) );
214 
215         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_PAGE_ROLE_MODIFY, getLocale(  ), model );
216 
217         return getAdminPage( template.getHtml(  ) );
218     }
219 
220     /**
221      * Modify PageRole
222      * @param request The HTTP request
223      * @return String The url page
224      */
225     public String doModifyPageRole( HttpServletRequest request )
226     {
227         String strPageRole = request.getParameter( PARAMETER_PAGE_ROLE );
228         String strPageRoleDescription = request.getParameter( PARAMETER_PAGE_ROLE_DESCRIPTION );
229         String strPageWorkgroup = request.getParameter( PARAMETER_PAGE_WORKGROUP );
230 
231         // Mandatory field
232         if ( ( strPageRoleDescription == null ) || strPageRoleDescription.equals( "" ) || ( strPageWorkgroup == null ) )
233         {
234             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
235         }
236 
237         Role role = new Role(  );
238         role.setRole( strPageRole );
239         role.setRoleDescription( strPageRoleDescription );
240         role.setWorkgroup( strPageWorkgroup );
241         RoleHome.update( role );
242 
243         return getHomeUrl( request );
244     }
245 
246     /**
247      * confirm Delete PageRole
248      * @param request The HTTP request
249      * @return String The html code page
250      */
251     public String getRemovePageRole( HttpServletRequest request )
252     {
253         String strPageRole = request.getParameter( PARAMETER_PAGE_ROLE );
254         if ( StringUtils.isBlank( strPageRole ) )
255         {
256             return AdminMessageService.getMessageUrl( request, Messages.MESSAGE_INVALID_ENTRY,
257                     new Object[] { PARAMETER_PAGE_ROLE }, AdminMessage.TYPE_STOP );
258         }
259         Role role = RoleHome.findByPrimaryKey( strPageRole );
260         if ( role == null || !strPageRole.equals( role.getRole( ) ) )
261         {
262             return AdminMessageService.getMessageUrl( request, Messages.MESSAGE_INVALID_ENTRY,
263                     new Object[] { strPageRole }, AdminMessage.TYPE_STOP );
264         }
265         UrlItem url = new UrlItem( PATH_JSP + JSP_REMOVE_ROLE + "?role=" + request.getParameter( PARAMETER_PAGE_ROLE ) );
266 
267         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE, new Object[] { strPageRole }, url.getUrl(  ),
268             AdminMessage.TYPE_CONFIRMATION );
269     }
270 
271     /**
272      * Delete PageRole
273      * @param request The HTTP request
274      * @return String The url page
275      */
276     public String doRemovePageRole( HttpServletRequest request )
277     {
278         String strPageRole = request.getParameter( PARAMETER_PAGE_ROLE );
279         ArrayList<String> listErrors = new ArrayList<String>(  );
280 
281         if ( !RoleRemovalListenerService.getService(  ).checkForRemoval( strPageRole, listErrors, getLocale(  ) ) )
282         {
283             String strCause = AdminMessageService.getFormattedList( listErrors, getLocale(  ) );
284             Object[] args = { strPageRole, strCause };
285 
286             return AdminMessageService.getMessageUrl( request, MESSAGE_CANNOT_REMOVE_ROLE, args, AdminMessage.TYPE_STOP );
287         }
288 
289         RoleHome.remove( strPageRole );
290 
291         return getHomeUrl( request );
292     }
293 }