/** * */ package xapi.io.api; import xapi.util.X_Debug; import xapi.util.api.ErrorHandler; import xapi.util.api.SuccessHandler; /** * @author James X. Nelson (james@wetheinter.net, @james) * */ public class DelegatingIOCallback <V> implements IOCallback<V>{ private SuccessHandler<V> success; private ErrorHandler<Throwable> failure; private boolean cancel; public DelegatingIOCallback(final SuccessHandler<V> success) { this.success = success; } public DelegatingIOCallback(final SuccessHandler<V> success, final ErrorHandler<Throwable> failure) { this.success = success; this.failure = failure; } public static ErrorHandler<Throwable> failHandler(SuccessHandler<?> callback) { if (callback instanceof ErrorHandler) { return (ErrorHandler)callback; } return new ErrorHandler<Throwable>() { @Override public void onError(Throwable e) { X_Debug.rethrow(e); } }; } @Override public void onCancel() { success = null; failure = null; cancel = true; } @Override public boolean isCancelled() { return cancel; } @Override public void onError(final Throwable e) { if (failure != null) { failure.onError(e); } else { X_Debug.rethrow(e); } } @Override public void onSuccess(final V t) { if (success != null) { success.onSuccess(t); } } }