package dbfit.diff; import dbfit.api.Diff; import dbfit.util.MatchResult; import dbfit.util.DiffResultsSummarizer; public abstract class CompositeDiff<P, C> extends DiffBase<P, P> { protected Diff<C, C> childDiff; protected abstract Class getChildType(); public CompositeDiff(final Diff<C, C> childDiff) { this.childDiff = childDiff; } protected Diff<C, C> getChildDiff() { return childDiff; } abstract class CompositeDiffRunner extends DiffRunner { protected final DiffResultsSummarizer summer; public CompositeDiffRunner(MatchResult<P, P> request) { super(request); this.summer = new DiffResultsSummarizer(request, getChildType()); } @Override public void beforeDiff() { getChildDiff().addListeners(listeners); getChildDiff().addListener(summer); } @Override public void afterDiff() { getChildDiff().removeListener(summer); getChildDiff().removeListeners(listeners); } } }