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.workflow.web;
35
36 import java.util.HashMap;
37 import java.util.List;
38 import java.util.Map;
39
40 import javax.servlet.http.HttpServletRequest;
41
42 import org.apache.commons.collections.CollectionUtils;
43 import org.apache.commons.fileupload.FileItem;
44
45 import fr.paris.lutece.plugins.workflow.utils.WorkflowUtils;
46 import fr.paris.lutece.plugins.workflowcore.business.action.Action;
47 import fr.paris.lutece.plugins.workflowcore.business.action.ActionFilter;
48 import fr.paris.lutece.plugins.workflowcore.business.icon.Icon;
49 import fr.paris.lutece.plugins.workflowcore.service.action.ActionService;
50 import fr.paris.lutece.plugins.workflowcore.service.action.IActionService;
51 import fr.paris.lutece.plugins.workflowcore.service.icon.IIconService;
52 import fr.paris.lutece.plugins.workflowcore.service.icon.IconService;
53 import fr.paris.lutece.portal.service.admin.AccessDeniedException;
54 import fr.paris.lutece.portal.service.i18n.I18nService;
55 import fr.paris.lutece.portal.service.message.AdminMessage;
56 import fr.paris.lutece.portal.service.message.AdminMessageService;
57 import fr.paris.lutece.portal.service.spring.SpringContextService;
58 import fr.paris.lutece.portal.service.template.AppTemplateService;
59 import fr.paris.lutece.portal.service.util.AppPathService;
60 import fr.paris.lutece.portal.service.util.AppPropertiesService;
61 import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
62 import fr.paris.lutece.portal.web.upload.MultipartHttpServletRequest;
63 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
64 import fr.paris.lutece.util.html.AbstractPaginator;
65 import fr.paris.lutece.util.html.HtmlTemplate;
66 import fr.paris.lutece.util.url.UrlItem;
67
68
69
70
71 public class IconJspBean extends PluginAdminPageJspBean
72 {
73
74
75
76 private static final long serialVersionUID = 1953322601057873584L;
77
78
79 private static final String TEMPLATE_MANAGE_ICON = "admin/plugins/workflow/manage_icon.html";
80 private static final String TEMPLATE_CREATE_ICON = "admin/plugins/workflow/create_icon.html";
81 private static final String TEMPLATE_MODIFY_ICON = "admin/plugins/workflow/modify_icon.html";
82
83
84 private static final String MARK_ICON_LIST = "icon_list";
85 private static final String MARK_MODIFY_ICON = "modify_icon";
86 private static final String MARK_PAGINATOR = "paginator";
87 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
88
89
90 private static final String PARAMETER_ID_ICON = "id_icon";
91 private static final String PARAMETER_NAME = "name";
92 private static final String PARAMETER_ID_FILE = "id_file";
93 private static final String PARAMETER_PAGE_INDEX = "page_index";
94 private static final String PARAMETER_WIDTH = "width";
95 private static final String PARAMETER_HEIGHT = "height";
96 private static final String PARAMETER_CANCEL = "cancel";
97
98
99 private static final String EMPTY_STRING = "";
100
101
102 private static final String MESSAGE_CONFIRM_REMOVE_ICON = "workflow.message.confirm_remove_icon";
103 private static final String MESSAGE_MANDATORY_FIELD = "workflow.message.mandatory.field";
104 private static final String MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE = "workflow.message.can_not_remove_icon_actions_are_associate";
105 private static final String MESSAGE_NUMERIC_FIELD = "workflow.message.numeric_field";
106
107
108 private static final String PROPERTY_ITEM_PER_PAGE = "workflow.itemsPerPage";
109 private static final String PROPERTY_MANAGE_ICON = "workflow.manage_icon.page_title";
110 private static final String PROPERTY_MODIFY_ICON = "workflow.modify_icon.page_title";
111 private static final String PROPERTY_CREATE_ICON = "workflow.create_icon.page_title";
112 private static final String FIELD_NAME = "workflow.create_icon.label_name";
113 private static final String FIELD_WIDTH = "workflow.create_icon.label_width";
114 private static final String FIELD_HEIGHT = "workflow.create_icon.label_height";
115 private static final String FIELD_FILE = "workflow.create_icon.label_file";
116
117
118 private static final String JSP_MANAGE_ICON = "jsp/admin/plugins/workflow/ManageIcon.jsp";
119 private static final String JSP_DO_REMOVE_ICON = "jsp/admin/plugins/workflow/DoRemoveIcon.jsp";
120
121
122 private int _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_ITEM_PER_PAGE, 15 );
123 private String _strCurrentPageIndex;
124 private int _nItemsPerPage;
125 private IIconService _iconService = SpringContextService.getBean( IconService.BEAN_SERVICE );
126 private IActionService _actionService = SpringContextService.getBean( ActionService.BEAN_SERVICE );
127
128
129
130
131
132
133
134
135 public String getManageIcon( HttpServletRequest request )
136 {
137 Map<String, Object> model = new HashMap<>( );
138 List<Icon> listDirectoryXsl = _iconService.getListIcons( );
139 _strCurrentPageIndex = AbstractPaginator.getPageIndex( request, AbstractPaginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
140 _nItemsPerPage = AbstractPaginator.getItemsPerPage( request, AbstractPaginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage, _nDefaultItemsPerPage );
141
142 LocalizedPaginator<Icon> paginator = new LocalizedPaginator<>( listDirectoryXsl, _nItemsPerPage, getJspManageIcon( request ), PARAMETER_PAGE_INDEX,
143 _strCurrentPageIndex, getLocale( ) );
144
145 model.put( MARK_PAGINATOR, paginator );
146 model.put( MARK_NB_ITEMS_PER_PAGE, EMPTY_STRING + _nItemsPerPage );
147 model.put( MARK_ICON_LIST, paginator.getPageItems( ) );
148 setPageTitleProperty( PROPERTY_MANAGE_ICON );
149
150 HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ICON, getLocale( ), model );
151
152 return getAdminPage( templateList.getHtml( ) );
153 }
154
155
156
157
158
159
160
161
162 public String getCreateIcon( HttpServletRequest request )
163 {
164 setPageTitleProperty( PROPERTY_CREATE_ICON );
165
166 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_ICON, getLocale( ) );
167
168 return getAdminPage( template.getHtml( ) );
169 }
170
171
172
173
174
175
176
177
178 public String doCreateIcon( HttpServletRequest request )
179 {
180 if ( request.getParameter( PARAMETER_CANCEL ) == null )
181 {
182 Icon icon = new Icon( );
183 String strError = getIconData( request, icon );
184
185 if ( strError != null )
186 {
187 return strError;
188 }
189
190 _iconService.create( icon );
191 }
192
193 return getJspManageIcon( request );
194 }
195
196
197
198
199
200
201
202
203
204
205 public String getModifyIcon( HttpServletRequest request ) throws AccessDeniedException
206 {
207 String strIdIcon = request.getParameter( PARAMETER_ID_ICON );
208 int nIdIcon = WorkflowUtils.convertStringToInt( strIdIcon );
209 Icon icon = _iconService.findByPrimaryKey( nIdIcon );
210
211 if ( icon == null )
212 {
213 throw new AccessDeniedException( "The icon is not found for ID " + nIdIcon );
214 }
215
216 Map<String, Object> model = new HashMap<>( );
217
218 model.put( MARK_MODIFY_ICON, icon );
219 setPageTitleProperty( PROPERTY_MODIFY_ICON );
220
221 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_ICON, getLocale( ), model );
222
223 return getAdminPage( template.getHtml( ) );
224 }
225
226
227
228
229
230
231
232
233
234
235 public String doModifyIcon( HttpServletRequest request ) throws AccessDeniedException
236 {
237 if ( request.getParameter( PARAMETER_CANCEL ) == null )
238 {
239 String strIdIcon = request.getParameter( PARAMETER_ID_ICON );
240 int nIdIcon = WorkflowUtils.convertStringToInt( strIdIcon );
241 Icon icon = _iconService.findByPrimaryKey( nIdIcon );
242
243 if ( icon == null )
244 {
245 throw new AccessDeniedException( "The icon is not found for ID " + nIdIcon );
246 }
247
248 String strError = getIconData( request, icon );
249
250 if ( strError != null )
251 {
252 return strError;
253 }
254
255 if ( icon.getValue( ) != null )
256 {
257 _iconService.update( icon );
258 }
259 else
260 {
261 _iconService.updateMetadata( icon );
262 }
263 }
264
265 return getJspManageIcon( request );
266 }
267
268
269
270
271
272
273
274
275
276
277 public String getConfirmRemoveIcon( HttpServletRequest request ) throws AccessDeniedException
278 {
279 String strIdIcon = request.getParameter( PARAMETER_ID_ICON );
280 int nIdIcon = WorkflowUtils.convertStringToInt( strIdIcon );
281 ActionFilter filter = new ActionFilter( );
282 filter.setAutomaticReflexiveAction( false );
283 filter.setIdIcon( nIdIcon );
284
285 List<Action> listAction = _actionService.getListActionByFilter( filter );
286
287 if ( CollectionUtils.isNotEmpty( listAction ) )
288 {
289 return AdminMessageService.getMessageUrl( request, MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE, AdminMessage.TYPE_STOP );
290 }
291
292 UrlItem url = new UrlItem( JSP_DO_REMOVE_ICON );
293 url.addParameter( PARAMETER_ID_ICON, strIdIcon );
294
295 return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_ICON, url.getUrl( ), AdminMessage.TYPE_CONFIRMATION );
296 }
297
298
299
300
301
302
303
304
305
306
307 public String doRemoveIcon( HttpServletRequest request ) throws AccessDeniedException
308 {
309 String strIdIcon = request.getParameter( PARAMETER_ID_ICON );
310 int nIdIcon = WorkflowUtils.convertStringToInt( strIdIcon );
311 ActionFilter filter = new ActionFilter( );
312 filter.setAutomaticReflexiveAction( false );
313 filter.setIdIcon( nIdIcon );
314
315 List<Action> listAction = _actionService.getListActionByFilter( filter );
316
317 if ( !listAction.isEmpty( ) )
318 {
319 return AdminMessageService.getMessageUrl( request, MESSAGE_CAN_NOT_REMOVE_ICON_ACTIONS_ARE_ASSOCIATE, AdminMessage.TYPE_STOP );
320 }
321
322 _iconService.remove( nIdIcon );
323
324 return getJspManageIcon( request );
325 }
326
327
328
329
330
331
332
333
334
335
336
337 private String getIconData( HttpServletRequest request, Icon icon )
338 {
339 String strError = WorkflowUtils.EMPTY_STRING;
340 String strName = request.getParameter( PARAMETER_NAME );
341 String strWidth = request.getParameter( PARAMETER_WIDTH );
342 String strHeight = request.getParameter( PARAMETER_HEIGHT );
343
344 int nWidth = WorkflowUtils.convertStringToInt( strWidth );
345 int nHeight = WorkflowUtils.convertStringToInt( strHeight );
346
347 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
348 FileItem fileItem = multipartRequest.getFile( PARAMETER_ID_FILE );
349
350 if ( ( strName == null ) || strName.trim( ).equals( EMPTY_STRING ) )
351 {
352 strError = FIELD_NAME;
353 }
354 else
355 if ( ( icon.getValue( ) == null )
356 && ( ( fileItem == null ) || ( ( fileItem.getName( ) == null ) && WorkflowUtils.EMPTY_STRING.equals( fileItem.getName( ) ) ) ) )
357 {
358 strError = FIELD_FILE;
359 }
360
361
362 if ( !strError.equals( EMPTY_STRING ) )
363 {
364 Object [ ] tabRequiredFields = {
365 I18nService.getLocalizedString( strError, getLocale( ) )
366 };
367
368 return AdminMessageService.getMessageUrl( request, MESSAGE_MANDATORY_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
369 }
370
371 if ( ( strWidth != null ) && ( !strWidth.trim( ).equals( WorkflowUtils.EMPTY_STRING ) ) && ( nWidth == -1 ) )
372 {
373 strError = FIELD_WIDTH;
374 }
375 else
376 if ( ( strHeight != null ) && ( !strHeight.trim( ).equals( WorkflowUtils.EMPTY_STRING ) ) && ( nHeight == -1 ) )
377 {
378 strError = FIELD_HEIGHT;
379 }
380
381 if ( !strError.equals( WorkflowUtils.EMPTY_STRING ) )
382 {
383 Object [ ] tabRequiredFields = {
384 I18nService.getLocalizedString( strError, getLocale( ) )
385 };
386
387 return AdminMessageService.getMessageUrl( request, MESSAGE_NUMERIC_FIELD, tabRequiredFields, AdminMessage.TYPE_STOP );
388 }
389
390 icon.setName( strName );
391
392 if ( ( fileItem != null ) && ( fileItem.getName( ) != null ) && !WorkflowUtils.EMPTY_STRING.equals( fileItem.getName( ) ) )
393 {
394 icon.setValue( fileItem.get( ) );
395 icon.setMimeType( fileItem.getContentType( ) );
396 }
397 else
398 {
399 icon.setValue( null );
400 }
401
402 icon.setWidth( nWidth );
403 icon.setHeight( nHeight );
404
405 return null;
406 }
407
408
409
410
411
412
413
414
415 private String getJspManageIcon( HttpServletRequest request )
416 {
417 return AppPathService.getBaseUrl( request ) + JSP_MANAGE_ICON;
418 }
419 }