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.plugins.contextinclude.web;
35  
36  import fr.paris.lutece.plugins.contextinclude.business.Context;
37  import fr.paris.lutece.plugins.contextinclude.business.parameter.IContextParameter;
38  import fr.paris.lutece.plugins.contextinclude.service.ContextService;
39  import fr.paris.lutece.plugins.contextinclude.service.IContextService;
40  import fr.paris.lutece.plugins.contextinclude.service.parameter.ContextParameterService;
41  import fr.paris.lutece.plugins.contextinclude.service.parameter.IContextParameterService;
42  import fr.paris.lutece.plugins.contextinclude.web.action.ContextSearchFields;
43  import fr.paris.lutece.plugins.contextinclude.web.action.IContextPluginAction;
44  import fr.paris.lutece.plugins.contextinclude.web.action.IContextSearchFields;
45  import fr.paris.lutece.portal.service.admin.AccessDeniedException;
46  import fr.paris.lutece.portal.service.i18n.I18nService;
47  import fr.paris.lutece.portal.service.message.AdminMessage;
48  import fr.paris.lutece.portal.service.message.AdminMessageService;
49  import fr.paris.lutece.portal.service.spring.SpringContextService;
50  import fr.paris.lutece.portal.service.template.AppTemplateService;
51  import fr.paris.lutece.portal.service.util.AppLogService;
52  import fr.paris.lutece.portal.service.util.AppPathService;
53  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
54  import fr.paris.lutece.portal.web.constants.Messages;
55  import fr.paris.lutece.portal.web.pluginaction.DefaultPluginActionResult;
56  import fr.paris.lutece.portal.web.pluginaction.IPluginActionResult;
57  import fr.paris.lutece.portal.web.pluginaction.PluginActionManager;
58  import fr.paris.lutece.util.beanvalidation.BeanValidationUtil;
59  import fr.paris.lutece.util.html.HtmlTemplate;
60  import fr.paris.lutece.util.url.UrlItem;
61  
62  import org.apache.commons.lang.StringUtils;
63  
64  import java.util.ArrayList;
65  import java.util.HashMap;
66  import java.util.Iterator;
67  import java.util.List;
68  import java.util.Map;
69  import java.util.Set;
70  
71  import javax.servlet.http.HttpServletRequest;
72  import javax.servlet.http.HttpServletResponse;
73  
74  import javax.validation.ConstraintViolation;
75  
76  
77  /**
78   *
79   * ContextJspBean
80   *
81   */
82  public class ContextJspBean extends PluginAdminPageJspBean
83  {
84      /** The Constant RIGHT_MANAGE_CONTEXT. */
85      public static final String RIGHT_MANAGE_CONTEXT = "CONTEXT_INCLUDE_MANAGEMENT";
86  
87      // PROPERTIES
88      private static final String PROPERTY_MANAGE_CONTEXTS_PAGE_TITLE = "contextinclude.manage_contexts.pageTitle";
89      private static final String PROPERTY_CREATE_CONTEXT_PAGE_TITLE = "contextinclude.create_context.pageTitle";
90      private static final String PROPERTY_MODIFY_CONTEXT_PAGE_TITLE = "contextinclude.modify_context.pageTitle";
91      private static final String PROPERTY_ERROR_PAGE_TITLE = "contextinclude.error.pageTitle";
92  
93      // MESSAGES
94      private static final String MESSAGE_ERROR_GENERIC_MESSAGE = "contextinclude.message.error.genericMessage";
95      private static final String MESSAGE_CONFIRM_REMOVE_CONTEXT = "contextinclude.message.confirm.removeContext";
96  
97      // PARAMETERS
98      private static final String PARAMETER_ID_CONTEXT = "idContext";
99      private static final String PARAMETER_CANCEL = "cancel";
100     private static final String PARAMETER_APPLY = "apply";
101     private static final String PARAMETER_PARAM_KEY = "paramKey";
102     private static final String PARAMETER_PARAM_VALUE = "paramValue";
103 
104     // MARKS
105     private static final String MARK_LIST_CONTEXTS = "listContexts";
106     private static final String MARK_CONTEXT = "context";
107     private static final String MARK_ERROR = "error";
108     private static final String MARK_CONTEXT_ACTIONS = "contextActions";
109     private static final String MARK_LOCALE = "locale";
110     private static final String MARK_WEBAPP_URL = "webapp_url";
111     private static final String MARK_IS_WELL_ORDERED = "isWellOrdered";
112     private static final String MARK_CONTEXT_PARAMETER = "contextParameter";
113 
114     // TEMPLATES
115     private static final String TEMPLATE_MANAGE_CONTEXTS = "admin/plugins/contextinclude/manage_contexts.html";
116     private static final String TEMPLATE_CREATE_CONTEXT = "admin/plugins/contextinclude/create_context.html";
117     private static final String TEMPLATE_MODIFY_CONTEXT = "admin/plugins/contextinclude/modify_context.html";
118     private static final String TEMPLATE_ERROR = "admin/plugins/contextinclude/error.html";
119     private static final String TEMPLATE_MANAGE_ADVANCED_PARAMETERS = "admin/plugins/contextinclude/manage_advanced_parameters.html";
120 
121     // JSP
122     private static final String JSP_MANAGE_CONTEXTS = "ManageContexts.jsp";
123     private static final String JSP_MODIFY_CONTEXT = "ModifyContext.jsp";
124     private static final String JSP_MANAGE_ADVANCED_PARAMETERS = "ManageAdvancedParameters.jsp";
125     private static final String JSP_URL_DO_REMOVE_CONTEXT = "jsp/admin/plugins/contextinclude/DoRemoveContext.jsp";
126 
127     // CONSTANTS
128     private static final String ANCHOR_CONTEXT = "context-";
129     private final IContextService _contextService = SpringContextService.getBean( ContextService.BEAN_SERVICE );
130     private final IContextSearchFields _searchFields = new ContextSearchFields(  );
131     private final IContextParameterService _contextParameterService = SpringContextService.getBean( ContextParameterService.BEAN_SERVICE );
132 
133     // GET
134 
135     /**
136      * Get manage contexts
137      * @param request the HTTP request
138      * @param response the response
139      * @return the HTML code
140      * @throws AccessDeniedException access denied if not authorized
141      */
142     public IPluginActionResult getManageContexts( HttpServletRequest request, HttpServletResponse response )
143         throws AccessDeniedException
144     {
145         setPageTitleProperty( PROPERTY_MANAGE_CONTEXTS_PAGE_TITLE );
146 
147         // first - see if there is an invoked action
148         IContextPluginAction action = PluginActionManager.getPluginAction( request, IContextPluginAction.class );
149 
150         if ( action != null )
151         {
152             AppLogService.debug( "Processing contextinclude action " + action.getName(  ) );
153 
154             return action.process( request, response, getUser(  ), _searchFields );
155         }
156 
157         Map<String, Object> model = new HashMap<String, Object>(  );
158         model.put( MARK_LIST_CONTEXTS, _contextService.findAll(  ) );
159         model.put( MARK_IS_WELL_ORDERED, _contextService.isWellOrdered(  ) );
160         model.put( MARK_CONTEXT_PARAMETER, _contextParameterService.find(  ) );
161         PluginActionManager.fillModel( request, getUser(  ), model, IContextPluginAction.class, MARK_CONTEXT_ACTIONS );
162 
163         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_CONTEXTS, getLocale(  ), model );
164 
165         IPluginActionResult result = new DefaultPluginActionResult(  );
166         result.setHtmlContent( getAdminPage( template.getHtml(  ) ) );
167 
168         return result;
169     }
170 
171     /**
172      * Get create context
173      * @param request the HTTP request
174      * @return the HTML code
175      */
176     public String getCreateContext( HttpServletRequest request )
177     {
178         setPageTitleProperty( PROPERTY_CREATE_CONTEXT_PAGE_TITLE );
179 
180         Map<String, Object> model = new HashMap<String, Object>(  );
181         model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
182         model.put( MARK_LOCALE, this.getLocale(  ) );
183 
184         HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_CREATE_CONTEXT, getLocale(  ), model );
185 
186         return getAdminPage( templateList.getHtml(  ) );
187     }
188 
189     /**
190      * Get modify context
191      * @param request the HTTP request
192      * @return the HTML code
193      */
194     public String getModifyContext( HttpServletRequest request )
195     {
196         setPageTitleProperty( PROPERTY_MODIFY_CONTEXT_PAGE_TITLE );
197 
198         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
199 
200         if ( StringUtils.isNotBlank( strIdContext ) && StringUtils.isNumeric( strIdContext ) )
201         {
202             int nIdContext = Integer.parseInt( strIdContext );
203             Map<String, Object> model = new HashMap<String, Object>(  );
204             model.put( MARK_CONTEXT, _contextService.findByPrimaryKey( nIdContext ) );
205             model.put( MARK_WEBAPP_URL, AppPathService.getBaseUrl( request ) );
206             model.put( MARK_LOCALE, this.getLocale(  ) );
207 
208             HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MODIFY_CONTEXT, getLocale(  ), model );
209 
210             return getAdminPage( templateList.getHtml(  ) );
211         }
212 
213         return getErrorPage( I18nService.getLocalizedString( Messages.MANDATORY_FIELDS, this.getLocale(  ) ) );
214     }
215 
216     /**
217      * Get confirm remove context
218      * @param request the HTTP request
219      * @return the HTML code
220      */
221     public String getConfirmRemoveContext( HttpServletRequest request )
222     {
223         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
224 
225         if ( StringUtils.isBlank( strIdContext ) || !StringUtils.isNumeric( strIdContext ) )
226         {
227             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
228         }
229 
230         UrlItem url = new UrlItem( JSP_URL_DO_REMOVE_CONTEXT );
231         url.addParameter( PARAMETER_ID_CONTEXT, strIdContext );
232 
233         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_CONTEXT, url.getUrl(  ),
234             AdminMessage.TYPE_CONFIRMATION );
235     }
236 
237     /**
238      * Gets the manage advanced parameters.
239      *
240      * @param request the request
241      * @return the manage advanced parameters
242      */
243     public String getManageAdvancedParameters( HttpServletRequest request )
244     {
245         Map<String, Object> model = new HashMap<String, Object>(  );
246         model.put( MARK_CONTEXT_PARAMETER, _contextParameterService.find(  ) );
247 
248         HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ADVANCED_PARAMETERS, getLocale(  ),
249                 model );
250 
251         return getAdminPage( template.getHtml(  ) );
252     }
253 
254     // DO
255 
256     /**
257      * Do create a context
258      * @param request the HTTP request
259      * @return the JSP return
260      */
261     public String doCreateContext( HttpServletRequest request )
262     {
263         String strCancel = request.getParameter( PARAMETER_CANCEL );
264 
265         if ( StringUtils.isNotBlank( strCancel ) )
266         {
267             return JSP_MANAGE_CONTEXTS;
268         }
269 
270         Context context = new Context(  );
271 
272         // Populate the bean
273         populate( context, request );
274 
275         // Check mandatory fields
276         Set<ConstraintViolation<Context>> constraintViolations = BeanValidationUtil.validate( context );
277 
278         if ( constraintViolations.size(  ) > 0 )
279         {
280             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
281         }
282 
283         // Populate the context parameters
284         this.setContextData( context, request );
285 
286         try
287         {
288             _contextService.create( context );
289         }
290         catch ( Exception ex )
291         {
292             // Something wrong happened... a database check might be needed
293             AppLogService.error( ex.getMessage(  ) + " when creating a context ", ex );
294             // Revert
295             _contextService.remove( context.getIdContext(  ) );
296 
297             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE, AdminMessage.TYPE_ERROR );
298         }
299 
300         String strApply = request.getParameter( PARAMETER_APPLY );
301 
302         if ( StringUtils.isNotBlank( strApply ) )
303         {
304             UrlItem url = new UrlItem( JSP_MODIFY_CONTEXT );
305             url.addParameter( PARAMETER_ID_CONTEXT, context.getIdContext(  ) );
306 
307             return url.getUrl(  );
308         }
309 
310         return JSP_MANAGE_CONTEXTS;
311     }
312 
313     /**
314      * Do update a context
315      * @param request the HTTP request
316      * @return the JSP return
317      */
318     public String doModifyContext( HttpServletRequest request )
319     {
320         String strCancel = request.getParameter( PARAMETER_CANCEL );
321 
322         if ( StringUtils.isNotBlank( strCancel ) )
323         {
324             return JSP_MANAGE_CONTEXTS;
325         }
326 
327         String strJspReturn = JSP_MANAGE_CONTEXTS;
328         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
329 
330         if ( StringUtils.isNotBlank( strIdContext ) && StringUtils.isNumeric( strIdContext ) )
331         {
332             int nIdContext = Integer.parseInt( strIdContext );
333             Context context = _contextService.findByPrimaryKey( nIdContext );
334 
335             // Populate the bean
336             populate( context, request );
337 
338             // Check mandatory fields
339             Set<ConstraintViolation<Context>> constraintViolations = BeanValidationUtil.validate( context );
340 
341             if ( constraintViolations.size(  ) > 0 )
342             {
343                 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
344             }
345 
346             // Populate the context parameters
347             this.setContextData( context, request );
348 
349             try
350             {
351                 _contextService.update( context );
352             }
353             catch ( Exception ex )
354             {
355                 // Something wrong happened... a database check might be needed
356                 AppLogService.error( ex.getMessage(  ) + " when updating a context ", ex );
357 
358                 strJspReturn = AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE,
359                         AdminMessage.TYPE_ERROR );
360             }
361 
362             String strApply = request.getParameter( PARAMETER_APPLY );
363 
364             if ( StringUtils.isNotBlank( strApply ) )
365             {
366                 UrlItem url = new UrlItem( JSP_MODIFY_CONTEXT );
367                 url.addParameter( PARAMETER_ID_CONTEXT, context.getIdContext(  ) );
368 
369                 strJspReturn = url.getUrl(  );
370             }
371         }
372         else
373         {
374             strJspReturn = AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS,
375                     AdminMessage.TYPE_ERROR );
376         }
377 
378         return strJspReturn;
379     }
380 
381     /**
382      * Do remove a context
383      * @param request the HTTP request
384      * @return the JSP return
385      */
386     public String doRemoveContext( HttpServletRequest request )
387     {
388         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
389 
390         if ( StringUtils.isBlank( strIdContext ) || !StringUtils.isNumeric( strIdContext ) )
391         {
392             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
393         }
394 
395         int nIdContext = Integer.parseInt( strIdContext );
396 
397         try
398         {
399             _contextService.remove( nIdContext );
400         }
401         catch ( Exception ex )
402         {
403             // Something wrong happened... a database check might be needed
404             AppLogService.error( ex.getMessage(  ) + " when deleting a context ", ex );
405 
406             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE, AdminMessage.TYPE_ERROR );
407         }
408 
409         return JSP_MANAGE_CONTEXTS;
410     }
411 
412     /**
413      * Do reorder the contexts
414      * @param request {@link HttpServletRequest}
415      * @return the jsp URL to display the form to manage contexts
416      */
417     public String doReorderContexts( HttpServletRequest request )
418     {
419         _contextService.doReorderContexts(  );
420 
421         return JSP_MANAGE_CONTEXTS;
422     }
423 
424     /**
425      * Move up the priority of the attribute field
426      * @param request HttpServletRequest
427      * @return The Jsp URL of the process result
428      */
429     public String doMoveUpContext( HttpServletRequest request )
430     {
431         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
432 
433         if ( StringUtils.isNotBlank( strIdContext ) && StringUtils.isNumeric( strIdContext ) )
434         {
435             int nIdContext = Integer.parseInt( strIdContext );
436 
437             List<Context> listContexts = _contextService.findAll(  );
438             Context previousContext = null;
439             Context currentContext = null;
440 
441             Iterator<Context> it = listContexts.iterator(  );
442             previousContext = it.next(  );
443             currentContext = it.next(  );
444 
445             while ( it.hasNext(  ) && ( currentContext.getIdContext(  ) != nIdContext ) )
446             {
447                 previousContext = currentContext;
448                 currentContext = it.next(  );
449             }
450 
451             int previousAttributePriority = previousContext.getPriority(  );
452             int currentAttributePriority = currentContext.getPriority(  );
453             previousContext.setPriority( currentAttributePriority );
454             currentContext.setPriority( previousAttributePriority );
455 
456             try
457             {
458                 _contextService.update( previousContext );
459                 _contextService.update( currentContext );
460             }
461             catch ( Exception ex )
462             {
463                 // Something wrong happened... a database check might be needed
464                 AppLogService.error( ex.getMessage(  ) + " when moving up a context ", ex );
465 
466                 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE,
467                     AdminMessage.TYPE_ERROR );
468             }
469 
470             UrlItem url = new UrlItem( JSP_MANAGE_CONTEXTS );
471             url.setAnchor( ANCHOR_CONTEXT + strIdContext );
472 
473             return url.getUrl(  );
474         }
475 
476         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
477     }
478 
479     /**
480      * Move down the priority of the attribute field
481      * @param request HttpServletRequest
482      * @return The Jsp URL of the process result
483      */
484     public String doMoveDownContext( HttpServletRequest request )
485     {
486         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
487 
488         if ( StringUtils.isNotBlank( strIdContext ) && StringUtils.isNumeric( strIdContext ) )
489         {
490             int nIdContext = Integer.parseInt( strIdContext );
491 
492             List<Context> listContexts = _contextService.findAll(  );
493             Context nextContext = null;
494             Context currentContext = null;
495 
496             Iterator<Context> it = listContexts.iterator(  );
497             currentContext = it.next(  );
498             nextContext = it.next(  );
499 
500             while ( it.hasNext(  ) && ( currentContext.getIdContext(  ) != nIdContext ) )
501             {
502                 currentContext = nextContext;
503                 nextContext = it.next(  );
504             }
505 
506             int nextAttributePriority = nextContext.getPriority(  );
507             int currentAttributePriority = currentContext.getPriority(  );
508             nextContext.setPriority( currentAttributePriority );
509             currentContext.setPriority( nextAttributePriority );
510 
511             try
512             {
513                 _contextService.update( nextContext );
514                 _contextService.update( currentContext );
515             }
516             catch ( Exception ex )
517             {
518                 // Something wrong happened... a database check might be needed
519                 AppLogService.error( ex.getMessage(  ) + " when moving down a context ", ex );
520 
521                 return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE,
522                     AdminMessage.TYPE_ERROR );
523             }
524 
525             UrlItem url = new UrlItem( JSP_MANAGE_CONTEXTS );
526             url.setAnchor( ANCHOR_CONTEXT + strIdContext );
527 
528             return url.getUrl(  );
529         }
530 
531         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
532     }
533 
534     /**
535      * Do activate/deactive a context
536      * @param request the HTTP request
537      * @return the jsp URL
538      */
539     public String doActivateDeactivateContext( HttpServletRequest request )
540     {
541         String strIdContext = request.getParameter( PARAMETER_ID_CONTEXT );
542 
543         if ( StringUtils.isNotBlank( strIdContext ) && StringUtils.isNumeric( strIdContext ) )
544         {
545             int nIdContext = Integer.parseInt( strIdContext );
546 
547             Context context = _contextService.findByPrimaryKey( nIdContext );
548 
549             if ( context != null )
550             {
551                 context.setActive( !context.isActive(  ) );
552 
553                 try
554                 {
555                     _contextService.update( context );
556                 }
557                 catch ( Exception ex )
558                 {
559                     // Something wrong happened... a database check might be needed
560                     AppLogService.error( ex.getMessage(  ) + " when activating/deactivating a context ", ex );
561 
562                     return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE,
563                         AdminMessage.TYPE_ERROR );
564                 }
565 
566                 UrlItem url = new UrlItem( JSP_MANAGE_CONTEXTS );
567                 url.setAnchor( ANCHOR_CONTEXT + strIdContext );
568 
569                 return url.getUrl(  );
570             }
571 
572             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_GENERIC_MESSAGE, AdminMessage.TYPE_STOP );
573         }
574 
575         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
576     }
577 
578     /**
579      * Do modify context parameters.
580      *
581      * @param request the request
582      * @return the string
583      */
584     public String doModifyContextParameters( HttpServletRequest request )
585     {
586         IContextParameter contextParameter = _contextParameterService.find(  );
587         populate( contextParameter, request );
588         _contextParameterService.update(  );
589 
590         return JSP_MANAGE_ADVANCED_PARAMETERS;
591     }
592 
593     // PRIVATE METHODS
594 
595     /**
596      * Get error page
597      * @param strErrorMessage the error message
598      * @return the HTML code
599      */
600     private String getErrorPage( String strErrorMessage )
601     {
602         setPageTitleProperty( PROPERTY_ERROR_PAGE_TITLE );
603 
604         Map<String, Object> model = new HashMap<String, Object>(  );
605         model.put( MARK_ERROR, strErrorMessage );
606 
607         HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_ERROR, getLocale(  ), model );
608 
609         return getAdminPage( templateList.getHtml(  ) );
610     }
611 
612     /**
613      * Set context data
614      * @param context the context
615      * @param request the HTTP request
616      */
617     private void setContextData( Context context, HttpServletRequest request )
618     {
619         Map<String, List<String>> map = new HashMap<String, List<String>>(  );
620 
621         if ( context.getNbParams(  ) > 0 )
622         {
623             for ( int nIndex = 1; nIndex <= context.getNbParams(  ); nIndex++ )
624             {
625                 String strParamKey = request.getParameter( PARAMETER_PARAM_KEY + nIndex );
626                 String strParamValue = request.getParameter( PARAMETER_PARAM_VALUE + nIndex );
627 
628                 if ( StringUtils.isNotBlank( strParamKey ) && StringUtils.isNotBlank( strParamValue ) )
629                 {
630                     List<String> listValues = map.get( strParamKey );
631 
632                     if ( listValues == null )
633                     {
634                         listValues = new ArrayList<String>(  );
635                     }
636 
637                     listValues.add( strParamValue );
638                     map.put( strParamKey, listValues );
639                 }
640             }
641         }
642 
643         context.setMapParameters( map );
644     }
645 }