1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
80
81
82 public class ContextJspBean extends PluginAdminPageJspBean
83 {
84
85 public static final String RIGHT_MANAGE_CONTEXT = "CONTEXT_INCLUDE_MANAGEMENT";
86
87
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
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
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
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
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
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
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
134
135
136
137
138
139
140
141
142 public IPluginActionResult getManageContexts( HttpServletRequest request, HttpServletResponse response )
143 throws AccessDeniedException
144 {
145 setPageTitleProperty( PROPERTY_MANAGE_CONTEXTS_PAGE_TITLE );
146
147
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
173
174
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
191
192
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
218
219
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
239
240
241
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
255
256
257
258
259
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
273 populate( context, request );
274
275
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
284 this.setContextData( context, request );
285
286 try
287 {
288 _contextService.create( context );
289 }
290 catch ( Exception ex )
291 {
292
293 AppLogService.error( ex.getMessage( ) + " when creating a context ", ex );
294
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
315
316
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
336 populate( context, request );
337
338
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
347 this.setContextData( context, request );
348
349 try
350 {
351 _contextService.update( context );
352 }
353 catch ( Exception ex )
354 {
355
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
383
384
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
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
414
415
416
417 public String doReorderContexts( HttpServletRequest request )
418 {
419 _contextService.doReorderContexts( );
420
421 return JSP_MANAGE_CONTEXTS;
422 }
423
424
425
426
427
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
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
481
482
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
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
536
537
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
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
580
581
582
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
594
595
596
597
598
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
614
615
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 }