package org.tessell.bus;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import com.google.web.bindery.event.shared.Event;
import com.google.web.bindery.event.shared.Event.Type;
import com.google.web.bindery.event.shared.EventBus;
import com.google.web.bindery.event.shared.HandlerRegistration;
import com.google.web.bindery.event.shared.SimplerEventBus;
public class StubEventBus extends EventBus {
private final EventBus m = new SimplerEventBus();
private static final Logger log = Logger.getLogger(StubEventBus.class.getName());
private final List<Event<?>> events = new ArrayList<Event<?>>();
@Override
public <H> HandlerRegistration addHandler(final Type<H> type, final H handler) {
return m.addHandler(type, handler);
}
@Override
public void fireEvent(final Event<?> event) {
log.fine(event.toString());
events.add(event);
m.fireEvent(event);
}
@Override
public <H> HandlerRegistration addHandlerToSource(Type<H> type, Object source, H handler) {
return m.addHandlerToSource(type, source, handler);
}
@Override
public void fireEventFromSource(Event<?> event, Object source) {
log.fine(event.toString());
events.add(event);
m.fireEventFromSource(event, source);
}
public List<Event<?>> getEvents() {
return events;
}
@SuppressWarnings("unchecked")
public <E extends Event<?>> List<E> getEvents(final Class<E> type) {
final List<E> matched = new ArrayList<E>();
for (final Event<?> event : events) {
if (event.getClass().equals(type)) {
matched.add((E) event);
}
}
return matched;
}
public <E extends Event<?>> E getEvent(final Class<E> type, final int i) {
return getEvents(type).get(i);
}
}