package com.googlecode.japi.checker.maven.plugin; import java.util.ArrayList; import java.util.List; import org.apache.maven.plugin.Mojo; import org.apache.maven.plugin.logging.Log; public class RecorderLog implements Log { public enum Kind {ERROR, WARNING, INFO, DEBUG}; private Log delegate; private List<Record> records = new ArrayList<Record>(); public RecorderLog(Log delegate) { this.delegate = delegate; } public RecorderLog(Mojo mojo) { this(mojo.getLog()); mojo.setLog(this); } @Override public void debug(CharSequence arg0) { this.delegate.debug(arg0); records.add(new Record(Kind.DEBUG, arg0, null)); } @Override public void debug(Throwable arg0) { this.delegate.debug(arg0); records.add(new Record(Kind.DEBUG, null, arg0)); } @Override public void debug(CharSequence arg0, Throwable arg1) { this.delegate.debug(arg0, arg1); records.add(new Record(Kind.DEBUG, arg0, arg1)); } @Override public void error(CharSequence arg0) { this.delegate.error(arg0); records.add(new Record(Kind.ERROR, arg0, null)); } @Override public void error(Throwable arg0) { this.delegate.error(arg0); records.add(new Record(Kind.ERROR, null, arg0)); } @Override public void error(CharSequence arg0, Throwable arg1) { this.delegate.error(arg0, arg1); records.add(new Record(Kind.ERROR, arg0, arg1)); } @Override public void info(CharSequence arg0) { this.delegate.info(arg0); records.add(new Record(Kind.INFO, arg0, null)); } @Override public void info(Throwable arg0) { this.delegate.info(arg0); records.add(new Record(Kind.INFO, null, arg0)); } @Override public void info(CharSequence arg0, Throwable arg1) { this.delegate.info(arg0, arg1); records.add(new Record(Kind.INFO, arg0, arg1)); } @Override public boolean isDebugEnabled() { return this.delegate.isDebugEnabled(); } @Override public boolean isErrorEnabled() { return this.delegate.isErrorEnabled(); } @Override public boolean isInfoEnabled() { return this.delegate.isInfoEnabled(); } @Override public boolean isWarnEnabled() { return this.delegate.isWarnEnabled(); } @Override public void warn(CharSequence arg0) { this.delegate.warn(arg0); records.add(new Record(Kind.WARNING, arg0, null)); } @Override public void warn(Throwable arg0) { this.delegate.warn(arg0); records.add(new Record(Kind.WARNING, null, arg0)); } @Override public void warn(CharSequence arg0, Throwable arg1) { this.delegate.warn(arg0, arg1); records.add(new Record(Kind.WARNING, arg0, arg1)); } public boolean contains(Kind kind, String substring) { for (Record record : records) { if (record.kind == kind && record.line != null && record.line.contains(substring)) { return true; } } return false; } class Record { public Kind kind; public String line; public Throwable throwable; public Record(Kind kind, CharSequence line, Throwable throwable) { this.kind = kind; this.line = line.toString(); this.throwable = throwable; } } }