org.codehaus.mojo.cobertura.integration.shell.StringBufferLog.java Source code

Java tutorial

Introduction

Here is the source code for org.codehaus.mojo.cobertura.integration.shell.StringBufferLog.java

Source

/*
 * #%L
 * Mojo's Maven plugin for Cobertura
 * %%
 * Copyright (C) 2005 - 2013 Codehaus
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */
package org.codehaus.mojo.cobertura.integration.shell;

import org.apache.maven.plugin.logging.Log;
import org.codehaus.mojo.cobertura.integration.LogLevel;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * @author <a href="mailto:lj@jguru.se">Lennart J&ouml;relid</a>, jGuru Europe AB
 */
public class StringBufferLog implements Log {

    // Internal state
    private StringBuffer buffer = new StringBuffer();
    private LogLevel logLevel = LogLevel.INFO;

    public void setLogLevel(LogLevel level) {
        this.logLevel = level;
    }

    public StringBuffer getBuffer() {
        return buffer;
    }

    /**
     * {@inheritDoc}
     */
    public boolean isDebugEnabled() {
        return isLoggable(LogLevel.DEBUG);
    }

    /**
     * {@inheritDoc}
     */
    public void debug(final CharSequence content) {
        checkAndLog(LogLevel.DEBUG, content);
    }

    /**
     * {@inheritDoc}
     */
    public void debug(final CharSequence content, final Throwable error) {
        checkAndLog(LogLevel.DEBUG, content);
        checkAndLog(LogLevel.DEBUG, error);
    }

    /**
     * {@inheritDoc}
     */
    public void debug(final Throwable error) {
        checkAndLog(LogLevel.DEBUG, error);
    }

    /**
     * {@inheritDoc}
     */
    public boolean isInfoEnabled() {
        return isLoggable(LogLevel.INFO);
    }

    /**
     * {@inheritDoc}
     */
    public void info(final CharSequence content) {
        checkAndLog(LogLevel.INFO, content);
    }

    /**
     * {@inheritDoc}
     */
    public void info(final CharSequence content, final Throwable error) {
        checkAndLog(LogLevel.INFO, content);
        checkAndLog(LogLevel.INFO, error);
    }

    /**
     * {@inheritDoc}
     */
    public void info(final Throwable error) {
        checkAndLog(LogLevel.INFO, error);
    }

    /**
     * {@inheritDoc}
     */
    public boolean isWarnEnabled() {
        return isLoggable(LogLevel.WARNING);
    }

    /**
     * {@inheritDoc}
     */
    public void warn(final CharSequence content) {
        checkAndLog(LogLevel.WARNING, content);
    }

    /**
     * {@inheritDoc}
     */
    public void warn(final CharSequence content, final Throwable error) {
        checkAndLog(LogLevel.WARNING, content);
        checkAndLog(LogLevel.WARNING, error);
    }

    /**
     * {@inheritDoc}
     */
    public void warn(final Throwable error) {
        checkAndLog(LogLevel.WARNING, error);
    }

    /**
     * {@inheritDoc}
     */
    public boolean isErrorEnabled() {
        return isLoggable(LogLevel.ERROR);
    }

    /**
     * {@inheritDoc}
     */
    public void error(final CharSequence content) {
        checkAndLog(LogLevel.ERROR, content);
    }

    /**
     * {@inheritDoc}
     */
    public void error(final CharSequence content, final Throwable error) {
        checkAndLog(LogLevel.ERROR, content);
        checkAndLog(LogLevel.ERROR, error);
    }

    /**
     * {@inheritDoc}
     */
    public void error(final Throwable error) {
        checkAndLog(LogLevel.ERROR, error);
    }

    //
    // Private helpers
    //

    private boolean isLoggable(LogLevel checkLevel) {
        return checkLevel.compareTo(logLevel) >= 0;
    }

    private void checkAndLog(final LogLevel fromLevel, final Throwable throwable) {

        final StringWriter stringWriter = new StringWriter();
        throwable.printStackTrace(new PrintWriter(stringWriter));

        if (isLoggable(fromLevel)) {
            buffer.append("[").append(fromLevel.toString().toLowerCase()).append("]: ")
                    .append(stringWriter.toString()).append("\n");
        }
    }

    private void checkAndLog(final LogLevel fromLevel, final CharSequence content) {
        if (isLoggable(fromLevel)) {
            buffer.append("[").append(fromLevel.toString().toLowerCase()).append("]: ").append(content)
                    .append("\n");
        }
    }
}