package com.google.gwt.maven;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.dev.util.log.AbstractTreeLogger;
import org.apache.maven.plugin.logging.Log;
public class MavenTreeLogger extends AbstractTreeLogger {
public static MavenTreeLogger newInstance(Log log, Type type) {
Type mavenLogLevel = getLogLevel(log);
MavenTreeLogger logger = new MavenTreeLogger(log, mavenLogLevel);
logger.setMaxDetail(type == null ? mavenLogLevel: type);
return logger;
}
public static Type getLogLevel(Log log) {
Type mavenLogLevel;
if (log.isDebugEnabled()) {
mavenLogLevel = DEBUG;
} else if (log.isInfoEnabled()) {
mavenLogLevel = INFO;
} else if (log.isWarnEnabled()) {
mavenLogLevel = WARN;
} else {
mavenLogLevel = ERROR;
}
return mavenLogLevel;
}
private final Log log;
private final Type mavenLogLevel;
private final String indent;
private MavenTreeLogger(Log log, Type mavenLogLevel) {
this(log, mavenLogLevel, "");
}
private MavenTreeLogger(Log log, Type mavenLogLevel, String indent) {
this.log = log;
this.mavenLogLevel = mavenLogLevel;
this.indent = indent;
}
@Override
protected AbstractTreeLogger doBranch() {
return new MavenTreeLogger(log, mavenLogLevel, indent + " ");
}
public Type getMavenLogLevel() {
return mavenLogLevel;
}
@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) {
msg = indent + msg;
if (caught instanceof UnableToCompleteException) {
caught = null;
}
// Adapt log level to what's loggable by the Maven Log.
if (mavenLogLevel.isLowerPriorityThan(type)) {
type = mavenLogLevel;
}
switch (type) {
case ERROR:
log.error(msg, caught);
break;
case WARN:
log.warn(msg, caught);
break;
case TRACE:
case DEBUG:
case SPAM:
log.debug(msg, caught);
break;
case INFO:
default:
log.info(msg, caught);
break;
}
}
}