package com.project.shared.client.events; import com.google.gwt.event.shared.HandlerRegistration; /** * Acts like a regular SimpleEvent until the first dispatch. * After the first dispatch, immediately fires any handlers added to it. */ public class SingleEvent<T> extends SimpleEvent<T> { private boolean isDispatched = false; private T dispatchedArg = null; @Override public HandlerRegistration addHandler(final Handler<T> handler) { if (isDispatched) { handler.onFire(this.dispatchedArg); return null; } return super.addHandler(handler); } public void dispatch(T arg) { this.dispatchedArg = arg; this.isDispatched = true; super.dispatch(arg); this.handlers.clear(); } }