/**
 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
 */

package net.sourceforge.pmd.util.log;

import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Romain PELISSE, belaran@gmail.com
 * @author Roberto Ferranti - rferranti@users.sourceforge.net Thanks to Jesse
 *         Glick for the bug report.
 *
 */
public class ScopedLogHandlersManager {

    private static final String PACKAGE_NAME = "net.sourceforge.pmd";

    @SuppressWarnings("PMD.LoggerIsNotStaticFinal")
    private Logger logger;
    private Level oldLogLevel;
    private Handler[] oldHandlers;
    private Handler[] newHandlers;

    public ScopedLogHandlersManager(Level level, Handler... handlers) {
        newHandlers = handlers;
        logger = Logger.getLogger(PACKAGE_NAME);
        oldHandlers = logger.getHandlers();
        oldLogLevel = logger.getLevel();
        logger.setLevel(level);
        // The Ant logger filters itself
        for (Handler handler : oldHandlers) {
            logger.removeHandler(handler);
        }
        for (Handler handler : newHandlers) {
            logger.addHandler(handler);
        }
    }

    public void close() {
        for (Handler handler : newHandlers) {
            logger.removeHandler(handler);
        }
        for (Handler handler : oldHandlers) {
            logger.addHandler(handler);
        }
        logger.setLevel(oldLogLevel);
    }
}
