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.digglike.service;
35  
36  import fr.paris.lutece.plugins.digglike.business.CommentSubmit;
37  import fr.paris.lutece.plugins.digglike.business.Digg;
38  import fr.paris.lutece.plugins.digglike.business.DiggHome;
39  import fr.paris.lutece.plugins.digglike.business.DiggSubmit;
40  import fr.paris.lutece.plugins.digglike.business.DiggSubmitHome;
41  import fr.paris.lutece.plugins.digglike.business.DiggSubmitStateHome;
42  import fr.paris.lutece.plugins.digglike.business.EntryFilter;
43  import fr.paris.lutece.plugins.digglike.business.EntryHome;
44  import fr.paris.lutece.plugins.digglike.business.IEntry;
45  import fr.paris.lutece.plugins.digglike.business.ImageResourceHome;
46  import fr.paris.lutece.plugins.digglike.business.Response;
47  import fr.paris.lutece.plugins.digglike.business.ResponseHome;
48  import fr.paris.lutece.plugins.digglike.business.SubmitFilter;
49  import fr.paris.lutece.plugins.digglike.service.search.DigglikeIndexer;
50  import fr.paris.lutece.plugins.digglike.utils.DiggIndexerUtils;
51  import fr.paris.lutece.plugins.digglike.utils.DiggUtils;
52  import fr.paris.lutece.portal.business.indexeraction.IndexerAction;
53  import fr.paris.lutece.portal.service.plugin.Plugin;
54  import fr.paris.lutece.portal.service.search.IndexationService;
55  import fr.paris.lutece.portal.service.spring.SpringContextService;
56  import fr.paris.lutece.portal.service.util.AppPropertiesService;
57  
58  import java.util.ArrayList;
59  import java.util.HashMap;
60  import java.util.List;
61  import java.util.Locale;
62  import java.util.Map;
63  
64  import org.springframework.transaction.annotation.Transactional;
65  
66  
67  public class DiggSubmitService implements IDiggSubmitService
68  {
69      public static final String BEAN_SERVICE = "digglike.diggSubmitService";
70      private static IDiggSubmitService _singleton;
71  
72      /**
73       * {@inheritDoc}
74       */
75      @Override
76      @Transactional( "digglike.transactionManager" )
77      public int create( DiggSubmit diggSubmit, Plugin plugin, Locale locale )
78      {
79          //update creation date
80          diggSubmit.setDateResponse( DiggUtils.getCurrentDate(  ) );
81  
82          //update digg submit state
83          if ( diggSubmit.getDigg(  ).isDisableNewDiggSubmit(  ) )
84          {
85              diggSubmit.setDiggSubmitState( DiggSubmitStateHome.findByNumero( DiggSubmit.STATE_WAITING_FOR_PUBLISH,
86                      plugin ) );
87          }
88          else
89          {
90              diggSubmit.setDiggSubmitState( DiggSubmitStateHome.findByNumero( DiggSubmit.STATE_PUBLISH, plugin ) );
91          }
92  
93          int nIdDiggSubmit = DiggSubmitHome.create( diggSubmit, plugin );
94          diggSubmit.setIdDiggSubmit( nIdDiggSubmit );
95  
96          if ( diggSubmit.getDiggSubmitState(  ).getIdDiggSubmitState(  ) == DiggSubmit.STATE_PUBLISH )
97          {
98              String strIdDiggSubmit = Integer.toString( nIdDiggSubmit );
99              IndexationService.addIndexerAction( strIdDiggSubmit,
100                 AppPropertiesService.getProperty( DigglikeIndexer.PROPERTY_INDEXER_NAME ), IndexerAction.TASK_CREATE );
101 
102             DiggIndexerUtils.addIndexerAction( strIdDiggSubmit, IndexerAction.TASK_CREATE );
103         }
104 
105         //store response
106         if ( diggSubmit.getResponses(  ) != null )
107         {
108             for ( Response response : diggSubmit.getResponses(  ) )
109             {
110                 if ( response.getImage(  ) != null )
111                 {
112                     response.setIdImageResource( ImageResourceHome.create( response.getImage(  ), plugin ) );
113                     //update Id Image ressource associate to the digg
114                     diggSubmit.setIdImageResource( response.getIdImageResource(  ) );
115                 }
116 
117                 response.setDiggSubmit( diggSubmit );
118                 ResponseHome.create( response, plugin );
119             }
120         }
121 
122         //update DiggSubmit 
123         diggSubmit.setDiggSubmitValue( DiggUtils.getHtmlDiggSubmitValue( diggSubmit, locale ) );
124         diggSubmit.setDiggSubmitValueShowInTheList( DiggUtils.getHtmlDiggSubmitValueShowInTheList( diggSubmit, locale ) );
125         diggSubmit.setDiggSubmitTitle( DiggUtils.getDiggSubmitTitle( diggSubmit, locale ) );
126         DiggSubmitHome.update( diggSubmit, plugin );
127 
128         return nIdDiggSubmit;
129     }
130 
131     /**
132      * {@inheritDoc}
133      */
134     @Override
135     @Transactional( "digglike.transactionManager" )
136     public void update( DiggSubmit diggSubmit, Plugin plugin )
137     {
138         DiggSubmitHome.update( diggSubmit, plugin );
139     }
140 
141     /**
142      * {@inheritDoc}
143      */
144     @Override
145     @Transactional( "digglike.transactionManager" )
146     public void update( DiggSubmit diggSubmit, boolean bUpdateIndex, Plugin plugin )
147     {
148         DiggSubmitHome.update( diggSubmit, bUpdateIndex, plugin );
149     }
150 
151     /**
152      * {@inheritDoc}
153      */
154     @Override
155     @Transactional( "digglike.transactionManager" )
156     public void remove( int nIdDiggSubmit, Plugin plugin )
157     {
158         DiggSubmit diggSubmit = DiggSubmitHome.findByPrimaryKey( nIdDiggSubmit, plugin );
159 
160         if ( diggSubmit != null )
161         {
162             int nIdDigg = diggSubmit.getDigg(  ).getIdDigg(  );
163             //remove
164             DiggSubmitHome.remove( nIdDiggSubmit, plugin );
165             //update digg submit order
166             updateDiggSubmitOrder( null, null, nIdDigg, diggSubmit.isPinned(  ), plugin );
167         }
168     }
169 
170     /**
171      * {@inheritDoc}
172      */
173     @Override
174     @Transactional( "digglike.transactionManager" )
175     public void updateDiggSubmitOrder( Integer nPositionElement, Integer nNewPositionElement, int nIdDigg,
176         boolean bListPinned, Plugin plugin )
177     {
178         SubmitFilter filter = new SubmitFilter(  );
179         filter.setIdDigg( nIdDigg );
180 
181         List<Integer> listSortByManually = new ArrayList<Integer>(  );
182         listSortByManually.add( SubmitFilter.SORT_MANUALLY );
183         filter.setSortBy( listSortByManually );
184         //
185         filter.setIdPinned( bListPinned ? SubmitFilter.ID_TRUE : SubmitFilter.ID_FALSE );
186 
187         List<Integer> listIdDiggDubmit = getDiggSubmitListId( filter, plugin );
188 
189         if ( ( listIdDiggDubmit != null ) && ( listIdDiggDubmit.size(  ) > 0 ) )
190         {
191             if ( ( nPositionElement != null ) && ( nNewPositionElement != null )
192                     && ( !nPositionElement.equals( nNewPositionElement ) ) )
193             {
194                 if ( ( ( nPositionElement > 0 ) && ( nPositionElement <= ( listIdDiggDubmit.size(  ) + 1 ) ) ) &&
195                         ( ( nNewPositionElement > 0 ) && ( nNewPositionElement <= ( listIdDiggDubmit.size(  ) + 1 ) ) ) )
196                 {
197                     DiggUtils.moveElement( nPositionElement, nNewPositionElement, (ArrayList<Integer>) listIdDiggDubmit );
198                 }
199             }
200 
201             int nNewOrder = 1;
202 
203             //update all Digg submit
204             for ( Integer nIdDiggSubmit : listIdDiggDubmit )
205             {
206                 DiggSubmitHome.updateDiggSubmitOrder( nNewOrder++, nIdDiggSubmit, plugin );
207             }
208         }
209     }
210 
211     /**
212      * {@inheritDoc}
213      */
214     @Override
215     public DiggSubmit findByPrimaryKey( int nKey, boolean bLoadCommentList, Plugin plugin )
216     {
217         return findByPrimaryKey( nKey, bLoadCommentList, null, plugin );
218     }
219 
220     /**
221      * {@inheritDoc}
222      */
223     @Override
224     public DiggSubmit findByPrimaryKey( int nKey, boolean bLoadCommentList, Integer numberMaxCommentLoad, Plugin plugin )
225     {
226         DiggSubmit diggSubmit = DiggSubmitHome.findByPrimaryKey( nKey, plugin );
227 
228         if ( ( diggSubmit != null ) && !diggSubmit.isDisableComment(  ) && bLoadCommentList )
229         {
230             SubmitFilter submmitFilterComment = new SubmitFilter(  );
231             submmitFilterComment.setIdDiggSubmit( diggSubmit.getIdDiggSubmit(  ) );
232             submmitFilterComment.setIdCommentSubmitState( CommentSubmit.STATE_ENABLE );
233             diggSubmit.setComments( CommentSubmitService.getService(  )
234                                                         .getCommentSubmitList( submmitFilterComment,
235                     numberMaxCommentLoad, plugin ) );
236         }
237 
238         return diggSubmit;
239     }
240 
241     /**
242      * {@inheritDoc}
243      */
244     @Override
245     public DiggSubmit findByPrimaryKey( int nKey, boolean bLoadCommentList, boolean bLoadResponseList, Plugin plugin )
246     {
247         DiggSubmit diggSubmit = findByPrimaryKey( nKey, bLoadCommentList, plugin );
248 
249         if ( ( diggSubmit != null ) && bLoadResponseList )
250         {
251             SubmitFilter submmitFilter = new SubmitFilter(  );
252             submmitFilter.setIdDiggSubmit( diggSubmit.getIdDiggSubmit(  ) );
253             diggSubmit.setResponses( ResponseHome.getResponseList( submmitFilter, plugin ) );
254         }
255 
256         return diggSubmit;
257     }
258 
259     /**
260      * {@inheritDoc}
261      */
262     @Override
263     public int findNextIdDiggSubmitInTheList( int nIdCurrentDiggSubmit, SubmitFilter filter, Plugin plugin )
264     {
265         List<Integer> diggSubmitListId = getDiggSubmitListId( filter, plugin );
266         Object[] diggSubmitArrayId = diggSubmitListId.toArray(  );
267         int nIdDiggSubmitNext = -1;
268 
269         for ( int cpt = 0; cpt < diggSubmitArrayId.length; cpt++ )
270         {
271             if ( (Integer) diggSubmitArrayId[cpt] == nIdCurrentDiggSubmit )
272             {
273                 if ( cpt < ( diggSubmitArrayId.length - 1 ) )
274                 {
275                     nIdDiggSubmitNext = (Integer) diggSubmitArrayId[cpt + 1];
276                 }
277 
278                 break;
279             }
280         }
281 
282         return nIdDiggSubmitNext;
283     }
284 
285     /**
286      * {@inheritDoc}
287      */
288     @Override
289     public int findPrevIdDiggSubmitInTheList( int nIdCurrentDiggSubmit, SubmitFilter filter, Plugin plugin )
290     {
291         List<Integer> diggSubmitListId = getDiggSubmitListId( filter, plugin );
292         Object[] diggSubmitArrayId = diggSubmitListId.toArray(  );
293         int nIdDiggSubmitPrev = -1;
294 
295         for ( int cpt = 0; cpt < diggSubmitArrayId.length; cpt++ )
296         {
297             if ( (Integer) diggSubmitArrayId[cpt] == nIdCurrentDiggSubmit )
298             {
299                 if ( cpt != 0 )
300                 {
301                     nIdDiggSubmitPrev = (Integer) diggSubmitArrayId[cpt - 1];
302                 }
303 
304                 break;
305             }
306         }
307 
308         return nIdDiggSubmitPrev;
309     }
310 
311     /**
312      * {@inheritDoc}
313      */
314     @Override
315     public int getCountDiggSubmit( SubmitFilter filter, Plugin plugin )
316     {
317         return DiggSubmitHome.getCountDiggSubmit( filter, plugin );
318     }
319 
320     /**
321      * {@inheritDoc}
322      */
323     @Override
324     public List<DiggSubmit> getDiggSubmitList( SubmitFilter filter, Plugin plugin )
325     {
326         if ( !filter.containsSortBy(  ) )
327         {
328             //use default sort
329             DiggUtils.initSubmitFilterBySort( filter, DiggUtils.CONSTANT_ID_NULL );
330         }
331         else if ( filter.containsSortBy( SubmitFilter.SORT_BY_PINNED_FIRST ) )
332         {
333             SubmitFilter filterPinned = DiggUtils.createPinnedFilter( filter );
334             List<DiggSubmit> listDiggSubmitPinned = DiggSubmitHome.getDiggSubmitList( filterPinned, plugin );
335             filter.setIdPinned( SubmitFilter.ID_FALSE );
336             listDiggSubmitPinned.addAll( DiggSubmitHome.getDiggSubmitList( filter, plugin ) );
337             filter.setIdPinned( SubmitFilter.ALL_INT );
338 
339             return listDiggSubmitPinned;
340         }
341 
342         return DiggSubmitHome.getDiggSubmitList( filter, plugin );
343     }
344 
345     /**
346      * {@inheritDoc}
347      */
348     @Override
349     public List<DiggSubmit> getDiggSubmitList( SubmitFilter filter, Plugin plugin, int nNumberMaxDiggSubmit )
350     {
351         if ( !filter.containsSortBy(  ) )
352         {
353             //use default sort
354             DiggUtils.initSubmitFilterBySort( filter, DiggUtils.CONSTANT_ID_NULL );
355         }
356 
357         else if ( filter.containsSortBy( SubmitFilter.SORT_BY_PINNED_FIRST ) )
358         {
359             SubmitFilter filterPinned = DiggUtils.createPinnedFilter( filter );
360             List<DiggSubmit> listDiggSubmitPinned = DiggSubmitHome.getDiggSubmitList( filterPinned, plugin,
361                     nNumberMaxDiggSubmit );
362             filter.setIdPinned( SubmitFilter.ID_FALSE );
363             listDiggSubmitPinned.addAll( DiggSubmitHome.getDiggSubmitList( filterPinned, plugin,
364                     nNumberMaxDiggSubmit - listDiggSubmitPinned.size(  ) ) );
365             filter.setIdPinned( SubmitFilter.ALL_INT );
366 
367             return listDiggSubmitPinned;
368         }
369 
370         return DiggSubmitHome.getDiggSubmitList( filter, plugin, nNumberMaxDiggSubmit );
371     }
372 
373     /**
374      * {@inheritDoc}
375      */
376     @Override
377     public List<Integer> getDiggSubmitListId( SubmitFilter filter, Plugin plugin )
378     {
379         if ( !filter.containsSortBy(  ) )
380         {
381             //use default sort
382             DiggUtils.initSubmitFilterBySort( filter, DiggUtils.CONSTANT_ID_NULL );
383         }
384         else if ( filter.containsSortBy( SubmitFilter.SORT_BY_PINNED_FIRST ) )
385         {
386             SubmitFilter filterPinned = DiggUtils.createPinnedFilter( filter );
387             List<Integer> listDiggSubmitPinned = DiggSubmitHome.getDiggSubmitListId( filterPinned, plugin );
388             filter.setIdPinned( SubmitFilter.ID_FALSE );
389             listDiggSubmitPinned.addAll( DiggSubmitHome.getDiggSubmitListId( filter, plugin ) );
390             filter.setIdPinned( SubmitFilter.ALL_INT );
391 
392             return listDiggSubmitPinned;
393         }
394 
395         return DiggSubmitHome.getDiggSubmitListId( filter, plugin );
396     }
397 
398     //    @Override
399     //    public List<DiggSubmit> getDiggSubmitListWithNumberComment( SubmitFilter filter, Plugin plugin )
400     //    {
401     //        if ( !filter.containsSortBy(  ) )
402     //        {
403     //            //use default sort
404     //            DiggUtils.initSubmitFilterBySort( filter, DiggUtils.CONSTANT_ID_NULL );
405     //        }
406     //
407     //        return DiggSubmitHome.getDiggSubmitListWithNumberComment( filter, plugin );
408     //    }
409 
410     /**
411      * {@inheritDoc}
412      */
413     @Override
414     public int getMaxOrderList( int nIdDigg, boolean bListPinned, Plugin plugin )
415     {
416         // TODO Auto-generated method stub
417         return DiggSubmitHome.getMaxOrderList( nIdDigg, bListPinned, plugin );
418     }
419 
420     /**
421      * Returns the instance of the singleton
422      *
423      * @return The instance of the singleton
424      */
425     public static IDiggSubmitService getService(  )
426     {
427         if ( _singleton == null )
428         {
429             _singleton = SpringContextService.getBean( BEAN_SERVICE );
430         }
431 
432         return _singleton;
433     }
434 
435     /**
436      * {@inheritDoc}
437      */
438     @Override
439     public void updateAllDisplayOfDiggSubmit( Integer nIdDigg, Plugin plugin, Locale locale )
440     {
441         Digg digg = DiggHome.findByPrimaryKey( nIdDigg, plugin );
442         HashMap<Integer, IEntry> mapEntry = new HashMap<Integer, IEntry>(  );
443         EntryFilter entryFilter = new EntryFilter(  );
444         entryFilter.setIdDigg( digg.getIdDigg(  ) );
445 
446         for ( IEntry entry : EntryHome.getEntryList( entryFilter, plugin ) )
447         {
448             mapEntry.put( entry.getIdEntry(  ), EntryHome.findByPrimaryKey( entry.getIdEntry(  ), plugin ) );
449         }
450 
451         SubmitFilter filter = new SubmitFilter(  );
452         filter.setIdDigg( nIdDigg );
453 
454         List<Integer> listIdDiggSubmit = getDiggSubmitListId( filter, plugin );
455 
456         for ( Integer nIdDiggSubmit : listIdDiggSubmit )
457         {
458             updateDisplayDiggSubmit( nIdDiggSubmit, plugin, locale, digg, mapEntry );
459         }
460     }
461 
462     /**
463      * {@inheritDoc}
464      */
465     @Override
466     public void updateDisplayDiggSubmit( Integer nIdDiggSubmit, Plugin plugin, Locale locale, Digg digg,
467         Map<Integer, IEntry> mapEntry )
468     {
469         DiggSubmit diggSubmit = findByPrimaryKey( nIdDiggSubmit, false, plugin );
470         diggSubmit.setDigg( digg );
471 
472         SubmitFilter filter = new SubmitFilter(  );
473         filter.setIdDiggSubmit( nIdDiggSubmit );
474 
475         // add responses
476         List<Response> listResponses = ResponseHome.getResponseList( filter, plugin );
477 
478         for ( Response response : listResponses )
479         {
480             response.setEntry( mapEntry.get( response.getEntry(  ).getIdEntry(  ) ) );
481         }
482 
483         diggSubmit.setResponses( listResponses );
484         // update Number of comment
485         diggSubmit.setNumberComment( CommentSubmitService.getService(  ).getCountCommentSubmit( filter, plugin ) );
486         // update Number of Comment Enable
487         filter.setIdCommentSubmitState( CommentSubmit.STATE_ENABLE );
488         diggSubmit.setNumberCommentEnable( CommentSubmitService.getService(  ).getCountCommentSubmit( filter, plugin ) );
489         // update DiggSubmitValue
490         diggSubmit.setDiggSubmitValue( DiggUtils.getHtmlDiggSubmitValue( diggSubmit, locale ) );
491         // update DiggSubmitValue show in the list
492         diggSubmit.setDiggSubmitValueShowInTheList( DiggUtils.getHtmlDiggSubmitValueShowInTheList( diggSubmit, locale ) );
493         // update DiggSubmit title
494         diggSubmit.setDiggSubmitTitle( DiggUtils.getDiggSubmitTitle( diggSubmit, locale ) );
495         //update DiggSubmit
496         update( diggSubmit, plugin );
497     }
498 }