
package uk.co.wingpath.util;

import java.util.*;
import org.apache.log4j.*;

/**
* This class implements the {@link Reporter} interface by forwarding
* messages to other reporters.
*/

public class BroadcastReporter
    implements Reporter
{
    private final List<Reporter> reporters;

    /**
    * Creates a BroadcastReporter.
    */
    public BroadcastReporter ()
    {
        reporters = new LinkedList<Reporter> ();
    }

    /**
    * Adds the specified reporter to the list of reporters to receive
    * messages.
    * @param reporter the reporter to be added.
    */
    public void addReporter (Reporter reporter)
    {
        reporters.add (reporter);
    }

    /**
    * Removes the specified reporter from the list of reporters to receive
    * messages.
    * @param reporter the reporter to be removed.
    */
    public void removeReporter (Reporter reporter)
    {
        reporters.remove (reporter);
    }

    public void fatal (String msg)
    {
        for (Reporter reporter : reporters)
            reporter.fatal (msg);
    }

    public void fatal (String msg, Throwable t)
    {
        for (Reporter reporter : reporters)
            reporter.fatal (msg, t);
    }

    public void error (String helpId, String msg)
    {
        for (Reporter reporter : reporters)
            reporter.error (helpId, msg);
    }

    public void warning (String helpId, String msg)
    {
        for (Reporter reporter : reporters)
            reporter.warning (helpId, msg);
    }

    public void info (String helpId, String msg)
    {
        for (Reporter reporter : reporters)
            reporter.info (helpId, msg);
    }

    public void debug (String msg)
    {
        for (Reporter reporter : reporters)
            reporter.debug (msg);
    }

    public void debug (String msg, Throwable t)
    {
        for (Reporter reporter : reporters)
            reporter.debug (msg, t);
    }

    public void trace (String msg)
    {
        for (Reporter reporter : reporters)
            reporter.trace (msg);
    }

    public void clear ()
    {
        for (Reporter reporter : reporters)
            reporter.clear ();
    }
}

