package __TOP_LEVEL_PACKAGE__.client.scaffold.request;
import com.google.gwt.event.shared.EventBus;
import com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport;
import com.google.web.bindery.requestfactory.shared.RequestTransport;
import com.google.web.bindery.requestfactory.shared.ServerFailure;
/**
* Wraps {@link RequestTransport} to post events as requests are sent
* and received.
*/
public class EventSourceRequestTransport implements RequestTransport {
private final EventBus eventBus;
private final RequestTransport wrapped;
public EventSourceRequestTransport(EventBus eventBus) {
this(eventBus, new DefaultRequestTransport());
}
public EventSourceRequestTransport(EventBus eventBus, RequestTransport wrapped) {
this.eventBus = eventBus;
this.wrapped = wrapped;
}
public void send(String payload, final TransportReceiver receiver) {
TransportReceiver myReceiver = new TransportReceiver() {
@Override
public void onTransportSuccess(String payload) {
try {
receiver.onTransportSuccess(payload);
} finally {
eventBus.fireEvent(new RequestEvent(RequestEvent.State.RECEIVED));
}
}
@Override
public void onTransportFailure(ServerFailure failure) {
try {
receiver.onTransportFailure(failure);
} finally {
eventBus.fireEvent(new RequestEvent(RequestEvent.State.RECEIVED));
}
}
};
try {
wrapped.send(payload, myReceiver);
} finally {
eventBus.fireEvent(new RequestEvent(RequestEvent.State.SENT));
}
}
}