package org.ovirt.engine.core.bll.context;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.function.Consumer;
public abstract class CompensationContextBase implements CompensationContext {
private LinkedHashSet<CompensationListener> listeners = new LinkedHashSet<>();
@Override
public void addListener(CompensationListener compensationListener) {
this.listeners.add(compensationListener);
}
@Override
public final void afterCompensationCleanup() {
processListenersInReverseOrder(CompensationListener::afterCompensation);
doAfterCompensationCleanup();
}
@Override
public final void cleanupCompensationDataAfterSuccessfulCommand() {
processListenersInReverseOrder(CompensationListener::cleaningCompensationDataAfterSuccess);
doCleanupCompensationDataAfterSuccessfulCommand();
}
private void processListenersInReverseOrder(Consumer<CompensationListener> afterCompensation) {
new LinkedList<>(listeners).descendingIterator().forEachRemaining(afterCompensation);
}
protected void doAfterCompensationCleanup() {
}
protected void doCleanupCompensationDataAfterSuccessfulCommand() {
}
protected void doClearCollectedCompensationData() {
}
}