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.portal.service.mail;
35  
36  import fr.paris.lutece.portal.service.daemon.AppDaemonService;
37  import fr.paris.lutece.portal.service.daemon.Daemon;
38  import fr.paris.lutece.portal.service.datastore.DatastoreService;
39  import fr.paris.lutece.portal.service.portal.PortalService;
40  import fr.paris.lutece.portal.service.spring.SpringContextService;
41  import fr.paris.lutece.portal.service.util.AppPathService;
42  import fr.paris.lutece.portal.service.util.AppPropertiesService;
43  import fr.paris.lutece.util.mail.FileAttachment;
44  import fr.paris.lutece.util.mail.UrlAttachment;
45  
46  import java.util.List;
47  
48  
49  /**
50   * Application Mail Service
51   */
52  public final class MailService
53  {
54      private static final String KEY_NO_REPLY_EMAIL = "portal.site.site_property.noreply_email";
55      private static final String PROPERTY_MAIL_NOREPLY_EMAIL = "mail.noreply.email";
56      private static final String BEAN_MAIL_QUEUE = "mailQueue";
57  
58      /** Creates a new instance of AppMailService */
59      private MailService(  )
60      {
61      }
62  
63      /**
64       * Send a message asynchronously. The message is queued until a daemon
65       * thread send all awaiting messages
66       * @param strRecipient The recipient email.
67       * @param strSenderName The sender name.
68       * @param strSenderEmail The sender email address.
69       * @param strSubject The message subject.
70       * @param strMessage The message.
71       * @deprecated Use
72       *             {@link #sendMailText(String strRecipient, String strSenderName, String strSenderEmail, String strSubject, String strMessage)}
73       *             instead
74       */
75      @Deprecated
76      public static void sendMail( String strRecipient, String strSenderName, String strSenderEmail, String strSubject,
77          String strMessage )
78      {
79          sendMailText( strRecipient, strSenderName, strSenderEmail, strSubject, strMessage );
80      }
81  
82      /**
83       * Send a HTML message asynchronously. The message is queued until a daemon
84       * thread send all awaiting messages
85       *
86       * @param strRecipientsTo The list of the main recipients email.Every
87       *            recipient
88       *            must be separated by the mail separator define in
89       *            config.properties
90       * @param strSenderName The sender name.
91       * @param strSenderEmail The sender email address.
92       * @param strSubject The message subject.
93       * @param strMessage The message.
94       */
95      public static void sendMailHtml( String strRecipientsTo, String strSenderName, String strSenderEmail,
96          String strSubject, String strMessage )
97      {
98          sendMailHtml( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage );
99      }
100 
101     /**
102      * Send a HTML message asynchronously. The message is queued until a daemon
103      * thread send all awaiting messages
104      *
105      * @param strRecipientsTo The list of the main recipients email.Every
106      *            recipient
107      *            must be separated by the mail separator defined in
108      *            config.properties
109      * @param strRecipientsCc The recipients list of the carbon copies .
110      * @param strRecipientsBcc The recipients list of the blind carbon copies .
111      * @param strSenderName The sender name.
112      * @param strSenderEmail The sender email address.
113      * @param strSubject The message subject.
114      * @param strMessage The message.
115      */
116     public static void sendMailHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
117         String strSenderName, String strSenderEmail, String strSubject, String strMessage )
118     {
119         sendMailHtml( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject,
120             strMessage, false );
121     }
122 
123     /**
124      * Send a HTML message asynchronously. The message is queued until a daemon
125      * thread send all awaiting messages
126      *
127      * @param strRecipientsTo The list of the main recipients email.Every
128      *            recipient
129      *            must be separated by the mail separator defined in
130      *            config.properties
131      * @param strRecipientsCc The recipients list of the carbon copies .
132      * @param strRecipientsBcc The recipients list of the blind carbon copies .
133      * @param strSenderName The sender name.
134      * @param strSenderEmail The sender email address.
135      * @param strSubject The message subject.
136      * @param strMessage The message.
137      * @param bUniqueRecipientTo true if the mail must be send unitarily for
138      *            each recipient
139      */
140     public static void sendMailHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
141         String strSenderName, String strSenderEmail, String strSubject, String strMessage, boolean bUniqueRecipientTo )
142     {
143         MailItem item = new MailItem(  );
144         item.setRecipientsTo( strRecipientsTo );
145         item.setRecipientsCc( strRecipientsCc );
146         item.setRecipientsBcc( strRecipientsBcc );
147         item.setSenderName( strSenderName );
148         item.setSenderEmail( strSenderEmail );
149         item.setSubject( strSubject );
150         item.setMessage( strMessage );
151         item.setFormat( MailItem.FORMAT_HTML );
152         item.setUniqueRecipientTo( bUniqueRecipientTo );
153 
154         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
155         queue.send( item );
156     }
157 
158     /**
159      * Send a HTML message asynchronously with the attachments associated to
160      * the message . The message is queued until a daemon
161      * thread send all awaiting messages
162      *
163      * @param strRecipientsTo The list of the main recipients email.Every
164      *            recipient
165      *            must be separated by the mail separator defined in
166      *            config.properties
167      * @param strSenderName The sender name.
168      * @param strSenderEmail The sender email address.
169      * @param strSubject The message subject.
170      * @param strMessage The message.
171      * @param urlsAttachement The List of UrlAttachement Object, containing the
172      *            URL of attachments associated with their content-location.
173      */
174     public static void sendMailMultipartHtml( String strRecipientsTo, String strSenderName, String strSenderEmail,
175         String strSubject, String strMessage, List<UrlAttachment> urlsAttachement )
176     {
177         sendMailMultipartHtml( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage,
178             urlsAttachement, null );
179     }
180 
181     /**
182      * Send a HTML message asynchronously with the attachments associated to
183      * the message and attached files . The message is queued until a daemon
184      * thread send all awaiting messages
185      *
186      * @param strRecipientsTo The list of the main recipients email.Every
187      *            recipient
188      *            must be separated by the mail separator defined in
189      *            config.properties
190      * @param strRecipientsCc The recipients list of the carbon copies .
191      * @param strRecipientsBcc The recipients list of the blind carbon copies .
192      * @param strSenderName The sender name.
193      * @param strSenderEmail The sender email address.
194      * @param strSubject The message subject.
195      * @param strMessage The message.
196      * @param urlsAttachement The List of UrlAttachement Object, containing the
197      *            URL of attachments associated with their content-location
198      * @param filesAttachement The list of attached files.
199      */
200     public static void sendMailMultipartHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
201         String strSenderName, String strSenderEmail, String strSubject, String strMessage,
202         List<UrlAttachment> urlsAttachement, List<FileAttachment> filesAttachement )
203     {
204         sendMailMultipartHtml( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail,
205             strSubject, strMessage, urlsAttachement, filesAttachement, false );
206     }
207 
208     /**
209      * Send a HTML message asynchronously with the attachments associated to
210      * the message and attached files . The message is queued until a daemon
211      * thread send all awaiting messages
212      *
213      * @param strRecipientsTo The list of the main recipients email.Every
214      *            recipient
215      *            must be separated by the mail separator defined in
216      *            config.properties
217      * @param strRecipientsCc The recipients list of the carbon copies .
218      * @param strRecipientsBcc The recipients list of the blind carbon copies .
219      * @param strSenderName The sender name.
220      * @param strSenderEmail The sender email address.
221      * @param strSubject The message subject.
222      * @param strMessage The message.
223      * @param urlsAttachement The List of UrlAttachement Object, containing the
224      *            URL of attachments associated with their content-location
225      * @param filesAttachement The list of attached files.
226      * @param bUniqueRecipientTo true if the mail must be send unitarily for
227      *            each recipient
228      */
229     public static void sendMailMultipartHtml( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
230         String strSenderName, String strSenderEmail, String strSubject, String strMessage,
231         List<UrlAttachment> urlsAttachement, List<FileAttachment> filesAttachement, boolean bUniqueRecipientTo )
232     {
233         MailItem item = new MailItem(  );
234         item.setRecipientsTo( strRecipientsTo );
235         item.setRecipientsCc( strRecipientsCc );
236         item.setRecipientsBcc( strRecipientsBcc );
237         item.setSenderName( strSenderName );
238         item.setSenderEmail( strSenderEmail );
239         item.setSubject( strSubject );
240         item.setMessage( strMessage );
241         item.setFormat( MailItem.FORMAT_MULTIPART_HTML );
242         item.setUrlsAttachement( urlsAttachement );
243         item.setFilesAttachement( filesAttachement );
244         item.setUniqueRecipientTo( bUniqueRecipientTo );
245 
246         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
247         queue.send( item );
248     }
249 
250     /**
251      * Send a calendar message asynchronously. The message is queued until a
252      * daemon thread send all awaiting messages
253      * @param strRecipientsTo The list of the main recipients email. Every
254      *            recipient must be separated by the mail separator defined in
255      *            config.properties
256      * @param strSenderName The sender name.
257      * @param strSenderEmail The sender email address.
258      * @param strSubject The message subject.
259      * @param strMessage The message.
260      * @param strCalendarMessage The calendar message
261      * @param bCreateEvent True to create the calendar event, false to remove it
262      */
263     public static void sendMailCalendar( String strRecipientsTo, String strSenderName, String strSenderEmail,
264         String strSubject, String strMessage, String strCalendarMessage, boolean bCreateEvent )
265     {
266         sendMailCalendar( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage,
267             strCalendarMessage, bCreateEvent );
268     }
269 
270     /**
271      * Send a calendar message asynchronously. The message is queued until a
272      * daemon thread send all awaiting messages
273      * @param strRecipientsTo The list of the main recipients email. Every
274      *            recipient must be separated by the mail separator defined in
275      *            config.properties
276      * @param strRecipientsCc The recipients list of the carbon copies .
277      * @param strRecipientsBcc The recipients list of the blind carbon copies .
278      * @param strSenderName The sender name.
279      * @param strSenderEmail The sender email address.
280      * @param strSubject The message subject.
281      * @param strMessage The message.
282      * @param strCalendarMessage The calendar message
283      * @param bCreateEvent True to create the calendar event, false to remove it
284      */
285     public static void sendMailCalendar( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
286         String strSenderName, String strSenderEmail, String strSubject, String strMessage, String strCalendarMessage,
287         boolean bCreateEvent )
288     {
289         sendMailCalendar( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail,
290             strSubject, strMessage, strCalendarMessage, bCreateEvent, false );
291     }
292 
293     /**
294      * Send a calendar message asynchronously. The message is queued until a
295      * daemon thread send all awaiting messages
296      * @param strRecipientsTo The list of the main recipients email. Every
297      *            recipient must be separated by the mail separator defined in
298      *            config.properties
299      * @param strRecipientsCc The recipients list of the carbon copies .
300      * @param strRecipientsBcc The recipients list of the blind carbon copies .
301      * @param strSenderName The sender name.
302      * @param strSenderEmail The sender email address.
303      * @param strSubject The message subject.
304      * @param strMessage The message.
305      * @param strCalendarMessage The calendar message
306      * @param bCreateEvent True to create the calendar event, false to remove it
307      * @param bUniqueRecipientTo true if the mail must be send unitarily for
308      *            each recipient
309      */
310     public static void sendMailCalendar( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
311         String strSenderName, String strSenderEmail, String strSubject, String strMessage, String strCalendarMessage,
312         boolean bCreateEvent, boolean bUniqueRecipientTo )
313     {
314         MailItem item = new MailItem(  );
315         item.setRecipientsTo( strRecipientsTo );
316         item.setRecipientsCc( strRecipientsCc );
317         item.setRecipientsBcc( strRecipientsBcc );
318         item.setSenderName( strSenderName );
319         item.setSenderEmail( strSenderEmail );
320         item.setSubject( strSubject );
321         item.setMessage( strMessage );
322         item.setCalendarMessage( strCalendarMessage );
323         item.setCreateEvent( bCreateEvent );
324         item.setFormat( MailItem.FORMAT_CALENDAR );
325         item.setUniqueRecipientTo( bUniqueRecipientTo );
326 
327         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
328         queue.send( item );
329     }
330 
331     /**
332      * Send a text message asynchronously. The message is queued until a daemon
333      * thread send all awaiting messages
334      * @param strRecipientsTo The list of the main recipients email. Every
335      *            recipient must be separated by the mail separator defined in
336      *            config.properties
337      * @param strSenderName The sender name.
338      * @param strSenderEmail The sender email address.
339      * @param strSubject The message subject.
340      * @param strMessage The message.
341      */
342     public static void sendMailText( String strRecipientsTo, String strSenderName, String strSenderEmail,
343         String strSubject, String strMessage )
344     {
345         sendMailText( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage );
346     }
347 
348     /**
349      * Send a text message asynchronously. The message is queued until a daemon
350      * thread send all awaiting messages
351      * @param strRecipientsTo The list of the main recipients email. Every
352      *            recipient must be separated by the mail separator defined in
353      *            config.properties
354      * @param strRecipientsCc The recipients list of the carbon copies .
355      * @param strRecipientsBcc The recipients list of the blind carbon copies .
356      * @param strSenderName The sender name.
357      * @param strSenderEmail The sender email address.
358      * @param strSubject The message subject.
359      * @param strMessage The message.
360      */
361     public static void sendMailText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
362         String strSenderName, String strSenderEmail, String strSubject, String strMessage )
363     {
364         sendMailText( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail, strSubject,
365             strMessage, false );
366     }
367 
368     /**
369      * Send a text message asynchronously. The message is queued until a daemon
370      * thread send all awaiting messages
371      * @param strRecipientsTo The list of the main recipients email. Every
372      *            recipient must be separated by the mail separator defined in
373      *            config.properties
374      * @param strRecipientsCc The recipients list of the carbon copies .
375      * @param strRecipientsBcc The recipients list of the blind carbon copies .
376      * @param strSenderName The sender name.
377      * @param strSenderEmail The sender email address.
378      * @param strSubject The message subject.
379      * @param strMessage The message.
380      * @param bUniqueRecipientTo true if the mail must be send unitarily for
381      *            each recipient
382      */
383     public static void sendMailText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
384         String strSenderName, String strSenderEmail, String strSubject, String strMessage, boolean bUniqueRecipientTo )
385     {
386         MailItem item = new MailItem(  );
387         item.setRecipientsTo( strRecipientsTo );
388         item.setRecipientsCc( strRecipientsCc );
389         item.setRecipientsBcc( strRecipientsBcc );
390         item.setSenderName( strSenderName );
391         item.setSenderEmail( strSenderEmail );
392         item.setSubject( strSubject );
393         item.setMessage( strMessage );
394         item.setFormat( MailItem.FORMAT_TEXT );
395         item.setUniqueRecipientTo( bUniqueRecipientTo );
396 
397         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
398         queue.send( item );
399     }
400 
401     /**
402      * Send a text message asynchronously with attached files. The message is
403      * queued until a daemon
404      * thread send all awaiting messages
405      *
406      * @param strRecipientsTo The list of the main recipients email.Every
407      *            recipient
408      *            must be separated by the mail separator defined in
409      *            config.properties
410      * @param strSenderName The sender name.
411      * @param strSenderEmail The sender email address.
412      * @param strSubject The message subject.
413      * @param strMessage The message.
414      * @param filesAttachement The list of attached files.
415      */
416     public static void sendMailMultipartText( String strRecipientsTo, String strSenderName, String strSenderEmail,
417         String strSubject, String strMessage, List<FileAttachment> filesAttachement )
418     {
419         sendMailMultipartText( strRecipientsTo, null, null, strSenderName, strSenderEmail, strSubject, strMessage,
420             filesAttachement );
421     }
422 
423     /**
424      * Send a text message asynchronously with attached files. The message is
425      * queued until a daemon
426      * thread send all awaiting messages
427      * @param strRecipientsTo The list of the main recipients email.Every
428      *            recipient
429      *            must be separated by the mail separator defined in
430      *            config.properties
431      * @param strRecipientsCc The recipients list of the carbon copies .
432      * @param strRecipientsBcc The recipients list of the blind carbon copies .
433      * @param strSenderName The sender name.
434      * @param strSenderEmail The sender email address.
435      * @param strSubject The message subject.
436      * @param strMessage The message.
437      * @param filesAttachement The list of attached files.
438      */
439     public static void sendMailMultipartText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
440         String strSenderName, String strSenderEmail, String strSubject, String strMessage,
441         List<FileAttachment> filesAttachement )
442     {
443         sendMailMultipartText( strRecipientsTo, strRecipientsCc, strRecipientsBcc, strSenderName, strSenderEmail,
444             strSubject, strMessage, filesAttachement, false );
445     }
446 
447     /**
448      * Send a text message asynchronously with attached files. The message is
449      * queued until a daemon
450      * thread send all awaiting messages
451      * @param strRecipientsTo The list of the main recipients email.Every
452      *            recipient
453      *            must be separated by the mail separator defined in
454      *            config.properties
455      * @param strRecipientsCc The recipients list of the carbon copies .
456      * @param strRecipientsBcc The recipients list of the blind carbon copies .
457      * @param strSenderName The sender name.
458      * @param strSenderEmail The sender email address.
459      * @param strSubject The message subject.
460      * @param strMessage The message.
461      * @param filesAttachement The list of attached files.
462      * @param bUniqueRecipientTo true if the mail must be send unitarily for
463      *            each recipient
464      */
465     public static void sendMailMultipartText( String strRecipientsTo, String strRecipientsCc, String strRecipientsBcc,
466         String strSenderName, String strSenderEmail, String strSubject, String strMessage,
467         List<FileAttachment> filesAttachement, boolean bUniqueRecipientTo )
468     {
469         MailItem item = new MailItem(  );
470         item.setRecipientsTo( strRecipientsTo );
471         item.setRecipientsCc( strRecipientsCc );
472         item.setRecipientsBcc( strRecipientsBcc );
473         item.setSenderName( strSenderName );
474         item.setSenderEmail( strSenderEmail );
475         item.setSubject( strSubject );
476         item.setMessage( strMessage );
477         item.setFormat( MailItem.FORMAT_MULTIPART_TEXT );
478         item.setFilesAttachement( filesAttachement );
479         item.setUniqueRecipientTo( bUniqueRecipientTo );
480 
481         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
482         queue.send( item );
483     }
484 
485     /**
486      * Shutdown the service
487      */
488     public static void shutdown(  )
489     {
490         // if there is mails that have not been sent call the daemon to flush the list
491         Daemon daemon = AppDaemonService.getDaemon( "mailSender" );
492 
493         if ( daemon != null )
494         {
495             daemon.run(  );
496         }
497     }
498 
499     /**
500      * Returns a no reply email address defined in config.properties
501      * @return A no reply email
502      */
503     public static String getNoReplyEmail(  )
504     {
505         String strDefault = AppPropertiesService.getProperty( PROPERTY_MAIL_NOREPLY_EMAIL );
506 
507         return DatastoreService.getDataValue( KEY_NO_REPLY_EMAIL, strDefault );
508     }
509 
510     /**
511      * Returns the mail queue
512      * @return the mail queue
513      */
514     public static IMailQueue getQueue(  )
515     {
516         IMailQueue queue = (IMailQueue) SpringContextService.getBean( BEAN_MAIL_QUEUE );
517 
518         return queue;
519     }
520 
521     /**
522      * Extract a collection of elements to be attached to a mail from an HTML
523      * string.
524      *
525      * The collection contains the Url used for created DataHandler for each url
526      * associated with
527      * an HTML tag img, script or link. Those urls must start with the url
528      * strBaseUrl.
529      *
530      * @param strHtml The HTML code.
531      * @param strBaseUrl The base url, can be null in order to extract all urls.
532      * @param useAbsoluteUrl Determine if we use absolute or relative url for
533      *            attachement content-location
534      * @return a collection of UrlAttachment Object for created DataHandler
535      *         associated with attachment urls.
536      */
537     public static List<UrlAttachment> getUrlAttachmentList( String strHtml, String strBaseUrl, boolean useAbsoluteUrl )
538     {
539         return MailUtil.getUrlAttachmentList( strHtml, strBaseUrl, useAbsoluteUrl );
540     }
541 
542     /**
543      * Return a String that contains a list of recipients separated with mail
544      * separator
545      * @param listRecipients a list of string recipients
546      * @return a String that contains a list of recipients separated with mail
547      *         separator
548      */
549     public static String getStrRecipients( List<String> listRecipients )
550     {
551         return MailUtil.getStrRecipients( listRecipients );
552     }
553 
554     /**
555      * Get a string that contains an html link to the site back office or front
556      * office.
557      * @param strBaseUrl The base url of the site
558      * @param linkToFrontOffice True if the link should be directed to the front
559      *            office, false if it should be directed to the back office.
560      * @return A string containing an html link.
561      */
562     public static String getSiteLink( String strBaseUrl, boolean linkToFrontOffice )
563     {
564         StringBuilder sb = new StringBuilder(  );
565         String strSiteName = PortalService.getSiteName(  );
566 
567         if ( strSiteName != null )
568         {
569             sb.append( "<a title=\"" );
570             sb.append( strSiteName );
571             sb.append( "\" href=\"" );
572             sb.append( strBaseUrl );
573 
574             String strUrl;
575 
576             if ( linkToFrontOffice )
577             {
578                 strUrl = AppPathService.getPortalUrl(  );
579             }
580             else
581             {
582                 strUrl = AppPathService.getAdminMenuUrl(  );
583             }
584 
585             if ( strUrl != null )
586             {
587                 sb.append( strUrl );
588             }
589 
590             sb.append( "\" >" );
591             sb.append( strSiteName );
592             sb.append( "</a>" );
593         }
594 
595         return sb.toString(  );
596     }
597 }