@SuppressWarnings("unchecked") @Override public <A extends Action<R>, R extends Result> DispatchRequest undo(A action, R result, AsyncCallback<Void> callback) { ClientActionHandler<?, ?> clientActionHandler = clientActionHandlers.get(action.getClass()); if (clientActionHandler != null) { DelegatingDispatchRequest request = new DelegatingDispatchRequest(); ((ClientActionHandler<A, R>) clientActionHandler).undo(action, result, callback, new UndoCommand<A, R>() { @Override public DispatchRequest undo(A action, R result, AsyncCallback<Void> callback) { return serviceUndo(action, result, callback); } }); return request; } else { serviceUndo(action, result, callback); return new TestingDispatchRequest(); } }
@Override public void onSuccess(ClientActionHandler<?, ?> clientActionHandler) { if (clientActionHandler.getActionType() != action.getClass()) { dispatchRequest.cancel(); callback.onFailure(new ClientActionHandlerMismatchException( (Class<? extends Action<?>>) action.getClass(), clientActionHandler.getActionType())); return; } if (dispatchRequest.isPending()) { dispatchRequest.setDelegate(((ClientActionHandler<A, R>) clientActionHandler).undo( action, result, callback, new UndoCommand<A, R>() { @Override public DispatchRequest undo(A action, R result, AsyncCallback<Void> callback) { if (dispatchRequest.isPending()) { return doUndo(securityCookie, action, result, callback); } else { return null; } } })); } }