in src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java [618:667]
public boolean isAddRow(LoggingEventWrapper loggingEventWrapper) {
Object id = loggingEventWrapper.getLoggingEvent().getProperty(Constants.LOG4J_ID_KEY);
//only set the property if it doesn't already exist
if (id == null) {
id = ++uniqueRow;
loggingEventWrapper.setProperty(Constants.LOG4J_ID_KEY, id.toString());
}
loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
Rule findRule = colorizer.getFindRule();
if (findRule != null) {
loggingEventWrapper.evaluateSearchRule(colorizer.getFindRule());
}
boolean rowAdded = false;
/**
* If we're in cyclic mode and over budget on the size, the addition of a new event will
* cause the oldest event to fall off the cliff. We need to remove that events ID from the
* Set so we are not keeping track of IDs for all events ever received (we'd run out of
* memory...)
*/
synchronized (mutex) {
if (cyclic) {
CyclicBufferList bufferList = (CyclicBufferList) unfilteredList;
if (bufferList.size() == bufferList.getMaxSize()) {
reachedCapacity = true;
}
}
int unfilteredSize = unfilteredList.size();
LoggingEventWrapper lastLoggingEventWrapper = null;
if (unfilteredSize > 0) {
lastLoggingEventWrapper = (LoggingEventWrapper) unfilteredList.get(unfilteredSize - 1);
}
unfilteredList.add(loggingEventWrapper);
if ((ruleMediator == null) || (ruleMediator.evaluate(loggingEventWrapper.getLoggingEvent(), null))) {
loggingEventWrapper.setDisplayed(true);
updateEventMillisDelta(loggingEventWrapper, lastLoggingEventWrapper);
filteredList.add(loggingEventWrapper);
rowAdded = true;
} else {
loggingEventWrapper.setDisplayed(false);
}
}
checkForNewColumn(loggingEventWrapper);
return rowAdded;
}