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.parisconnect.service;
35
36 import java.sql.Date;
37 import java.sql.Timestamp;
38 import java.text.SimpleDateFormat;
39 import java.util.ArrayList;
40 import java.util.List;
41
42 import org.apache.commons.collections.CollectionUtils;
43 import org.apache.commons.lang.StringUtils;
44 import org.apache.log4j.Logger;
45
46 import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
47
48 import fr.paris.lutece.plugins.parisconnect.business.Alert;
49 import fr.paris.lutece.plugins.parisconnect.business.AlertHome;
50 import fr.paris.lutece.plugins.parisconnect.business.DoListResponse;
51 import fr.paris.lutece.plugins.parisconnect.business.Message;
52 import fr.paris.lutece.plugins.parisconnect.business.Newsletter;
53 import fr.paris.lutece.plugins.parisconnect.business.NewsletterHome;
54 import fr.paris.lutece.plugins.parisconnect.business.UserInformations;
55 import fr.paris.lutece.portal.service.cache.AbstractCacheableService;
56 import fr.paris.lutece.portal.service.util.AppLogService;
57 import fr.paris.lutece.portal.service.util.AppPropertiesService;
58 import fr.paris.lutece.util.date.DateUtil;
59
60
61
62
63
64
65 public final class ParisConnectService
66 {
67
68 public static final String ERROR_ALREADY_SUBSCRIBE = "ALREADY_SUBSCRIBE";
69 public static final String ERROR_DURING_SUBSCRIBE = "ERROR_DURING_SUBSCRIBE";
70 public static final String CATEGORY_TYPE_AVIS = "avis";
71 public static final String CATEGORY_TYPE_DEMANDE = "demande";
72 private static ParisConnectService _singleton;
73 private static final String RESPONSE_OK_1 = "1";
74 private static final String RESPONSE_OK_0 = "0";
75
76 private static final String RESPONSE_OK = "\"ok\"";
77 private static final String RESPONSE_LIST_EMPTY = "0";
78 private static final String RESPONSE_ALREADY = "\"ALREADY\"";
79 private static final String RESPONSE_SUCCESS = "success";
80 private static final String RESPONSE_ERROR_OBJECT_NULL = "null";
81 private static final String DATE_ENVOI_PATTERN = "yyyy-MM-dd HH:mm:ss";
82
83
84 private static Logger _logger = Logger.getLogger( Constants.LOGGER_PARISCONNECT );
85 private static AbstractCacheableService _cacheUserName = new UserNameCacheService( );
86 private static AbstractCacheableService _cacheUser = new UserCacheService( );
87 private static SimpleDateFormat _formatterDate=new SimpleDateFormat(DATE_ENVOI_PATTERN);
88
89
90
91
92
93
94 private ParisConnectService( )
95 {
96
97 }
98
99
100
101
102
103
104 public static ParisConnectService getInstance( )
105 {
106 if ( _singleton == null )
107 {
108 _singleton = new ParisConnectService( );
109 }
110
111 return _singleton;
112 }
113
114
115
116
117
118
119
120
121
122
123
124 public String subscribeNewsletter( String strPCUID,String strMail, String strIdNewsletter )
125 {
126 String strError = null;
127
128 if(isNewsletterParisFr( strIdNewsletter ))
129 {
130 return subscribeDoList( strMail )?null:ERROR_DURING_SUBSCRIBE;
131 }
132
133 String strResponse = ParisConnectAPIService.subscribeNewsletter( strPCUID, strIdNewsletter );
134
135 if ( strResponse != null )
136 {
137 if ( !RESPONSE_OK_1.equals( strResponse ) )
138 {
139 if ( RESPONSE_ALREADY.equals( strResponse ) )
140 {
141 strError = ERROR_ALREADY_SUBSCRIBE;
142 }
143 else
144 {
145 strError = ERROR_DURING_SUBSCRIBE;
146 _logger.error( "error during subscribeUser : " + strResponse );
147 }
148 }
149 }
150 else
151 {
152 strError = ERROR_DURING_SUBSCRIBE;
153 }
154
155 return strError;
156 }
157
158
159
160
161
162
163
164
165
166 public boolean unSubscribeNewsletter( String strPCUID,String strMail,String strIdNewsletter )
167 {
168 boolean unscribe = false;
169 if(isNewsletterParisFr( strIdNewsletter ))
170 {
171 return unSubscribeDoList( strMail );
172 }
173
174 String strResponse = ParisConnectAPIService.unSubscribeNewsletter( strPCUID, strIdNewsletter );
175
176 if ( strResponse != null )
177 {
178 if ( RESPONSE_OK_1.equals( strResponse ) )
179 {
180 unscribe = true;
181 }
182 else
183 {
184 _logger.error( "error during unSubscribeUser : " + strResponse );
185 }
186 }
187
188 return unscribe;
189 }
190
191
192 public boolean markMessageAsRead(String strIdMessage)
193 {
194 boolean markMessageAsRead = false;
195 String strResponse = ParisConnectAPIService.markMessageAsRead( strIdMessage );
196
197 if ( strResponse != null )
198 {
199 if ( RESPONSE_OK.equals( strResponse ) )
200 {
201 markMessageAsRead = true;
202 }
203 else
204 {
205 _logger.error( "error during markMessageAsRead : " + strResponse );
206 }
207 }
208
209 return markMessageAsRead;
210
211 }
212
213 public boolean markMessageAsUnRead(String strIdMessage)
214 {
215 boolean markMessageAsUnRead = false;
216 String strResponse = ParisConnectAPIService.markMessageAsUnRead( strIdMessage );
217
218 if ( strResponse != null )
219 {
220 if ( RESPONSE_OK.equals( strResponse ) )
221 {
222 markMessageAsUnRead = true;
223 }
224 else
225 {
226 _logger.error( "error during markMessageAsRead : " + strResponse );
227 }
228 }
229
230 return markMessageAsUnRead;
231
232 }
233
234
235
236
237
238
239
240
241
242 public String subscribeAlert( String strPCUID, String strIdAlertes )
243 {
244 String strError = null;
245 String strResponse = ParisConnectAPIService.subscribeAlert( strPCUID, strIdAlertes );
246
247 if ( strResponse != null )
248 {
249 if ( !RESPONSE_OK.equals( strResponse ) )
250 {
251 if ( RESPONSE_ALREADY.equals( strResponse ) )
252 {
253 strError = ERROR_ALREADY_SUBSCRIBE;
254 }
255 else
256 {
257 strError = ERROR_DURING_SUBSCRIBE;
258 _logger.error( "error during subscribeUser : " + strResponse );
259 }
260 }
261 }
262 else
263 {
264 strError = ERROR_DURING_SUBSCRIBE;
265 }
266
267 return strError;
268 }
269
270
271
272
273
274
275
276
277
278 public boolean unSubscribeAlert( String strPCUID, String strIdAlertes )
279 {
280 boolean unscribe = false;
281 String strResponse = ParisConnectAPIService.unSubscribeAlert( strPCUID, strIdAlertes );
282
283 if ( strResponse != null )
284 {
285 if ( RESPONSE_OK.equals( strResponse ) )
286 {
287 unscribe = true;
288 }
289 else
290 {
291 _logger.error( "error during unSubscribeUser : " + strResponse );
292 }
293 }
294
295 return unscribe;
296 }
297
298
299 public List<Alert> getAlerts()
300 {
301
302
303 String strResponse = ParisConnectAPIService.getAlerts();
304 return getAlerts(strResponse);
305 }
306
307 public List<Alert> getUserAlerts(String strUid)
308 {
309
310 String strResponse = ParisConnectAPIService.getUserAlerts(strUid);
311 return getAlerts(strResponse);
312 }
313
314
315
316 public List<Newsletter> getNewsletters()
317 {
318
319 String strResponse = ParisConnectAPIService.getNewsletters();
320 return getNewsletter(strResponse);
321 }
322
323 public List<Newsletter> getUserNewsletters(String strUid,String strMail)
324 {
325
326 List<Newsletter> newsletterList=null;
327 String strResponse = ParisConnectAPIService.getUserNewsletters(strUid);
328 if(!RESPONSE_LIST_EMPTY.equals(strResponse))
329 {
330 newsletterList=getNewsletter(strResponse);
331
332 if(!CollectionUtils.isEmpty( newsletterList))
333 {
334 Newsletter newsletterToRemove=null;
335 for(Newsletter newsletter:newsletterList)
336 {
337
338 if(isNewsletterParisFr(newsletter.getCode( )) )
339 {
340 newsletterToRemove= newsletter ;
341 }
342
343 }
344 if(newsletterToRemove!=null)
345 {
346 newsletterList.remove( newsletterToRemove );
347 }
348 }
349 if(isSubscribeDoList( strMail ) )
350 {
351 Newsletter newsletter=new Newsletter( );
352 newsletter.setCode( getnewsletterParisFrCode( ) );
353 completeNewsletterInformations( newsletter );
354 newsletterList.add(newsletter);
355 }
356
357 }
358 return newsletterList;
359
360 }
361
362 public List<Message> getUserMessages(String strIdUSers)
363 {
364
365 List<Message> listMessage=new ArrayList<>();
366 String strResponse = ParisConnectAPIService.getUserMessages(strIdUSers);
367 if(!RESPONSE_ERROR_OBJECT_NULL.equals(strResponse) && !RESPONSE_LIST_EMPTY.equals(strResponse))
368 {
369 listMessage=getMessages(strResponse);
370 }
371
372 return listMessage;
373 }
374 public List<Message> getMessage(String strIdMessage)
375 {
376
377
378 List<Message> listMessage=new ArrayList<>();
379
380 String strResponse = ParisConnectAPIService.getMessage(strIdMessage);
381 if(!RESPONSE_ERROR_OBJECT_NULL.equals(strResponse) && !RESPONSE_LIST_EMPTY.equals(strResponse))
382 {
383 listMessage=getMessages(strResponse);
384
385 }
386
387 return listMessage;
388 }
389
390 public List<Message> getTicket( String strIdMessageParent )
391 {
392 List<Message> listMessage=new ArrayList<>();
393 String strResponse = ParisConnectAPIService.getTicket(strIdMessageParent);
394 if(!RESPONSE_ERROR_OBJECT_NULL.equals(strResponse) && !RESPONSE_LIST_EMPTY.equals(strResponse))
395 {
396 listMessage=getMessages(strResponse);
397
398 }
399
400 return listMessage;
401 }
402
403
404
405 public UserInformations getUser( String strUid )
406 {
407 return getUser(strUid, false);
408 }
409
410 public UserInformations getUser( String strUid , boolean bUseCache)
411 {
412
413
414 UserInformations userInformations=bUseCache?(UserInformations) _cacheUser.getFromCache(strUid ):null;
415 if(userInformations == null)
416 {
417 String strResponse = ParisConnectAPIService.getUser(strUid);
418 if ( !RESPONSE_ERROR_OBJECT_NULL.equals( strResponse ) )
419 {
420
421 userInformations =getUserInformations(strResponse);
422 if(userInformations!=null && bUseCache)
423 {
424 _cacheUser.putInCache(strUid, userInformations);
425 }
426 }
427 }
428
429 return userInformations;
430 }
431
432 public UserInformations getUserName( String strIdUSers)
433 {
434 return getUserName(strIdUSers,false);
435 }
436
437 public UserInformations getUserName( String strIdUSers, boolean bUseCache )
438 {
439
440 UserInformations userInformations=bUseCache?(UserInformations) _cacheUser.getFromCache(strIdUSers ):null;;
441 if(userInformations == null)
442 {
443 String strResponse = ParisConnectAPIService.getUserName(strIdUSers);
444 if ( !RESPONSE_ERROR_OBJECT_NULL.equals( strResponse ) )
445 {
446 if(!StringUtils.isEmpty(strResponse) && strResponse.length()>2)
447 {
448
449 strResponse=strResponse.substring(1, strResponse.length()-1);
450
451 }
452 userInformations =getUserInformations(strResponse);
453 if(userInformations!=null && bUseCache)
454 {
455 _cacheUserName.putInCache(strIdUSers, userInformations);
456 }
457 }
458 }
459
460 return userInformations;
461 }
462
463
464
465
466
467
468
469
470
471
472 public String getPcuidByEmail( String strMail )
473 {
474 return ParisConnectAPIService.getPcuidByEmail( strMail );
475 }
476
477
478
479
480
481
482
483 public String setAccountShadow( String strMail, String strIdEmail )
484 {
485 return ParisConnectAPIService.setAccountShadow( strMail, strIdEmail );
486 }
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501 public boolean sendMessageEmp(String strMail,String strMessage,String strBackUrl,String strCategory)
502 {
503 return ParisConnectAPIService.sendMessageEmp(strMail, strMessage,strBackUrl,strCategory);
504 }
505
506
507
508
509
510
511
512
513 public boolean sendUserResponseEmp(String strIdMessageParentEmp,String strMessage,String strPcuid)
514 {
515 boolean bResponseEmp = false;
516 String strResponse = ParisConnectAPIService.sendUserResponseEmp( strIdMessageParentEmp, strMessage, strPcuid );
517
518 if ( strResponse != null )
519 {
520 if ( RESPONSE_OK.toUpperCase( ).equals( strResponse ) )
521 {
522 bResponseEmp = true;
523 }
524 else
525 {
526 _logger.error( "error during sendUserResponseEmp : " + strResponse );
527 }
528 }
529
530 return bResponseEmp;
531
532 }
533
534
535
536
537
538
539
540
541
542 private boolean subscribeDoList( String strMail )
543 {
544 String strResponse = ParisConnectAPIService.subscribeUserDoList( strMail );
545
546 DoListResponse doListResponse=null;
547 if ( !StringUtils.isEmpty(strResponse) )
548 {
549
550 doListResponse = JsonUtil.getObjectResponse(strResponse, DoListResponse.class);
551 if(RESPONSE_SUCCESS.equals( doListResponse.getStatus( ) ) && RESPONSE_OK_1.equals(doListResponse.getData( )))
552 {
553
554 return true;
555
556 }
557 }
558
559 return false;
560 }
561
562
563
564
565
566
567
568
569
570 private boolean unSubscribeDoList( String strMail )
571 {
572 String strResponse = ParisConnectAPIService.unSubscribeUserDoList( strMail );
573
574 DoListResponse doListResponse=null;
575 if ( !StringUtils.isEmpty(strResponse) )
576 {
577
578 doListResponse = JsonUtil.getObjectResponse(strResponse, DoListResponse.class);
579 if(RESPONSE_SUCCESS.equals( doListResponse.getStatus( ) ) && RESPONSE_OK_1.equals(doListResponse.getData( )))
580 {
581
582 return true;
583
584 }
585 }
586
587 return false;
588 }
589
590
591
592
593
594
595
596
597 private boolean isSubscribeDoList( String strMail )
598 {
599 String strResponse = ParisConnectAPIService.isSubscribedDoList( strMail );
600
601 DoListResponse doListResponse=null;
602 if ( !StringUtils.isEmpty(strResponse) )
603 {
604
605 doListResponse = JsonUtil.getObjectResponse(strResponse, DoListResponse.class);
606 if(RESPONSE_SUCCESS.equals( doListResponse.getStatus( ) ) && RESPONSE_OK_0.equals(doListResponse.getData( )))
607 {
608
609 return true;
610
611 }
612 }
613
614 return false;
615 }
616
617
618
619
620
621
622
623
624
625
626
627 public String sendMessage( Message message)
628 {
629 return ParisConnectAPIService.sendMessage(message);
630 }
631
632 private void completeAlertInformations(Alert alert)
633 {
634 Alert alertDatabase=AlertHome.findByIdPc(alert.getIdPc());
635 if(alertDatabase!= null)
636 {
637 alert.setCategory(alertDatabase.getCategory());
638 }
639 }
640
641
642
643 private List<Alert> getAlerts(String strResponse)
644
645 {
646 List<Alert> listAlertPcResult=new ArrayList<>();
647 if ( !StringUtils.isEmpty(strResponse) )
648 {
649
650 listAlertPcResult = JsonUtil.getObjectResponseList( strResponse,
651 Alert.class);
652
653 for(Alert alert:listAlertPcResult )
654 {
655 completeAlertInformations(alert);
656 }
657 }
658 return listAlertPcResult;
659 }
660
661 private List<Newsletter> getNewsletter(String strResponse)
662 {
663
664 List<Newsletter> listNewsletter=new ArrayList<Newsletter>( );
665 if ( !StringUtils.isEmpty(strResponse) )
666 {
667
668 listNewsletter = JsonUtil.getObjectResponseList( strResponse,
669 Newsletter.class);
670
671 for(Newsletter newsletter:listNewsletter )
672 {
673 completeNewsletterInformations(newsletter);
674 }
675 }
676 return listNewsletter;
677 }
678
679 private List<Message> getMessages(String strResponse)
680 {
681
682 List<Message> listMessage=null;
683 if ( !StringUtils.isEmpty(strResponse) )
684 {
685
686 listMessage = JsonUtil.getObjectResponseList( strResponse,
687 Message.class);
688
689
690 }
691 if(listMessage!=null)
692 {
693
694 for(Message message:listMessage)
695 {
696 if(message.getDateEnvoi()!=null)
697 {
698
699 try {
700 java.util.Date date = _formatterDate.parse(message.getDateEnvoi());
701 Timestamp timeDateEnvoi = new Timestamp(date.getTime());
702 message.setDateModification(timeDateEnvoi);
703 }
704 catch (java.text.ParseException e) {
705
706 AppLogService.error("Api Message Paris connect erreur de format de date envoi ",e);
707
708 }
709
710
711 }
712 }
713 }
714
715 return listMessage;
716 }
717
718 private UserInformations getUserInformations(String strResponse)
719 {
720
721 UserInformations userInformations=null;
722 if ( !StringUtils.isEmpty(strResponse) )
723 {
724
725 userInformations = JsonUtil.getObjectResponse(strResponse, UserInformations.class);
726
727
728 }
729 return userInformations;
730
731 }
732
733
734
735
736
737
738 private void completeNewsletterInformations(Newsletter newsletter)
739 {
740 Newsletter newsletterDatabase=NewsletterHome.findByCode(newsletter.getCode());
741 if(newsletterDatabase!= null)
742 {
743 newsletter.setDescription(newsletterDatabase.getDescription());
744 newsletter.setTitle(newsletterDatabase.getTitle());
745 newsletter.setPicture(newsletterDatabase.getPicture());
746 newsletter.setLinkRequirement(newsletterDatabase.getLinkRequirement());
747 newsletter.setLinkLastNumber(newsletterDatabase.getLinkLastNumber());
748 newsletter.setEnabled(newsletterDatabase.getEnabled());
749 }
750 }
751
752 private boolean isNewsletterParisFr(String strCode)
753 {
754 String strNewsletterParisFrCode=AppPropertiesService.getProperty( Constants.PROPERTY_NEWSLETTER_PARIS_FR_CODE );
755
756 return strNewsletterParisFrCode!=null && strCode.startsWith(strNewsletterParisFrCode);
757 }
758 private String getnewsletterParisFrCode()
759 {
760 return AppPropertiesService.getProperty( Constants.PROPERTY_NEWSLETTER_PARIS_FR_CODE );
761
762
763 }
764
765 }