All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.GwtTreeLogger Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test;

import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.dev.util.log.AbstractTreeLogger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * The holder for the shared {@link TreeLogger} instance. If no custom logger is set, a default one
 * which prints in {@link System#out} is used. For internal use only.
 *
 * @author Gael Lazzari
 */
public class GwtTreeLogger extends AbstractTreeLogger {

    private static final class ErrorDto {

        private final Throwable caught;
        private final HelpInfo helpInfo;
        private final String msg;

        private ErrorDto(String msg, Throwable caught, HelpInfo helpInfo) {
            this.msg = msg;
            this.caught = caught;
            this.helpInfo = helpInfo;
        }
    }

    private static final String DEFAULT_BRANCH_INDENT = "   ";

    private static final List ERROR_MSG_BUFFER = new ArrayList();

    private static final GwtTreeLogger INSTANCE = new GwtTreeLogger("");

    private static int lastIndexOfErrorWithinParentLogger = -1;

    private static final Logger LOGGER = LoggerFactory.getLogger(GwtTreeLogger.class);

    public static GwtTreeLogger get() {
        return INSTANCE;
    }

    public static void reset() {
        lastIndexOfErrorWithinParentLogger = -1;
    }

    private final String indent;

    private GwtTreeLogger(String indent) {
        this.indent = indent;
    }

    public void onUnableToCompleteError() {
        for (ErrorDto error : ERROR_MSG_BUFFER) {

            if (error.helpInfo == null || error.helpInfo.getURL() == null) {
                LOGGER.error(error.msg, error.caught);
            } else {
                StringBuilder sb = new StringBuilder();
                sb.append(error.msg);
                sb.append(" (for additional info see:").append(error.helpInfo.getURL().toString());

                LOGGER.error(sb.toString(), error.caught);
            }
        }

        ERROR_MSG_BUFFER.clear();
        reset();
    }

    @Override
    protected AbstractTreeLogger doBranch() {
        return new GwtTreeLogger(indent + DEFAULT_BRANCH_INDENT);
    }

    @Override
    protected void doCommitBranch(AbstractTreeLogger childBeingCommitted, Type type, String msg,
                                  Throwable caught, HelpInfo helpInfo) {
        doLog(childBeingCommitted.getBranchedIndex(), type, msg, caught, helpInfo);
    }

    @Override
    protected void doLog(int indexOfLogEntryWithinParentLogger, Type type, String msg,
                         Throwable caught, HelpInfo helpInfo) {

        if (lastIndexOfErrorWithinParentLogger > -1
                && indexOfLogEntryWithinParentLogger < lastIndexOfErrorWithinParentLogger) {
            // new error
            ErrorDto baseError = ERROR_MSG_BUFFER.get(ERROR_MSG_BUFFER.size() - 1);
            ERROR_MSG_BUFFER.clear();
            ERROR_MSG_BUFFER.add(baseError);
        }

        switch (type) {
            case DEBUG:
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug(indent + msg, caught);
                }
                break;
            case ERROR:
                if (LOGGER.isErrorEnabled()) {
                    ERROR_MSG_BUFFER.add(new ErrorDto(msg, caught, helpInfo));
                    lastIndexOfErrorWithinParentLogger = indexOfLogEntryWithinParentLogger;
                }
                break;
            case INFO:
                if (LOGGER.isInfoEnabled()) {
                    LOGGER.info(indent + msg, caught);
                }
                break;
            case WARN:
                if (LOGGER.isWarnEnabled()) {
                    LOGGER.warn(indent + msg, caught);
                }
                break;
            default:
                break;

        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy