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    }