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}