//# 3 errors, 356 messages
//#
/*
    //#abstractemailnotificationlistener.java:1:1: class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#abstractemailnotificationlistener.java:1:1: method: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init
 * Copyright (c) 2003-2006, Simon Brown
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in
 *     the documentation and/or other materials provided with the
 *     distribution.
 *
 *   - Neither the name of Pebble nor the names of its contributors may
 *     be used to endorse or promote products derived from this software
 *     without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package net.sourceforge.pebble.event.trackback;

import net.sourceforge.pebble.domain.Blog;
import net.sourceforge.pebble.domain.TrackBack;
import net.sourceforge.pebble.util.MailUtils;
import net.sourceforge.pebble.api.event.trackback.TrackBackEvent;

import java.text.SimpleDateFormat;
import java.util.Collection;

/**
 * Base class for listeners that send an e-mail notification when new
 * TrackBacks are added.
 *
 * @author Simon Brown
 */
public abstract class AbstractEmailNotificationListener extends TrackBackListenerSupport {
    //#abstractemailnotificationlistener.java:48: method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener()
    //#input(void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener()): this
    //#abstractemailnotificationlistener.java:48: end of method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener()

  /**
   * Called when a TrackBack has been added.
   *
   * @param event a TrackBackEvent instance
   */
  public void trackBackAdded(TrackBackEvent event) {
    sendNotification(event.getTrackBack());
    //#abstractemailnotificationlistener.java:56: method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.trackBackAdded(TrackBackEvent)
    //#abstractemailnotificationlistener.java:56: ?precondition failure
    //#    net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void trackBackAdded(TrackBackEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee: void net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification(TrackBack)
    //#    callee assertion: (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 60
    //#    VN: net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#    Expected: {790_784}
    //#    Bad: {0..790_783, 790_785..+Inf}
    //#    Attribs:  Int  Exp singleton  Bad overlaps +/-1000  Soft  Bad < Exp  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:56: ?precondition failure
    //#    net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification: this.__Tag in {net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener, net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener, net/sourceforge/pebble/event/trackback/EmailNotificationListener}
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void trackBackAdded(TrackBackEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: this.__Tag in {net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener, net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener, net/sourceforge/pebble/event/trackback/EmailNotificationListener}
    //#    callee: void net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification(TrackBack)
    //#    callee assertion: this.__Tag in {net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener, net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener, net/sourceforge/pebble/event/trackback/EmailNotificationListener}
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [8]
    //#    callee srcpos: 60
    //#    VN: this.__Tag
    //#    Expected: {819_456, 820_224, 820_736}
    //#    Bad: {0..790_783, 790_785..819_455, 819_457..820_223, 820_225..820_735, 820_737..+Inf}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp  Bad > Exp  Uncertain
    //#abstractemailnotificationlistener.java:56: ?precondition failure
    //#    net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification: trackBack.__Tag == net/sourceforge/pebble/domain/TrackBack
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void trackBackAdded(TrackBackEvent)
    //#    basic block: Entry_BB_1
    //#    assertion: net.sourceforge.pebble.api.event.trackback.TrackBackEvent:getSource(...)@72.__Tag == net/sourceforge/pebble/domain/TrackBack
    //#    callee: void net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener.sendNotification(TrackBack)
    //#    callee assertion: trackBack.__Tag == net/sourceforge/pebble/domain/TrackBack
    //#    callee file: abstractemailnotificationlistener.java
    //#    callee precondition index: [10]
    //#    callee srcpos: 60
    //#    VN: net.sourceforge.pebble.api.event.trackback.TrackBackEvent:getSource(...)@72.__Tag
    //#    Expected: {804_352}
    //#    Bad: {819_456, 820_224, 820_736}
    //#    Attribs:  Int  Exp singleton  Bad > Exp
    //#abstractemailnotificationlistener.java:56: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void trackBackAdded(TrackBackEvent)
    //#    suspicious precondition index: [8]
    //#input(void trackBackAdded(TrackBackEvent)): __Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener]
    //#input(void trackBackAdded(TrackBackEvent)): __Descendant_Table[net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener]
    //#input(void trackBackAdded(TrackBackEvent)): __Descendant_Table[net/sourceforge/pebble/event/trackback/EmailNotificationListener]
    //#input(void trackBackAdded(TrackBackEvent)): __Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void trackBackAdded(TrackBackEvent)): event
    //#input(void trackBackAdded(TrackBackEvent)): event.__Tag
    //#input(void trackBackAdded(TrackBackEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).__Tag
    //#input(void trackBackAdded(TrackBackEvent)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/event/trackback/TrackBackEvent.__Descendant_Table[net/sourceforge/pebble/api/event/trackback/TrackBackEvent]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/event/trackback/TrackBackEvent.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/event/trackback/TrackBackEvent.__Dispatch_Table.getTrackBack()Lnet/sourceforge/pebble/domain/TrackBack;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getId()J
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/State.PENDING
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogName()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getExcerpt()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getGuid()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getId()J
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isPending()Z
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void trackBackAdded(TrackBackEvent)): net/sourceforge/pebble/event/trackback/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void trackBackAdded(TrackBackEvent)): this
    //#input(void trackBackAdded(TrackBackEvent)): this.__Tag
    //#pre[1] (void trackBackAdded(TrackBackEvent)): event != null
    //#pre[2] (void trackBackAdded(TrackBackEvent)): event.__Tag == net/sourceforge/pebble/api/event/trackback/TrackBackEvent
    //#pre[8] (void trackBackAdded(TrackBackEvent)): this.__Tag in {net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener, net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener, net/sourceforge/pebble/event/trackback/EmailNotificationListener}
    //#pre[3] (void trackBackAdded(TrackBackEvent)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name != null
    //#pre[4] (void trackBackAdded(TrackBackEvent)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[5] (void trackBackAdded(TrackBackEvent)): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[6] (void trackBackAdded(TrackBackEvent)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.__Tag@56 == net/sourceforge/pebble/domain/BlogEntry
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.blog.__Tag@56 == net/sourceforge/pebble/domain/Blog
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.blog.permalinkProvider.__Tag@56 == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.blog.permalinkProvider@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.blog.properties@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry.blog@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).blogEntry@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).date@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).state.__Tag@56 == net/sourceforge/pebble/domain/State
    //#presumption(void trackBackAdded(TrackBackEvent)): getTrackBack(...).state@56 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): net.sourceforge.pebble.api.event.trackback.TrackBackEvent:getSource(...)@72 != null
    //#presumption(void trackBackAdded(TrackBackEvent)): net.sourceforge.pebble.api.event.trackback.TrackBackEvent:getSource(...)@72.__Tag != net/sourceforge/pebble/domain/BlogManager
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getBlog
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getTimeZone
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.text.SimpleDateFormat:setTimeZone
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getState
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getTitle
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getUrl
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getBlogName
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getDate
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.text.SimpleDateFormat:format
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getExcerpt
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getPermalink
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:isPending
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getGuid
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getUser
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:createSession
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.util.MailUtils:sendMail
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.Exception:printStackTrace
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:net.sourceforge.pebble.api.event.trackback.TrackBackEvent:getSource
    //#unanalyzed(void trackBackAdded(TrackBackEvent)): Effects-of-calling:getPermalinkProvider
  }
    //#abstractemailnotificationlistener.java:57: end of method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.trackBackAdded(TrackBackEvent)

  private void sendNotification(TrackBack trackBack) {
    Blog blog = trackBack.getBlogEntry().getBlog();
    //#abstractemailnotificationlistener.java:60: method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.sendNotification(TrackBack)
    //#abstractemailnotificationlistener.java:60: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void sendNotification(TrackBack)
    //#    suspicious precondition index: [8]
    //#input(void sendNotification(TrackBack)): __Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener]
    //#input(void sendNotification(TrackBack)): __Descendant_Table[net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener]
    //#input(void sendNotification(TrackBack)): __Descendant_Table[net/sourceforge/pebble/event/trackback/EmailNotificationListener]
    //#input(void sendNotification(TrackBack)): __Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void sendNotification(TrackBack)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).__Tag
    //#input(void sendNotification(TrackBack)): net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/Configuration.__Descendant_Table[net/sourceforge/pebble/Configuration]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/Configuration.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getSecurityRealm()Lnet/sourceforge/pebble/security/SecurityRealm;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/Configuration.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/Configuration.__Dispatch_Table.isVirtualHostingEnabled()Z
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[net/sourceforge/pebble/api/permalink/PermalinkProvider]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/api/permalink/PermalinkProvider.__Dispatch_Table.getPermalink(Lnet/sourceforge/pebble/domain/BlogEntry;)Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/AbstractBlog]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[net/sourceforge/pebble/domain/MultiBlog]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/AbstractBlog.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/AbstractBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[net/sourceforge/pebble/domain/Blog]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmail()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getEmailAddresses()Ljava/util/Collection;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getId()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getPermalinkProvider()Lnet/sourceforge/pebble/api/permalink/PermalinkProvider;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZone()Ljava/util/TimeZone;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Blog.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getBlog()Lnet/sourceforge/pebble/domain/Blog;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getLocalPermalink()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogEntry.__Dispatch_Table.getUser()Lnet/sourceforge/pebble/security/PebbleUserDetails;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[net/sourceforge/pebble/domain/BlogManager]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.__Dispatch_Table.isMultiBlog()Z
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.instance
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.instance.__Tag
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/BlogManager.instance.multiBlog
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Comment.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getId()J
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Comment.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/MultiBlog.__Dispatch_Table.getTimeZoneId()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/BlogEntry]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/PageBasedContent]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[net/sourceforge/pebble/domain/StaticPage]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/PageBasedContent.log
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Comment]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/Response]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getId()J
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/Response.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/State.PENDING
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/State.__Descendant_Table[net/sourceforge/pebble/domain/State]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/State.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/State.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/State.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/StaticPage.__Dispatch_Table.getAuthor()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[net/sourceforge/pebble/domain/TrackBack]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Descendant_Table[others]
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogEntry()Lnet/sourceforge/pebble/domain/BlogEntry;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getBlogName()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getDate()Ljava/util/Date;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getExcerpt()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getGuid()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getId()J
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getPermalink()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getState()Lnet/sourceforge/pebble/domain/State;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.getUrl()Ljava/lang/String;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/domain/TrackBack.__Dispatch_Table.isPending()Z
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void sendNotification(TrackBack)): net/sourceforge/pebble/event/trackback/EmailNotificationListener.__Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#input(void sendNotification(TrackBack)): this
    //#input(void sendNotification(TrackBack)): this.__Tag
    //#input(void sendNotification(TrackBack)): trackBack
    //#input(void sendNotification(TrackBack)): trackBack.__Tag
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.__Tag
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog.__Tag
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog.id
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog.permalinkProvider
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog.permalinkProvider.__Tag
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.blog.properties
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.permalink
    //#input(void sendNotification(TrackBack)): trackBack.blogEntry.title
    //#input(void sendNotification(TrackBack)): trackBack.blogName
    //#input(void sendNotification(TrackBack)): trackBack.date
    //#input(void sendNotification(TrackBack)): trackBack.excerpt
    //#input(void sendNotification(TrackBack)): trackBack.state
    //#input(void sendNotification(TrackBack)): trackBack.state.__Tag
    //#input(void sendNotification(TrackBack)): trackBack.state.name
    //#input(void sendNotification(TrackBack)): trackBack.title
    //#input(void sendNotification(TrackBack)): trackBack.url
    //#output(void sendNotification(TrackBack)): trackBack.blogEntry.permalink
    //#output(void sendNotification(TrackBack)): trackBack.blogEntry.user
    //#pre[8] (void sendNotification(TrackBack)): this.__Tag in {net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener, net/sourceforge/pebble/event/trackback/EmailAuthorNotificationListener, net/sourceforge/pebble/event/trackback/EmailNotificationListener}
    //#pre[9] (void sendNotification(TrackBack)): trackBack != null
    //#pre[10] (void sendNotification(TrackBack)): trackBack.__Tag == net/sourceforge/pebble/domain/TrackBack
    //#pre[11] (void sendNotification(TrackBack)): trackBack.blogEntry != null
    //#pre[14] (void sendNotification(TrackBack)): trackBack.blogEntry.blog != null
    //#pre[15] (void sendNotification(TrackBack)): trackBack.blogEntry.blog.__Tag == net/sourceforge/pebble/domain/Blog
    //#pre[19] (void sendNotification(TrackBack)): trackBack.blogEntry.blog.properties != null
    //#pre[20] (void sendNotification(TrackBack)): init'ed(trackBack.blogEntry.title)
    //#pre[21] (void sendNotification(TrackBack)): init'ed(trackBack.blogName)
    //#pre[23] (void sendNotification(TrackBack)): init'ed(trackBack.excerpt)
    //#pre[24] (void sendNotification(TrackBack)): trackBack.state != null
    //#pre[25] (void sendNotification(TrackBack)): trackBack.state.__Tag == net/sourceforge/pebble/domain/State
    //#pre[26] (void sendNotification(TrackBack)): init'ed(trackBack.state.name)
    //#pre[27] (void sendNotification(TrackBack)): init'ed(trackBack.title)
    //#pre[1] (void sendNotification(TrackBack)): (soft) net.sourceforge.pebble.domain.State__static_init.new State(State__static_init#3).name != null
    //#pre[2] (void sendNotification(TrackBack)): (soft) net/sourceforge/pebble/domain/BlogManager.instance != null
    //#pre[3] (void sendNotification(TrackBack)): (soft) net/sourceforge/pebble/domain/BlogManager.instance.__Tag == net/sourceforge/pebble/domain/BlogManager
    //#pre[4] (void sendNotification(TrackBack)): (soft) init'ed(net/sourceforge/pebble/domain/BlogManager.instance.multiBlog)
    //#pre[5] (void sendNotification(TrackBack)): (soft) init'ed(trackBack.blogEntry.permalink)
    //#pre[12] (void sendNotification(TrackBack)): (soft) trackBack.blogEntry.__Tag == net/sourceforge/pebble/domain/BlogEntry
    //#pre[16] (void sendNotification(TrackBack)): (soft) init'ed(trackBack.blogEntry.blog.id)
    //#pre[17] (void sendNotification(TrackBack)): (soft) trackBack.blogEntry.blog.permalinkProvider != null
    //#pre[18] (void sendNotification(TrackBack)): (soft) trackBack.blogEntry.blog.permalinkProvider.__Tag == net/sourceforge/pebble/api/permalink/PermalinkProvider
    //#pre[22] (void sendNotification(TrackBack)): (soft) trackBack.date != null
    //#pre[28] (void sendNotification(TrackBack)): (soft) init'ed(trackBack.url)
    //#post(void sendNotification(TrackBack)): init'ed(trackBack.blogEntry.permalink)
    //#post(void sendNotification(TrackBack)): possibly_updated(trackBack.blogEntry.user)
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getBlogEntry
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getBlog
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getState
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getUrl
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getEmailAddresses
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.Collection:addAll
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getUser
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:net.sourceforge.pebble.security.PebbleUserDetails:getEmailAddress
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.Collection:add
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.Properties:getProperty
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.TimeZone:getTimeZone
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getLocalPermalink
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getInstance
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:net.sourceforge.pebble.PebbleContext:getConfiguration
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:net.sourceforge.pebble.domain.BlogEntry:getId
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:java.util.Arrays:asList
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getSecurityRealm
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:net.sourceforge.pebble.security.SecurityRealm:getUser
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getPermalinkProvider
    //#unanalyzed(void sendNotification(TrackBack)): Effects-of-calling:getPermalink

    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
    sdf.setTimeZone(blog.getTimeZone());

    String subject = "[TrackBack-" + trackBack.getState().getName() + "] " + trackBack.getTitle();

    String message = "TrackBack from <a href=\"" + trackBack.getUrl() + "\">" + trackBack.getBlogName() + "</a> on " + sdf.format(trackBack.getDate());
    message += " in response to " + trackBack.getBlogEntry().getTitle();
    message += "\n\n<br><br>";
    message += trackBack.getExcerpt();
    message += "\n\n<br><br>";
    message += "<a href=\"" + trackBack.getPermalink() + "\">Permalink</a>";

    if (trackBack.isPending()) {
      message += " | ";
      message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + trackBack.getGuid() + "&submit=Approve" + "\">Approve</a>";
      message += " | ";
      message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + trackBack.getGuid() + "&submit=Reject" + "\">Reject</a>";
    }

    message += " | ";
    message += "<a href=\"" + blog.getUrl() + "manageResponses.secureaction?response=" + trackBack.getGuid() + "&submit=Remove" + "\">Remove</a>";

    Collection to = getEmailAddresses(trackBack);
    //#abstractemailnotificationlistener.java:84: Warning: method not available
    //#    -- call on Collection getEmailAddresses(TrackBack)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void sendNotification(TrackBack)
    //#    unanalyzed callee: Collection getEmailAddresses(TrackBack)

    try {
      MailUtils.sendMail(MailUtils.createSession(), blog, to, subject, message);
    //#abstractemailnotificationlistener.java:87: Warning: method not available
    //#    -- call on Session net.sourceforge.pebble.util.MailUtils:createSession()
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void sendNotification(TrackBack)
    //#    unanalyzed callee: Session net.sourceforge.pebble.util.MailUtils:createSession()
    //#abstractemailnotificationlistener.java:87: Warning: method not available
    //#    -- call on void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, Collection, String, String)
    //#    severity: INFORMATIONAL
    //#    class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
    //#    method: void sendNotification(TrackBack)
    //#    unanalyzed callee: void net.sourceforge.pebble.util.MailUtils:sendMail(Session, Blog, Collection, String, String)
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
    //#abstractemailnotificationlistener.java:91: end of method: void net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.sendNotification(TrackBack)

  /**
   * Returns the collection of recipients.
   *
   * @param trackBack   the TrackBack from the event
   * @return  a Collection of e-mail addresses (Strings)
   */
  protected abstract Collection getEmailAddresses(TrackBack trackBack);

}
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener]
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection;
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendNotification(Lnet/sourceforge/pebble/domain/TrackBack;)V
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackAdded(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackApproved(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackRejected(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackRemoved(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/api/event/trackback/TrackBackListener.__Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener]
    //#output(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/event/trackback/TrackBackListenerSupport.__Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener]
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/api/event/trackback/TrackBackListener.__Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): net/sourceforge/pebble/event/trackback/TrackBackListenerSupport.__Descendant_Table[net/sourceforge/pebble/event/trackback/AbstractEmailNotificationListener] == &__Dispatch_Table
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.getEmailAddresses(Lnet/sourceforge/pebble/domain/TrackBack;)Ljava/util/Collection; == &getEmailAddresses
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.sendNotification(Lnet/sourceforge/pebble/domain/TrackBack;)V == &sendNotification
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackAdded(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V == &trackBackAdded
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackApproved(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V == &net/sourceforge/pebble/event/trackback/TrackBackListenerSupport.trackBackApproved
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackRejected(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V == &net/sourceforge/pebble/event/trackback/TrackBackListenerSupport.trackBackRejected
    //#post(net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init): __Dispatch_Table.trackBackRemoved(Lnet/sourceforge/pebble/api/event/trackback/TrackBackEvent;)V == &net/sourceforge/pebble/event/trackback/TrackBackListenerSupport.trackBackRemoved
    //#abstractemailnotificationlistener.java:: end of method: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener.net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener__static_init
    //#abstractemailnotificationlistener.java:: end of class: net.sourceforge.pebble.event.trackback.AbstractEmailNotificationListener
