package org.fusesource.cloudmix.agent.logging;
import com.google.common.base.Predicate;
public class LogPredicate implements Predicate<LogRecord> {
private LogRecord r = new LogRecord();
public LogPredicate(LogRecord searchRecord) {
if (isEmpty(searchRecord)) {
throw new IllegalArgumentException("Empty LogRecord");
}
this.r = searchRecord;
}
public LogPredicate(String level) {
r.setLevel(level);
}
public LogPredicate(String level, String category) {
r.setLevel(level);
r.setCategory(category);
}
public LogPredicate(String level, String category, String date) {
r.setLevel(level);
r.setCategory(category);
r.setDate(date);
}
public boolean apply(LogRecord t) {
if (t == null || isEmpty(t)) {
return false;
}
//CHECKSTYLE:OFF - really ugly boolean expression complexity level
if ((r.getLevel() == null || r.getLevel() != null && r.getLevel().equals(t.getLevel()))
&& (r.getDate() == null || r.getDate() != null && r.getDate().equals(t.getDate()))
&& (r.getCategory() == null || t.getCategory().matches(r.getCategory()))
&& (r.getClassName() == null || t.getClassName().matches(r.getClassName()))
&& (r.getMessage() == null || t.getMessage().matches(r.getMessage()))) {
return true;
}
//CHECKTSYLTE:ON
return false;
}
private static boolean isEmpty(LogRecord searchRecord) {
if (searchRecord.getLevel() == null
&& searchRecord.getDate() == null
&& searchRecord.getCategory() == null
&& searchRecord.getClassName() == null
&& searchRecord.getThreadId() == null
&& searchRecord.getClassLineNumber() == null) {
return true;
}
return false;
}
}