package de.skuzzle.polly.core.eventhandler;
import java.util.LinkedList;
import java.util.List;
import org.apache.log4j.Logger;
import de.skuzzle.polly.sdk.IrcLogFilter;
import de.skuzzle.polly.sdk.eventlistener.ChannelEvent;
import de.skuzzle.polly.sdk.eventlistener.JoinPartListener;
import de.skuzzle.polly.sdk.eventlistener.MessageEvent;
import de.skuzzle.polly.sdk.eventlistener.MessageListener;
import de.skuzzle.polly.sdk.eventlistener.NickChangeEvent;
import de.skuzzle.polly.sdk.eventlistener.NickChangeListener;
public class IrcLoggingHandler implements MessageListener, NickChangeListener,
JoinPartListener {
private static Logger logger = Logger.getLogger("IRCLOGGER"); //$NON-NLS-1$
private List<IrcLogFilter> filters;
public IrcLoggingHandler() {
logger.trace(""); //$NON-NLS-1$
logger.trace("----------------------------------------------"); //$NON-NLS-1$
logger.trace("new IRC Session started."); //$NON-NLS-1$
logger.trace("----------------------------------------------"); //$NON-NLS-1$
logger.trace(""); //$NON-NLS-1$
this.filters = new LinkedList<IrcLogFilter>();
}
public void addFilter(IrcLogFilter filter) {
this.filters.add(filter);
}
public void removeFilter(IrcLogFilter filter) {
this.filters.add(filter);
}
@Override
public void noticeMessage(MessageEvent e) {
if (!this.discardMessage(e)) {
logger.trace(e);
}
}
@Override
public void publicMessage(MessageEvent e) {
if (!this.discardMessage(e)) {
logger.trace(e);
}
}
@Override
public void privateMessage(MessageEvent e) {
if (!this.discardMessage(e)) {
logger.trace(e);
}
}
@Override
public void actionMessage(MessageEvent e) {
if (!this.discardMessage(e)) {
logger.trace(e);
}
}
@Override
public void nickChanged(NickChangeEvent e) {
if (!this.discardNickChange(e)) {
logger.trace(e);
}
}
@Override
public void channelJoined(ChannelEvent e) {
if (!this.discardChannelEvent(e)) {
logger.trace("*** JOIN " + e); //$NON-NLS-1$
}
}
@Override
public void channelParted(ChannelEvent e) {
if (!this.discardChannelEvent(e)) {
logger.trace("*** PART " + e); //$NON-NLS-1$
}
}
private boolean discardMessage(MessageEvent e) {
for (IrcLogFilter filter : this.filters) {
if (filter.discard(e)) {
return true;
}
}
return false;
}
private boolean discardNickChange(NickChangeEvent e) {
for (IrcLogFilter filter : this.filters) {
if (filter.discard(e)) {
return true;
}
}
return false;
}
private boolean discardChannelEvent(ChannelEvent e) {
for (IrcLogFilter filter : this.filters) {
if (filter.discard(e)) {
return true;
}
}
return false;
}
}