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.search;
35  
36  import fr.paris.lutece.portal.business.rbac.RBAC;
37  import fr.paris.lutece.portal.business.search.SearchParameterHome;
38  import fr.paris.lutece.portal.service.admin.AccessDeniedException;
39  import fr.paris.lutece.portal.service.message.AdminMessage;
40  import fr.paris.lutece.portal.service.message.AdminMessageService;
41  import fr.paris.lutece.portal.service.rbac.RBACService;
42  import fr.paris.lutece.portal.service.search.SearchResourceIdService;
43  import fr.paris.lutece.portal.service.search.SearchService;
44  import fr.paris.lutece.portal.service.template.AppTemplateService;
45  import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
46  import fr.paris.lutece.portal.web.constants.Messages;
47  import fr.paris.lutece.util.ReferenceItem;
48  import fr.paris.lutece.util.html.HtmlTemplate;
49  
50  import org.apache.commons.lang.StringUtils;
51  
52  import java.util.HashMap;
53  import java.util.Map;
54  
55  import javax.servlet.http.HttpServletRequest;
56  
57  
58  /**
59   * This class provides the user interface to manage app search features ( manage filters )
60   */
61  public class SearchJspBean extends AdminFeaturesPageJspBean
62  {
63      /** Unique name for the right to manage search parameters */
64      public static final String RIGHT_SEARCH_MANAGEMENT = "CORE_SEARCH_MANAGEMENT";
65  
66      /**
67       * Serial version UID
68       */
69      private static final long serialVersionUID = -2095709285081142039L;
70  
71      ////////////////////////////////////////////////////////////////////////////
72      //Constants
73      private static final String EMPTY_STRING = "";
74  
75      // Jsp url
76      private static final String JSP_MANAGE_SEARCH = "ManageSearch.jsp";
77  
78      // Markers
79      private static final String MARK_PERMISSION_MANAGE_ADVANCED_PARAMETERS = "permission_manage_advanced_parameters";
80      private static final String MARK_TAGLIST = "taglist";
81      private static final String MARK_TAG_FILTER = "tag_filter";
82  
83      // Parameters
84      private static final String PARAMETER_CANCEL = "cancel";
85      private static final String PARAMETER_DATE_FILTER = "date_filter";
86      private static final String PARAMETER_DEFAULT_OPERATOR = "default_operator";
87      private static final String PARAMETER_HELP_MESSAGE = "help_message";
88      private static final String PARAMETER_TAGLIST = "taglist";
89      private static final String PARAMETER_TAG_FILTER = "tag_filter";
90      private static final String PARAMETER_TYPE_FILTER = "type_filter";
91  
92      // Properties
93      private static final String PROPERTY_MANAGE_ADVANCED_PARAMETERS_PAGETITLE = "portal.search.manage_advanced_parameters.pageTitle";
94      private static final String PROPERTY_MANAGE_SEARCH_PAGETITLE = "portal.search.manage_search.pageTitle";
95      private static final String PROPERTY_MODIFY_TAGLIST_PAGETITLE = "portal.search.modify_taglist.pageTitle";
96  
97      // Template
98      private static final String TEMPLATE_MANAGE_ADVANCED_PARAMETERS = "admin/search/manage_advanced_parameters.html";
99      private static final String TEMPLATE_MANAGE_SEARCH = "admin/search/manage_search.html";
100     private static final String TEMPLATE_MODIFY_TAGLIST = "admin/search/modify_taglist.html";
101 
102     /**
103      * Builds the search management page
104      * @param request Http request
105      * @return the built page
106      */
107     public String getManageSearch( HttpServletRequest request )
108     {
109         setPageTitleProperty( PROPERTY_MANAGE_SEARCH_PAGETITLE );
110 
111         boolean bPermissionManageAdvancedParameters = RBACService.isAuthorized( SearchService.RESOURCE_TYPE,
112                 RBAC.WILDCARD_RESOURCES_ID, SearchResourceIdService.PERMISSION_MANAGE_ADVANCED_PARAMETERS, getUser(  ) );
113 
114         Map<String, Object> model = new HashMap<String, Object>(  );
115 
116         model.put( MARK_PERMISSION_MANAGE_ADVANCED_PARAMETERS, bPermissionManageAdvancedParameters );
117         model.put( MARK_TAG_FILTER, SearchParameterHome.findByKey( PARAMETER_TAG_FILTER ).getName(  ) );
118 
119         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_SEARCH, getLocale(  ), model );
120 
121         return getAdminPage( template.getHtml(  ) );
122     }
123 
124     /**
125      * Builds the form to modify the tag cloud for the tag filter
126      * @param request Http request
127      * @return the built form
128      */
129     public String getModifyTagList( HttpServletRequest request )
130     {
131         setPageTitleProperty( PROPERTY_MODIFY_TAGLIST_PAGETITLE );
132 
133         Map<String, Object> model = new HashMap<String, Object>(  );
134 
135         model.put( MARK_TAGLIST, SearchParameterHome.findByKey( PARAMETER_TAGLIST ).getName(  ) );
136         model.put( MARK_TAG_FILTER, SearchParameterHome.findByKey( PARAMETER_TAG_FILTER ).getName(  ) );
137 
138         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_TAGLIST, getLocale(  ), model );
139 
140         return getAdminPage( template.getHtml(  ) );
141     }
142 
143     /**
144      * Processes the data capture form of tag list
145      * @param request the HTTP request
146      * @return the jsp URL of the process result
147      */
148     public String doModifyTagList( HttpServletRequest request )
149     {
150         if ( request.getParameter( PARAMETER_CANCEL ) == null )
151         {
152             ReferenceItem param = new ReferenceItem(  );
153             param.setCode( PARAMETER_TAGLIST );
154 
155             String strTagList = request.getParameter( PARAMETER_TAGLIST );
156             param.setName( StringUtils.isNotBlank( strTagList ) ? strTagList : EMPTY_STRING );
157             SearchParameterHome.update( param );
158         }
159 
160         return JSP_MANAGE_SEARCH;
161     }
162 
163     /**
164      * Builds the advanced parameters management page. A form to specify search parameters (mainly filter)
165      * @param request the HTTP request
166      * @return the built page
167      */
168     public String getManageAdvancedParameters( HttpServletRequest request )
169     {
170         if ( !RBACService.isAuthorized( SearchService.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID,
171                     SearchResourceIdService.PERMISSION_MANAGE_ADVANCED_PARAMETERS, getUser(  ) ) )
172         {
173             return getManageSearch( request );
174         }
175 
176         setPageTitleProperty( PROPERTY_MANAGE_ADVANCED_PARAMETERS_PAGETITLE );
177 
178         Map<String, Object> model = SearchService.getManageAdvancedParameters( getUser(  ), request );
179 
180         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ADVANCED_PARAMETERS, getLocale(  ),
181                 model );
182 
183         return getAdminPage( template.getHtml(  ) );
184     }
185 
186     /**
187      * Processes the data capture form of advanced parameters
188      * @param request the HTTP request
189      * @return the jsp URL of the process result
190      * @throws AccessDeniedException if permission to manage advanced parameters
191      * on search has not been granted to the user
192      */
193     public String doModifyAdvancedParameters( HttpServletRequest request )
194         throws AccessDeniedException
195     {
196         if ( !RBACService.isAuthorized( SearchService.RESOURCE_TYPE, RBAC.WILDCARD_RESOURCES_ID,
197                     SearchResourceIdService.PERMISSION_MANAGE_ADVANCED_PARAMETERS, getUser(  ) ) )
198         {
199             throw new AccessDeniedException( "User " + getUser(  ) + " is not authorized to permission " +
200                 SearchResourceIdService.PERMISSION_MANAGE_ADVANCED_PARAMETERS );
201         }
202 
203         if ( request.getParameter( PARAMETER_CANCEL ) == null )
204         {
205             String strTypeFilter = request.getParameter( PARAMETER_TYPE_FILTER );
206             String strDefaultOperator = request.getParameter( PARAMETER_DEFAULT_OPERATOR );
207             String strHelpMessage = request.getParameter( PARAMETER_HELP_MESSAGE );
208             String strDateFilter = request.getParameter( PARAMETER_DATE_FILTER );
209             String strTagFilter = request.getParameter( PARAMETER_TAG_FILTER );
210 
211             //mandatory field
212             if ( StringUtils.isBlank( strTypeFilter ) || StringUtils.isBlank( strDefaultOperator ) ||
213                     StringUtils.isBlank( strDateFilter ) || StringUtils.isBlank( strTagFilter ) )
214             {
215                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
216             }
217 
218             ReferenceItem param = new ReferenceItem(  );
219             param.setCode( PARAMETER_TYPE_FILTER );
220             param.setName( strTypeFilter );
221             SearchParameterHome.update( param );
222 
223             param = new ReferenceItem(  );
224             param.setCode( PARAMETER_DEFAULT_OPERATOR );
225             param.setName( strDefaultOperator );
226             SearchParameterHome.update( param );
227 
228             param = new ReferenceItem(  );
229             param.setCode( PARAMETER_HELP_MESSAGE );
230             param.setName( StringUtils.isNotBlank( strHelpMessage ) ? strHelpMessage : EMPTY_STRING );
231             SearchParameterHome.update( param );
232 
233             param = new ReferenceItem(  );
234             param.setCode( PARAMETER_DATE_FILTER );
235             param.setName( strDateFilter );
236             SearchParameterHome.update( param );
237 
238             param = new ReferenceItem(  );
239             param.setCode( PARAMETER_TAG_FILTER );
240             param.setName( strTagFilter );
241             SearchParameterHome.update( param );
242         }
243 
244         return JSP_MANAGE_SEARCH;
245     }
246 }