View Javadoc
1   package fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.service.daemon;
2   
3   import fr.paris.lutece.plugins.directory.business.Directory;
4   import fr.paris.lutece.plugins.directory.business.RecordField;
5   import fr.paris.lutece.plugins.directory.business.RecordFieldFilter;
6   import fr.paris.lutece.plugins.directory.modules.pdfproducer.business.producerconfig.DefaultConfigProducer;
7   import fr.paris.lutece.plugins.directory.modules.pdfproducer.business.producerconfig.IConfigProducer;
8   import fr.paris.lutece.plugins.directory.modules.pdfproducer.service.ConfigProducerService;
9   import fr.paris.lutece.plugins.directory.modules.pdfproducer.utils.PDFUtils;
10  import fr.paris.lutece.plugins.directory.modules.pdfproducerarchive.service.DirectoryManageZipBasketService;
11  import fr.paris.lutece.portal.business.user.AdminUserHome;
12  import fr.paris.lutece.portal.service.plugin.Plugin;
13  import fr.paris.lutece.portal.service.spring.SpringContextService;
14  import fr.paris.lutece.util.string.StringUtil;
15  
16  import java.util.List;
17  import java.util.Locale;
18  
19  
20  public class AsyncAddZipBasketService implements Runnable
21  {
22      private static final String DEFAULT_TYPE_FILE_NAME = "default";
23      private static final String DIRECTORY_ENTRY_FILE_NAME = "directory_entry";
24  
25      private static final DirectoryManageZipBasketService _manageZipBasketService = SpringContextService
26              .getBean( "directory-pdfproducer-archive.directoryManageZipBasketService" );
27      private static final ConfigProducerService _manageConfigProducerService = SpringContextService
28              .getBean( "directory-pdfproducer.manageConfigProducer" );
29  
30      private int _nIdAdminUser;
31      private Plugin _plugin;
32      private int _nIdDirectory;
33      private String[] _listIdRecord;
34      private Locale _locale;
35  
36      /**
37       * Priovate constructor.
38       */
39      @SuppressWarnings( "unused" )
40      private AsyncAddZipBasketService( )
41      {
42  
43      }
44  
45      /**
46       * Create a new initialized AsynchronousAddZipBasketService
47       * @param request The request
48       * @param nIdAdminUser The ID of the admin user
49       * @param plugin The plugin
50       * @param nIdDirectory The ID of the directory
51       * @param nIdRecord The id of the record of the directory to add to the
52       *            basket
53       */
54      public AsyncAddZipBasketService( Locale locale, int nIdAdminUser, Plugin plugin, int nIdDirectory,
55              String[] listIdRecord )
56      {
57          _locale = locale;
58          _nIdAdminUser = nIdAdminUser;
59          _plugin = plugin;
60          _nIdDirectory = nIdDirectory;
61          _listIdRecord = listIdRecord;
62      }
63  
64      /**
65       * Add asynchronously a list of records to the basket of an admin user.
66       * Parameters are passed throw the constructor of the class.
67       */
68      @Override
69      public void run( )
70      {
71          if ( _listIdRecord == null || _listIdRecord.length == 0 || _nIdDirectory <= 0 || _nIdAdminUser <= 0 )
72          {
73              return;
74          }
75  
76          // Fetch directory
77          Directory directory = _manageZipBasketService.getDirectory( _nIdDirectory );
78  
79          // Fetch config
80          int nIdConfig = _manageConfigProducerService.loadDefaultConfig( _plugin, _nIdDirectory );
81          IConfigProducer configProducer = null;
82  
83          if ( ( nIdConfig == -1 ) || ( nIdConfig == 0 ) )
84          {
85              configProducer = new DefaultConfigProducer( );
86          }
87          else
88          {
89              configProducer = _manageConfigProducerService.loadConfig( _plugin, nIdConfig );
90          }
91  
92          String strTypeConfigFileName = configProducer.getTypeConfigFileName( );
93  
94          for ( String strIdRecord : _listIdRecord )
95          {
96              int nIdRecord = Integer.parseInt( strIdRecord );
97              String strName = null;
98  
99              // Build file name
100             if ( DEFAULT_TYPE_FILE_NAME.equals( strTypeConfigFileName ) )
101             {
102                 strName = PDFUtils.doPurgeNameFile( StringUtil.replaceAccent( directory.getTitle( ) )
103                         .replace( " ", "_" ) + "_" + nIdRecord );
104             }
105             else if ( DIRECTORY_ENTRY_FILE_NAME.equals( strTypeConfigFileName ) )
106             {
107                 RecordFieldFilter filter = new RecordFieldFilter( );
108                 filter.setIdRecord( nIdRecord );
109                 filter.setIdEntry( configProducer.getIdEntryFileName( ) );
110 
111                 List<RecordField> listRecordField = _manageZipBasketService.getRecordFields( filter );
112 
113                 for ( RecordField recordField : listRecordField )
114                 {
115                     strName = PDFUtils.doPurgeNameFile( recordField.getEntry( ).convertRecordFieldValueToString(
116                             recordField, _locale, false, false ) );
117                 }
118             }
119             else
120             {
121                 strName = PDFUtils.doPurgeNameFile( configProducer.getTextFileName( ) + "_" + nIdRecord );
122             }
123 
124             boolean bAllExportAlreadyExists = _manageZipBasketService.existsZipBasket( _nIdAdminUser, _plugin,
125                     _nIdDirectory, -1 );
126 
127             if ( !bAllExportAlreadyExists )
128             {
129                 _manageZipBasketService.addZipBasket( AdminUserHome.findByPrimaryKey( _nIdAdminUser ), _locale,
130                         strName, _nIdAdminUser, _plugin, _nIdDirectory, nIdRecord,
131                         _manageConfigProducerService.loadListConfigEntry( _plugin, nIdConfig ) );
132             }
133         }
134     }
135 }