package org.oddjob.beanbus.mega; import java.util.HashMap; import java.util.Map; import org.oddjob.beanbus.BusConductor; import org.oddjob.beanbus.BusCrashException; import org.oddjob.beanbus.BusEvent; import org.oddjob.beanbus.BusListener; public class BusConductorFilter implements BusConductor { private final Map<BusListener, BusListener> listeners = new HashMap<BusListener, BusListener>(); private final BusConductor original; public BusConductorFilter(BusConductor original) { this.original = original; } protected void busStarting(BusEvent event, BusListener listener) throws BusCrashException { listener.busStarting(event); } protected void tripBeginning(BusEvent event, BusListener listener) throws BusCrashException { listener.tripBeginning(event); } protected void tripEnding(BusEvent event, BusListener listener) throws BusCrashException { listener.tripEnding(event); } protected void busStopRequested(BusEvent event, BusListener listener) { listener.busStopRequested(event); } protected void busStopping(BusEvent event, BusListener listener) throws BusCrashException { listener.busStopping(event); } protected void busCrashed(BusEvent event, BusListener listener) { listener.busCrashed(event); } protected void busTerminated(BusEvent event, BusListener listener) { listener.busTerminated(event); } @Override public void addBusListener(final BusListener listener) { BusListener filteredListener = new BusListener() { @Override public void tripEnding(BusEvent event) throws BusCrashException { BusConductorFilter.this.tripEnding(event, listener); } @Override public void tripBeginning(BusEvent event) throws BusCrashException { BusConductorFilter.this.tripBeginning(event, listener); } @Override public void busTerminated(BusEvent event) { BusConductorFilter.this.busTerminated(event, listener); } @Override public void busStopping(BusEvent event) throws BusCrashException { BusConductorFilter.this.busStopping(event, listener); } @Override public void busStopRequested(BusEvent event) { BusConductorFilter.this.busStopRequested(event, listener); } @Override public void busStarting(BusEvent event) throws BusCrashException { BusConductorFilter.this.busStarting(event, listener); } @Override public void busCrashed(BusEvent event) { BusConductorFilter.this.busCrashed(event, listener); } }; listeners.put(listener, filteredListener); original.addBusListener(filteredListener); } @Override public void removeBusListener(BusListener listener) { BusListener filteredListener = listeners.remove(listener); original.removeBusListener(filteredListener); } @Override public void cleanBus() throws BusCrashException { original.cleanBus(); } @Override public void requestBusStop() { original.requestBusStop(); } }