/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client; import java.util.ArrayList; import java.util.List; /** * * @author mg */ public abstract class CumulativeCallbackAdapter<R, F> extends CallbackAdapter<R, F> { protected List<F> reasons = new ArrayList<>(); protected R singleResult; protected int exepectedCallsCount; protected int calls; public CumulativeCallbackAdapter(int aExpectedCallsCount) { super(); exepectedCallsCount = aExpectedCallsCount; } protected void complete() { if (++calls == exepectedCallsCount) { if (reasons.isEmpty()) { super.onSuccess(singleResult); } else { failed(reasons); } } } public void onSuccess(R result) { if (result != null) { if (singleResult == null) { singleResult = result; } else { throw new IllegalStateException("CumulativeCallbackAdapter supports only one result"); } } complete(); } public void onFailure(F reason) { reasons.add(reason); complete(); } protected abstract void failed(List<F> aReasons); }