package fr.openwide.core.jpa.more.util.transaction.model; import java.util.Collections; import java.util.List; import com.google.common.collect.Lists; import fr.openwide.core.jpa.more.util.transaction.service.ITransactionSynchronizationTaskManagerService; public class TransactionSynchronizationTasks { private final List<ITransactionSynchronizationBeforeCommitTask> beforeCommitTasks = Lists.newLinkedList(); private final List<ITransactionSynchronizationAfterCommitTask> afterCommitTasks = Lists.newLinkedList(); private final List<ITransactionSynchronizationTaskRollbackAware> alreadyExecutedBeforeClearTasks = Lists.newLinkedList(); private boolean frozen = false; public List<ITransactionSynchronizationBeforeCommitTask> getBeforeCommitTasks() { if (isFrozen()) { return Collections.unmodifiableList(beforeCommitTasks); } return beforeCommitTasks; } public List<ITransactionSynchronizationAfterCommitTask> getAfterCommitTasks() { if (isFrozen()) { return Collections.unmodifiableList(afterCommitTasks); } return afterCommitTasks; } /** * @return The tasks that have already been executed * {@link ITransactionSynchronizationTaskManagerService#beforeClear() before a clear operation.}. * These tasks are only kept in memory so that they can be notified if a rollback occurs. */ public List<ITransactionSynchronizationTaskRollbackAware> getAlreadyExecutedBeforeClearTasks() { if (isFrozen()) { return Collections.unmodifiableList(alreadyExecutedBeforeClearTasks); } return alreadyExecutedBeforeClearTasks; } public TransactionSynchronizationTasks freeze() { frozen = true; return this; } public boolean isFrozen() { return frozen; } }