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.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
74
75 @Override
76 @Transactional( "digglike.transactionManager" )
77 public int create( DiggSubmit diggSubmit, Plugin plugin, Locale locale )
78 {
79
80 diggSubmit.setDateResponse( DiggUtils.getCurrentDate( ) );
81
82
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
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
114 diggSubmit.setIdImageResource( response.getIdImageResource( ) );
115 }
116
117 response.setDiggSubmit( diggSubmit );
118 ResponseHome.create( response, plugin );
119 }
120 }
121
122
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
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
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
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
164 DiggSubmitHome.remove( nIdDiggSubmit, plugin );
165
166 updateDiggSubmitOrder( null, null, nIdDigg, diggSubmit.isPinned( ), plugin );
167 }
168 }
169
170
171
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
204 for ( Integer nIdDiggSubmit : listIdDiggDubmit )
205 {
206 DiggSubmitHome.updateDiggSubmitOrder( nNewOrder++, nIdDiggSubmit, plugin );
207 }
208 }
209 }
210
211
212
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
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
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
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
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
313
314 @Override
315 public int getCountDiggSubmit( SubmitFilter filter, Plugin plugin )
316 {
317 return DiggSubmitHome.getCountDiggSubmit( filter, plugin );
318 }
319
320
321
322
323 @Override
324 public List<DiggSubmit> getDiggSubmitList( SubmitFilter filter, Plugin plugin )
325 {
326 if ( !filter.containsSortBy( ) )
327 {
328
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
347
348 @Override
349 public List<DiggSubmit> getDiggSubmitList( SubmitFilter filter, Plugin plugin, int nNumberMaxDiggSubmit )
350 {
351 if ( !filter.containsSortBy( ) )
352 {
353
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
375
376 @Override
377 public List<Integer> getDiggSubmitListId( SubmitFilter filter, Plugin plugin )
378 {
379 if ( !filter.containsSortBy( ) )
380 {
381
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
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413 @Override
414 public int getMaxOrderList( int nIdDigg, boolean bListPinned, Plugin plugin )
415 {
416
417 return DiggSubmitHome.getMaxOrderList( nIdDigg, bListPinned, plugin );
418 }
419
420
421
422
423
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
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
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
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
485 diggSubmit.setNumberComment( CommentSubmitService.getService( ).getCountCommentSubmit( filter, plugin ) );
486
487 filter.setIdCommentSubmitState( CommentSubmit.STATE_ENABLE );
488 diggSubmit.setNumberCommentEnable( CommentSubmitService.getService( ).getCountCommentSubmit( filter, plugin ) );
489
490 diggSubmit.setDiggSubmitValue( DiggUtils.getHtmlDiggSubmitValue( diggSubmit, locale ) );
491
492 diggSubmit.setDiggSubmitValueShowInTheList( DiggUtils.getHtmlDiggSubmitValueShowInTheList( diggSubmit, locale ) );
493
494 diggSubmit.setDiggSubmitTitle( DiggUtils.getDiggSubmitTitle( diggSubmit, locale ) );
495
496 update( diggSubmit, plugin );
497 }
498 }