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.directory.modules.pdfproducerarchive.web;
35  
36  import fr.paris.lutece.plugins.directory.business.Directory;
37  import fr.paris.lutece.plugins.directory.business.Record;
38  import fr.paris.lutece.plugins.directory.modules.pdfproducer.service.ConfigProducerService;
39  import fr.paris.lutece.plugins.directory.modules.pdfproducer.service.DirectoryPDFProducerPlugin;
40  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.business.zipbasket.ZipBasket;
41  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.business.zipbasket.queue.ZipItem;
42  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.service.DirectoryManageZipBasketService;
43  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.service.DirectoryPDFProducerArchiveResourceIdService;
44  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.service.daemon.AddZipToBasketDaemon;
45  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.utils.StatusZipEnum;
46  import fr.paris.lutece.plugins.directory.utils.DirectoryUtils;
47  import fr.paris.lutece.portal.service.admin.AccessDeniedException;
48  import fr.paris.lutece.portal.service.admin.AdminUserService;
49  import fr.paris.lutece.portal.service.daemon.AppDaemonService;
50  import fr.paris.lutece.portal.service.daemon.DaemonEntry;
51  import fr.paris.lutece.portal.service.i18n.I18nService;
52  import fr.paris.lutece.portal.service.message.AdminMessage;
53  import fr.paris.lutece.portal.service.message.AdminMessageService;
54  import fr.paris.lutece.portal.service.rbac.RBACService;
55  import fr.paris.lutece.portal.service.spring.SpringContextService;
56  import fr.paris.lutece.portal.service.template.AppTemplateService;
57  import fr.paris.lutece.portal.service.util.AppPathService;
58  import fr.paris.lutece.portal.web.admin.PluginAdminPageJspBean;
59  import fr.paris.lutece.portal.web.constants.Messages;
60  import fr.paris.lutece.portal.web.constants.Parameters;
61  import fr.paris.lutece.util.html.HtmlTemplate;
62  import fr.paris.lutece.util.sort.AttributeComparator;
63  import fr.paris.lutece.util.string.StringUtil;
64  import fr.paris.lutece.util.url.UrlItem;
65  
66  import java.text.ParseException;
67  import java.text.SimpleDateFormat;
68  import java.util.Collection;
69  import java.util.Collections;
70  import java.util.Date;
71  import java.util.HashMap;
72  import java.util.List;
73  import java.util.Locale;
74  import java.util.Map;
75  
76  import javax.servlet.http.HttpServletRequest;
77  
78  import org.apache.commons.lang.StringUtils;
79  
80  
81  /**
82   * ZipBasketJspBean
83   *
84   */
85  public class ZipBasketJspBean extends PluginAdminPageJspBean
86  {
87      // Templates
88      private static final String TEMPLATE_MANAGE_ZIP_BASKET = "admin/plugins/directory/modules/pdfproducer/archive/basket/manage_zip_basket.html";
89  
90      // Messages (I18n keys)
91      private static final String MESSAGE_CONFIRM_ADD_ZIP_TO_BASKET = "module.directory.pdfproducerarchive.message.confirm_add_zip_to_basket";
92      private static final String MESSAGE_ADD_ZIP_TO_BASKET = "module.directory.pdfproducerarchive.message.add_zip_to_basket";
93      private static final String MESSAGE_CONFIRM_REMOVE_ZIP_TO_BASKET = "module.directory.pdfproducerarchive.message.confirm_remove_zip_to_basket";
94      private static final String MESSAGE_REMOVE_ZIP_TO_BASKET = "module.directory.pdfproducerarchive.message.remove_zip_to_basket";
95      private static final String MESSAGE_ERROR_REMOVE_ZIP_TO_BASKET = "module.directory.pdfproducerarchive.message.error_remove_zip_to_basket";
96      private static final String MESSAGE_CONFIRM_EXPORT_ALL_ZIP = "module.directory.pdfproducerarchive.message.confirm_export_all_zip";
97      private static final String MESSAGE_EXPORT_ALL_ZIP = "module.directory.pdfproducerarchive.message.export_all_zip";
98      private static final String MESSAGE_ERROR_EXPORT_ALL_ZIP = "module.directory.pdfproducerarchive.message.error_export_all_zip";
99      private static final String MESSAGE_EXPORT_ALL_ZIP_ALREADY_EXISTS = "module.directory.pdfproducerarchive.message.error_export_all_zip.already_exists";
100     private static final String MESSAGE_ERROR_REMOVE_ZIP_TO_BASKET_ALLEXPORT = "module.directory.pdfproducerarchive.message.error_remove_zip_to_basket.allexport";
101     private static final String MESSAGE_CONFIRM_REMOVE_ALL_ZIP = "module.directory.pdfproducerarchive.message.confirm_remove_all_zip";
102     private static final String MESSAGE_REMOVE_ALL_ZIP = "module.directory.pdfproducerarchive.message.remove_all_zip";
103     private static final String MESSAGE_ERROR_REMOVE_ALL_ZIP = "module.directory.pdfproducerarchive.message.error_remove_all_zip";
104     private static final String MESSAGE_DAEMON_NEXT_PASS = "module.directory.pdfproducerarchive.message.daemonArchiveNextPass";
105     private static final String MESSAGE_DAEMON_RUNNING = "module.directory.pdfproducerarchive.message.daemonArchiveRunning";
106     private static final String MESSAGE_DAEMON_UPDATE_STATUS_NEXT_PASS = "module.directory.pdfproducerarchive.message.daemonUpdateStatusNextPass";
107     private static final String MESSAGE_DAEMON_UPDATE_STATUS_RUNNING = "module.directory.pdfproducerarchive.message.daemonUpdateStatusRunning";
108 
109     //Markers
110     private static final String MARK_ID_DIRECTORY = "idDirectory";
111 
112     //marker for zipbasket
113     private static final String MARK_LIST_ZIPBASKET = "list_zipbasket";
114     private static final String MARK_PERMISSION_DELETE_ZIP = "permission_delete_zip";
115     private static final String MARK_DAEMON_NEXT_SCHEDULE = "daemon_next_schedule";
116     private static final String MARK_DAEMON_UPDATE_STATUS_NEXT_SCHEDULE = "daemon_update_status_next_schedule";
117     
118     // JSP URL
119     private static final String JSP_MANAGE_DIRECTORY_RECORD = DirectoryUtils.JSP_MANAGE_DIRECTORY_RECORD;
120     private static final String JSP_MANAGE_ZIPBASKET = "jsp/admin/plugins/directory/modules/pdfproducer/archive/basket/ManageZipBasket.jsp";
121     private static final String JSP_DO_ADD_ZIP_TO_BASKET = "jsp/admin/plugins/directory/modules/pdfproducer/archive/basket/AddZipToBasket.jsp";
122     private static final String JSP_DO_REMOVE_ZIP_TO_BASKET = "jsp/admin/plugins/directory/modules/pdfproducer/archive/basket/DoRemoveZipBasket.jsp";
123     private static final String JSP_DO_EXPORT_ALL_ZIP = "jsp/admin/plugins/directory/modules/pdfproducer/archive/basket/ExportAllZip.jsp";
124     private static final String JSP_DO_REMOVE_ALL_ZIP = "jsp/admin/plugins/directory/modules/pdfproducer/archive/basket/RemoveAllZip.jsp";
125 
126     //Parameters
127     private static final String PARAMETER_ID_DIRECTORY = DirectoryUtils.PARAMETER_ID_DIRECTORY;
128     private static final String PARAMETER_ID_DIRECTORY_RECORD = "id_directory_record";
129     private static final String PARAMETER_SESSION = DirectoryUtils.PARAMETER_SESSION;
130     private static final String PARAMETER_ID_ZIPBASKET = "id_zipbasket";
131 
132     //constant
133     public static final String DAEMON_ARCHIVE_ID = "archiveIndexer";
134     public static final String DAEMON_UPDATE_STATUS_ID = "zipBasketCheckStatus";
135     private static final DirectoryManageZipBasketService _manageZipBasketService = (DirectoryManageZipBasketService) SpringContextService.getPluginBean( DirectoryPDFProducerPlugin.PLUGIN_NAME,
136             "directory-pdfproducer-archive.directoryManageZipBasketService" );
137     private static final ConfigProducerService _manageConfigProducerService = (ConfigProducerService) SpringContextService.getPluginBean( DirectoryPDFProducerPlugin.PLUGIN_NAME,
138             "directory-pdfproducer.manageConfigProducer" );
139 
140     /**
141      * display the basket basket
142      * @param request request
143      * @return page to manage zip
144      * @throws AccessDeniedException exception if the user does not have the right
145      */
146     public String getManageZipToBasket( HttpServletRequest request )
147         throws AccessDeniedException
148     {
149         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
150 
151         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
152                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) ||
153                 StringUtils.isBlank( strIdDirectory ) || !StringUtils.isNumeric( strIdDirectory ) )
154         {
155             throw new AccessDeniedException(  );
156         }
157 
158         Map<String, Object> model = new HashMap<String, Object>(  );
159 
160         List<ZipBasket> listZipBasket = _manageZipBasketService.loadAllZipBasketByAdminUserOrder( getPlugin( ),
161                 getUser(  ).getUserId(  ), DirectoryUtils.convertStringToInt( strIdDirectory ) );
162 
163         String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
164         String strAscSort = null;
165 
166         if ( strSortedAttributeName != null )
167         {
168             strAscSort = request.getParameter( Parameters.SORTED_ASC );
169 
170             boolean bIsAscSort = Boolean.parseBoolean( strAscSort );
171 
172             Collections.sort( listZipBasket, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );
173         }
174 
175         model.put( MARK_ID_DIRECTORY, strIdDirectory );
176         model.put( MARK_LIST_ZIPBASKET, listZipBasket );
177         model.put( MARK_PERMISSION_DELETE_ZIP,
178             RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
179                 DirectoryPDFProducerArchiveResourceIdService.PERMISSION_DELETE_ZIP, getUser(  ) ) );
180 
181         Directory directory = _manageZipBasketService.getDirectory( DirectoryUtils.convertStringToInt( strIdDirectory ) );
182 
183         if ( !listZipBasket.isEmpty(  ) && ( directory != null ) )
184         {
185             for ( ZipBasket zipBasket : listZipBasket )
186             {
187                 zipBasket.setListZipBasketAction( _manageZipBasketService.selectActionsByZipBasketState( 
188                         DirectoryUtils.convertStringToInt( zipBasket.getZipStatus(  ) ), getLocale(  ), directory,
189                         getUser(  ), getPlugin(  ) ) );
190             }
191         }
192 
193         model.put(
194                 MARK_DAEMON_NEXT_SCHEDULE,
195                 getLabelTimeBeforeNextDaemonPassage( MESSAGE_DAEMON_NEXT_PASS, MESSAGE_DAEMON_RUNNING, request,
196                         DAEMON_ARCHIVE_ID ) );
197         model.put(
198                 MARK_DAEMON_UPDATE_STATUS_NEXT_SCHEDULE,
199                 getLabelTimeBeforeNextDaemonPassage( MESSAGE_DAEMON_UPDATE_STATUS_NEXT_PASS,
200                         MESSAGE_DAEMON_UPDATE_STATUS_RUNNING, request, DAEMON_UPDATE_STATUS_ID ) );
201 
202         HtmlTemplate templateList = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ZIP_BASKET, getLocale(  ), model );
203 
204         return getAdminPage( templateList.getHtml(  ) );
205     }
206 
207     /**
208      * Gets the confirmation to create zip
209      * @param request request
210      * @return message of confirmation
211      * @throws AccessDeniedException AccessDeniedException
212      */
213     public String getConfirmAddZipBasket( HttpServletRequest request )
214         throws AccessDeniedException
215     {
216         String[] listIdsDirectoryRecord = request.getParameterValues( PARAMETER_ID_DIRECTORY_RECORD );
217 
218         if ( ( listIdsDirectoryRecord != null ) && ( listIdsDirectoryRecord.length > 0 ) )
219         {
220             String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
221 
222             // If the id directory is not in the parameter, then fetch it from the first record
223             // assuming all records are from the same directory 
224             if ( StringUtils.isBlank( strIdDirectory ) || !StringUtils.isNumeric( strIdDirectory ) )
225             {
226                 String strIdDirectoryRecord = listIdsDirectoryRecord[0];
227                 int nIdDirectoryRecord = DirectoryUtils.convertStringToInt( strIdDirectoryRecord );
228                 Record record = _manageZipBasketService.getRecord( nIdDirectoryRecord );
229 
230                 if ( record != null )
231                 {
232                     strIdDirectory = Integer.toString( record.getDirectory(  ).getIdDirectory(  ) );
233                 }
234             }
235 
236             if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
237                         DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) ||
238                     StringUtils.isBlank( strIdDirectory ) || !StringUtils.isNumeric( strIdDirectory ) )
239             {
240                 return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
241                     AdminMessage.TYPE_CONFIRMATION );
242             }
243 
244             int nIdDirectory = DirectoryUtils.convertStringToInt( strIdDirectory );
245             UrlItem url = new UrlItem( JSP_DO_ADD_ZIP_TO_BASKET );
246             url.addParameter( PARAMETER_ID_DIRECTORY, nIdDirectory );
247 
248             for ( String strIdDirectoryRecord : listIdsDirectoryRecord )
249             {
250                 int nIdDirectoryRecord = DirectoryUtils.convertStringToInt( strIdDirectoryRecord );
251                 Record record = _manageZipBasketService.getRecord( nIdDirectoryRecord );
252 
253                 if ( ( record == null ) || ( record.getDirectory(  ).getIdDirectory(  ) != nIdDirectory ) )
254                 {
255                     return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
256                 }
257 
258                 url.addParameter( PARAMETER_ID_DIRECTORY_RECORD, nIdDirectoryRecord );
259             }
260 
261             return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_ADD_ZIP_TO_BASKET, url.getUrl(  ),
262                 AdminMessage.TYPE_CONFIRMATION );
263         }
264 
265         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
266     }
267 
268     /**
269      * Add zip to basket or return error message
270      * @param request request
271      * @return message of confirmation or error
272      * @throws AccessDeniedException exception if the user does not have the right
273      */
274     public String addZipToBasket( HttpServletRequest request )
275         throws AccessDeniedException
276     {
277         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
278 
279         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
280                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) )
281         {
282             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
283                 AdminMessage.TYPE_CONFIRMATION );
284         }
285 
286         String[] listIdsRecord = request.getParameterValues( PARAMETER_ID_DIRECTORY_RECORD );
287 
288         // Check parameteres
289         if ( ( listIdsRecord == null ) || ( listIdsRecord.length == 0 ) || StringUtils.isBlank( strIdDirectory ) )
290         {
291             return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
292         }
293 
294         // Fetch directory
295         int nIdDirectory = DirectoryUtils.convertStringToInt( strIdDirectory );
296 
297         ZipItem item = new ZipItem( );
298         item.setIdAdminUser( getUser( ).getUserId( ) );
299         item.setIdDirectory( nIdDirectory );
300         item.setListIdRecord( listIdsRecord );
301         item.setLocale( AdminUserService.getLocale( request ) );
302 
303         AddZipToBasketDaemon.addItemToQueue( item );
304 
305         UrlItem url = new UrlItem( getJspManageDirectoryRecord( request, nIdDirectory ) );
306         return AdminMessageService.getMessageUrl( request, MESSAGE_ADD_ZIP_TO_BASKET, url.getUrl(  ),
307             AdminMessage.TYPE_INFO );
308     }
309 
310     /**
311      * Gets the confirmation to remove zip
312      * @param request request
313      * @return message of confirmation
314      */
315     public String getConfirmRemoveZipBasket( HttpServletRequest request )
316     {
317         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
318 
319         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
320                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_DELETE_ZIP, getUser(  ) ) )
321         {
322             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
323                 AdminMessage.TYPE_CONFIRMATION );
324         }
325 
326         String strIdZipBasket = request.getParameter( PARAMETER_ID_ZIPBASKET );
327         String strIdRecord = request.getParameter( PARAMETER_ID_DIRECTORY_RECORD );
328 
329         UrlItem url = new UrlItem( JSP_DO_REMOVE_ZIP_TO_BASKET );
330         url.addParameter( PARAMETER_ID_ZIPBASKET, strIdZipBasket );
331         url.addParameter( PARAMETER_ID_DIRECTORY, strIdDirectory );
332         url.addParameter( PARAMETER_ID_DIRECTORY_RECORD, strIdRecord );
333 
334         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_ZIP_TO_BASKET, url.getUrl(  ),
335             AdminMessage.TYPE_CONFIRMATION );
336     }
337 
338     /**
339      * Remove zip to basket
340      * @param request request
341      * @return message
342      */
343     public String removeZipToBasket( HttpServletRequest request )
344     {
345         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
346 
347         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
348                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_DELETE_ZIP, getUser(  ) ) )
349         {
350             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
351                 AdminMessage.TYPE_CONFIRMATION );
352         }
353 
354         String strIdZipBasket = request.getParameter( PARAMETER_ID_ZIPBASKET );
355         String strIdRecord = request.getParameter( PARAMETER_ID_DIRECTORY_RECORD );
356 
357         int nIdDirectory = DirectoryUtils.convertStringToInt( strIdDirectory );
358 
359         UrlItem url = new UrlItem( JSP_MANAGE_ZIPBASKET );
360         url.addParameter( PARAMETER_ID_DIRECTORY, nIdDirectory );
361 
362         int nIdAdminUser = getUser(  ).getUserId(  );
363         boolean bAllExportAlreadyExists = _manageZipBasketService.existsZipBasket( nIdAdminUser, getPlugin(  ),
364                 nIdDirectory, -1 );
365 
366         if ( ( DirectoryUtils.convertStringToInt( strIdRecord ) == DirectoryUtils.CONSTANT_ID_NULL ) ||
367                 !bAllExportAlreadyExists )
368         {
369             if ( _manageZipBasketService.deleteZipBasket( getPlugin(  ),
370                         DirectoryUtils.convertStringToInt( strIdZipBasket ), strIdRecord ) )
371             {
372                 return AdminMessageService.getMessageUrl( request, MESSAGE_REMOVE_ZIP_TO_BASKET, url.getUrl(  ),
373                     AdminMessage.TYPE_INFO );
374             }
375 
376             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_REMOVE_ZIP_TO_BASKET, url.getUrl(  ),
377                 AdminMessage.TYPE_STOP );
378         }
379 
380         return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_REMOVE_ZIP_TO_BASKET_ALLEXPORT,
381             url.getUrl(  ), AdminMessage.TYPE_STOP );
382     }
383 
384     /**
385      * Gets the confirmation to export all zip
386      * @param request request
387      * @return message
388      */
389     public String getConfirmExportAllZipBasket( HttpServletRequest request )
390     {
391         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
392 
393         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
394                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) )
395         {
396             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
397                 AdminMessage.TYPE_CONFIRMATION );
398         }
399 
400         UrlItem url = new UrlItem( JSP_DO_EXPORT_ALL_ZIP );
401         url.addParameter( PARAMETER_ID_DIRECTORY, DirectoryUtils.convertStringToInt( strIdDirectory ) );
402 
403         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_EXPORT_ALL_ZIP, url.getUrl(  ),
404             AdminMessage.TYPE_CONFIRMATION );
405     }
406 
407     /**
408      * export all zip
409      * @param request request
410      * @return information message or error message
411      */
412     public String exportAllZipBasket( HttpServletRequest request )
413     {
414         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
415 
416         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
417                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) )
418         {
419             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
420                 AdminMessage.TYPE_CONFIRMATION );
421         }
422 
423         List<ZipBasket> listZipBasket = _manageZipBasketService.loadAllZipBasketByAdminUser( getPlugin(  ),
424                 getUser(  ).getUserId(  ), DirectoryUtils.convertStringToInt( strIdDirectory ) );
425 
426         boolean bCheckAllFileZipped = true;
427 
428         for ( ZipBasket zipBasket : listZipBasket )
429         {
430             if ( !StatusZipEnum.FINISHED.getId(  ).equals( zipBasket.getZipStatus(  ) ) )
431             {
432                 bCheckAllFileZipped = false;
433             }
434         }
435 
436         UrlItem url = new UrlItem( JSP_MANAGE_ZIPBASKET );
437         url.addParameter( PARAMETER_ID_DIRECTORY, DirectoryUtils.convertStringToInt( strIdDirectory ) );
438 
439         int nIdDirectory = DirectoryUtils.convertStringToInt( strIdDirectory );
440         int nIdAdminUser = getUser(  ).getUserId(  );
441         boolean bAllExportAlreadyExists = _manageZipBasketService.existsZipBasket( nIdAdminUser, getPlugin(  ),
442                 nIdDirectory, -1 );
443 
444         if ( bCheckAllFileZipped && !bAllExportAlreadyExists && ( nIdDirectory != DirectoryUtils.CONSTANT_ID_NULL ) )
445         {
446             Directory directory = _manageZipBasketService.getDirectory( nIdDirectory );
447 
448             String strName = StringUtil.replaceAccent( directory.getTitle(  ) ).replace( " ", "_" );
449 
450             _manageZipBasketService.exportAllZipFile( strName, nIdAdminUser, getPlugin(  ), nIdDirectory );
451 
452             return AdminMessageService.getMessageUrl( request, MESSAGE_EXPORT_ALL_ZIP, url.getUrl(  ),
453                 AdminMessage.TYPE_INFO );
454         }
455         else if ( bAllExportAlreadyExists )
456         {
457             return AdminMessageService.getMessageUrl( request, MESSAGE_EXPORT_ALL_ZIP_ALREADY_EXISTS, url.getUrl(  ),
458                 AdminMessage.TYPE_STOP );
459         }
460         else
461         {
462             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_EXPORT_ALL_ZIP, url.getUrl(  ),
463                 AdminMessage.TYPE_STOP );
464         }
465     }
466 
467     /**
468      * Gets the confirmation to export all zip
469      * @param request request
470      * @return message
471      */
472     public String getConfirmRemoveAllZipBasket( HttpServletRequest request )
473     {
474         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
475 
476         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
477                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_GENERATE_ZIP, getUser(  ) ) )
478         {
479             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
480                 AdminMessage.TYPE_CONFIRMATION );
481         }
482 
483         UrlItem url = new UrlItem( JSP_DO_REMOVE_ALL_ZIP );
484         url.addParameter( PARAMETER_ID_DIRECTORY, DirectoryUtils.convertStringToInt( strIdDirectory ) );
485 
486         return AdminMessageService.getMessageUrl( request, MESSAGE_CONFIRM_REMOVE_ALL_ZIP, url.getUrl(  ),
487             AdminMessage.TYPE_CONFIRMATION );
488     }
489 
490     /**
491      * Remove all zip to basket
492      * @param request request
493      * @return message
494      */
495     public String removeAllZip( HttpServletRequest request )
496     {
497         String strIdDirectory = request.getParameter( PARAMETER_ID_DIRECTORY );
498 
499         if ( !RBACService.isAuthorized( Directory.RESOURCE_TYPE, strIdDirectory,
500                     DirectoryPDFProducerArchiveResourceIdService.PERMISSION_DELETE_ZIP, getUser(  ) ) )
501         {
502             return AdminMessageService.getMessageUrl( request, Messages.USER_ACCESS_DENIED,
503                 AdminMessage.TYPE_CONFIRMATION );
504         }
505 
506         int nIdDirectory = DirectoryUtils.convertStringToInt( strIdDirectory );
507         int nIdAdminUser = getUser(  ).getUserId(  );
508 
509         if ( nIdDirectory != DirectoryUtils.CONSTANT_ID_NULL )
510         {
511             UrlItem url = new UrlItem( JSP_MANAGE_ZIPBASKET );
512             url.addParameter( PARAMETER_ID_DIRECTORY, nIdDirectory );
513 
514             if ( _manageZipBasketService.deleteAllZipBasket( getPlugin(  ), nIdDirectory, nIdAdminUser ) )
515             {
516                 return AdminMessageService.getMessageUrl( request, MESSAGE_REMOVE_ALL_ZIP, url.getUrl(  ),
517                     AdminMessage.TYPE_INFO );
518             }
519 
520             return AdminMessageService.getMessageUrl( request, MESSAGE_ERROR_REMOVE_ALL_ZIP, url.getUrl(  ),
521                 AdminMessage.TYPE_STOP );
522         }
523 
524         return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
525     }
526 
527     /**
528      * return url of the jsp manage directory record
529      * @param request The HTTP request
530      * @param nIdDirectory the directory id
531      * @return url of the jsp manage directory record
532      */
533     private String getJspManageDirectoryRecord( HttpServletRequest request, int nIdDirectory )
534     {
535         return AppPathService.getBaseUrl( request ) + JSP_MANAGE_DIRECTORY_RECORD + "?" + PARAMETER_ID_DIRECTORY + "=" +
536         nIdDirectory + "&" + PARAMETER_SESSION + "=" + PARAMETER_SESSION;
537     }
538 
539     private String getLabelTimeBeforeNextDaemonPassage( String strI18nKeyWait, String strI18nKeyDaemonRunning,
540             HttpServletRequest request, String strDaemonId )
541     {
542         DaemonEntry daemonEntry = null;
543         Collection<DaemonEntry> listDaemonEntries = AppDaemonService.getDaemonEntries( );
544         if ( listDaemonEntries != null && listDaemonEntries.size( ) > 0 )
545         {
546             for ( DaemonEntry entry : listDaemonEntries )
547             {
548                 if ( StringUtils.equals( entry.getId( ), strDaemonId ) )
549                 {
550                     daemonEntry = entry;
551                 }
552             }
553             Locale locale = AdminUserService.getLocale( request );
554 
555             // The method getLastRunDate( ) use a deprecated method, that hard-code the format of the date.
556             SimpleDateFormat formatterDateTime = new SimpleDateFormat( "dd'/'MM'/'yyyy' 'HH':'mm", Locale.FRANCE );
557             Date dateLastRun;
558             try
559             {
560                 dateLastRun = formatterDateTime.parse( daemonEntry.getLastRunDate( ) );
561             }
562             catch ( ParseException e )
563             {
564                 dateLastRun = null;
565             }
566             if ( dateLastRun != null )
567             {
568                 String strLabelNextDaemonPass = StringUtils.EMPTY;
569                 Date currentDate = new Date( );
570                 long lTimbeBeforeNextPassage = daemonEntry.getInterval( ) * 1000l
571                         - ( currentDate.getTime( ) - dateLastRun.getTime( ) );
572                 if ( lTimbeBeforeNextPassage > 0 )
573                 {
574                     int nHours = (int) lTimbeBeforeNextPassage / 3600000; // We get the number of hours
575                     lTimbeBeforeNextPassage = lTimbeBeforeNextPassage % 3600000;
576                     int nMinutes = (int) lTimbeBeforeNextPassage / 60000;
577                     lTimbeBeforeNextPassage = lTimbeBeforeNextPassage % 60000;
578                     int nSeconds = (int) lTimbeBeforeNextPassage / 1000;
579                     Object[] args = { Integer.toString( nHours ), Integer.toString( nMinutes ),
580                             Integer.toString( nSeconds ) };
581                     strLabelNextDaemonPass = I18nService.getLocalizedString( strI18nKeyWait, args, locale );
582                 }
583                 else
584                 {
585                     strLabelNextDaemonPass = I18nService.getLocalizedString( strI18nKeyDaemonRunning, locale );
586                 }
587                 return strLabelNextDaemonPass;
588             }
589         }
590         return null;
591     }
592 }