package xapi.adapter.log.gwt; import xapi.collect.api.Fifo; import xapi.except.NotYetImplemented; import xapi.log.api.LogLevel; import xapi.log.api.LogService; import xapi.log.impl.JreLog; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.dev.util.log.CompositeTreeLogger; public class GwtLogAdapter extends CompositeTreeLogger { private final LogService service; private boolean logToChildren; public GwtLogAdapter(LogService service, TreeLogger ... children) { super(children); this.service = service == null ? new JreLog() : service; } @Override public boolean isLoggable(Type type) { switch (type) { case ALL: case TRACE: return service.shouldLog(LogLevel.ALL); case DEBUG: return service.shouldLog(LogLevel.DEBUG); case ERROR: return service.shouldLog(LogLevel.ERROR); case INFO: return service.shouldLog(LogLevel.INFO); case SPAM: return service.shouldLog(LogLevel.TRACE); case WARN: return service.shouldLog(LogLevel.WARN); } return isLogToChildren() && super.isLoggable(type); } @Override public void log(Type type, String msg, Throwable caught, HelpInfo helpInfo) { Fifo<Object> fifo = service.newFifo(); LogLevel level = toLevel(type); fifo.give(msg); if (caught != null) fifo.give(service.unwrap(level, caught)); if (helpInfo != null) { fifo.give(helpInfo.getPrefix()); if (helpInfo.getURL() != null) { fifo.give("\n"); if (helpInfo.getAnchorText() != null) { fifo.give(helpInfo.getAnchorText()); } fifo.give("Help URL").give(helpInfo.getURL().toExternalForm()); } } service.doLog(level, fifo); if (isLogToChildren()) super.log(type, msg, caught, helpInfo); } public static LogLevel toLevel(Type type) { switch (type) { case ALL: case SPAM: return LogLevel.ALL; case TRACE: return LogLevel.TRACE; case DEBUG: return LogLevel.DEBUG; case ERROR: return LogLevel.ERROR; case INFO: return LogLevel.INFO; case WARN: return LogLevel.WARN; } throw new UnsupportedOperationException(); } public boolean isLogToChildren() { return logToChildren; } public void setLogToChildren(boolean logToChildren) { this.logToChildren = logToChildren; } }