package com.koushikdutta.async.future; public abstract class TransformFuture<T, F> extends SimpleFuture<T> implements FutureCallback<F> { @Override public void onCompleted(Exception e, F result) { if (isCancelled()) return; if (e != null) { error(e); return; } try { transform(result); } catch (Exception ex) { error(ex); } } public TransformFuture<T, F> from(Future<F> future) { setParent(future); future.setCallback(this); return this; } protected void error(Exception e) { setComplete(e); } protected abstract void transform(F result) throws Exception; }