package __TOP_LEVEL_PACKAGE__.client.scaffold.request;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerRegistration;
/**
* An event posted whenever an RPC request is sent or its response is received.
*/
public class RequestEvent extends GwtEvent<RequestEvent.Handler> {
/**
* Implemented by handlers of this type of event.
*/
public interface Handler extends EventHandler {
/**
* Called when a {@link RequestEvent} is fired.
*
* @param requestEvent a {@link RequestEvent} instance
*/
void onRequestEvent(RequestEvent requestEvent);
}
/**
* The request state.
*/
public enum State {
SENT, RECEIVED
}
private static final Type<Handler> TYPE = new Type<Handler>();
/**
* Register a {@link RequestEvent.Handler} on an {@link EventBus}.
*
* @param eventBus the {@link EventBus}
* @param handler a {@link RequestEvent.Handler}
* @return a {@link HandlerRegistration} instance
*/
public static HandlerRegistration register(EventBus eventBus, RequestEvent.Handler handler) {
return eventBus.addHandler(TYPE, handler);
}
private final State state;
/**
* Constructs a new @{link RequestEvent}.
*
* @param state a {@link State} instance
*/
public RequestEvent(State state) {
this.state = state;
}
@Override
public GwtEvent.Type<Handler> getAssociatedType() {
return TYPE;
}
/**
* Returns the {@link State} associated with this event.
*
* @return a {@link State} instance
*/
public State getState() {
return state;
}
@Override
protected void dispatch(Handler handler) {
handler.onRequestEvent(this);
}
}