
package uk.co.wingpath.util;

import org.apache.log4j.*;

/**
* This class implements the {@link Reporter} interface using a log4j
* {@link Logger}.
*/

public class Log4jReporter
    implements Reporter
{
    private final Logger logger;

    /** Replaces any newlines in a message by ": ".
    */
    private String joinLines (String fmt, Object [] args)
    {
        String msg = String.format (fmt, args);
        String [] lines = msg.split ("\n");
        msg = "";

        for (int i = 0 ; i < lines.length ; i++)
        {
            if (i != 0)
                msg += ": ";
            msg += lines [i];
        }

        return msg;
    }

    /**
    * Creates a Log4jReporter using the supplied logger.
    * @param logger the logger to which messages should be forwarded.
    */
    public Log4jReporter (Logger logger)
    {
        this.logger = logger;
    }

    @Override
    public boolean fatal (String fmt, Object... args)
    {
        logger.fatal ("FATAL " + joinLines (fmt, args));
        return true;
    }

    @Override
    public boolean fatal (Throwable t, String fmt, Object... args)
    {
        logger.fatal ("FATAL " + joinLines (fmt, args), t);
        return true;
    }

    @Override
    public void error (String helpId, String fmt, Object... args)
    {
        logger.error ("ERROR " + joinLines (fmt, args));
    }

    @Override
    public void warn (String helpId, String fmt, Object... args)
    {
        logger.warn ("WARN  " + joinLines (fmt, args));
    }

    @Override
    public void info (String helpId, String fmt, Object... args)
    {
        logger.info ("INFO  " + joinLines (fmt, args));
    }

    @Override
    public void trace (String helpId, String fmt, Object... args)
    {
        logger.debug ("TRACE " + joinLines (fmt, args));
    }

    @Override
    public boolean debug (String fmt, Object... args)
    {
        logger.trace ("DEBUG " + joinLines (fmt, args));
        return true;
    }

    @Override
    public void clear ()
    {
    }
}

