001package jmri.jmrix.mrc;
002
003import java.util.Date;
004
005/**
006 * MrcTrafficListenerFilter is a helper class used to suppress notifications a
007 * client is not interested in.
008 *
009 * @author Matthias Keil Copyright (C) 2013
010 * @author Kevin Dickerson Copyright (C) 2014
011 *
012 *
013 */
014public class MrcTrafficListenerFilter {
015
016    /* Overridden to compare the listener, not the filter objects.
017     *
018     * (non-Javadoc)
019     * @see java.lang.Object#equals(java.lang.Object)
020     */
021    @Override
022    public boolean equals(Object obj) {
023        if (obj != null && obj.getClass().equals(this.getClass())) {
024            if (((MrcTrafficListenerFilter) obj).l.equals(this.l)) {
025                return true;
026            }
027        }
028        return false;
029    }
030
031    @Override
032    public int hashCode() {
033        return l.hashCode();
034    }
035    /**
036     * Type of traffic the listener is interested in.
037     */
038    int mask = 0;
039    /**
040     * The listener.
041     */
042    MrcTrafficListener l = null;
043
044    /**
045     * Constructor
046     *
047     * @param _mask Type of traffic the listener is interested in.
048     * @param _l    The listener interface.
049     */
050    public MrcTrafficListenerFilter(int _mask, MrcTrafficListener _l) {
051        mask = _mask;
052        l = _l;
053    }
054
055    public void setFilter(int _mask) {
056        mask = _mask;
057    }
058
059    public void fireXmit(Date timestamp, MrcMessage m) {
060        if (forwardMessage(m.getMessageClass())) {
061            l.notifyXmit(timestamp, m);
062        }
063    }
064
065    public void fireRcv(Date timestamp, MrcMessage m) {
066        if (forwardMessage(m.getMessageClass())) {
067            l.notifyRcv(timestamp, m);
068        }
069    }
070
071    boolean forwardMessage(int messageClass) {
072        if ((mask & messageClass) != 0) {
073            return true;
074        }
075        return false;
076    }
077}