/// <summary>
 /// Cancels the transaction.
 /// </summary>
 public void CancelTransaction()
 {
     if (TransactionStack.Count > 0)
     {
         TransactionStack.Pop();
     }
 }
Exemple #2
0
        public void TestSaveUndoSaveRedo()
        {
            var stack = new TransactionStack(5);

            using (var manager = new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                using (stack.CreateTransaction())
                {
                    stack.PushOperation(operation);
                }
                Assert.True(dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.False(dirtiable.IsDirty);
                stack.Rollback();
                Assert.True(dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.False(dirtiable.IsDirty);
                stack.Rollforward();
                Assert.True(dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.False(dirtiable.IsDirty);
            }
        }
        } // CommitTransaction

        public static void RollBackTransaction()
        {
            if (TransactionStack.Count != 0)
            {
                var topLevelTransaction = TransactionStack.Peek();
                if (topLevelTransaction != null)
                    topLevelTransaction.UnExecute();

                TransactionStack.Clear();
            }
        } // RollBackTransaction
 internal void RollBackTransaction()
 {
     if (TransactionStack.Count != 0)
     {
         ITransaction transaction = TransactionStack.Peek();
         if ((transaction != null) && (transaction.AccumulatingAction != null))
         {
             transaction.AccumulatingAction.UnExecute();
         }
         TransactionStack.Clear();
     }
 }
        /// <summary>
        /// Rolls the back transaction.
        /// </summary>
        public void RollBackTransaction()
        {
            if (TransactionStack.Count != 0)
            {
                var topLevelTransaction = TransactionStack.Peek();
                if (topLevelTransaction != null && topLevelTransaction.AccumulatingAction != null)
                {
                    topLevelTransaction.AccumulatingAction.UnExecute();
                }

                TransactionStack.Clear();
            }
        }
        internal void CommitTransaction()
        {
            if (TransactionStack.Count == 0)
            {
                throw new InvalidOperationException("ActionManager.CommitTransaction was called when there is no open transaction (TransactionStack is empty). Please examine the stack trace of this exception to find code which called CommitTransaction one time too many. Normally you don't call OpenTransaction and CommitTransaction directly, but use using(var t = Transaction.Create(Root)) instead.");
            }
            ITransaction transaction = TransactionStack.Pop();

            if (transaction.AccumulatingAction.Count > 0)
            {
                RecordAction(transaction.AccumulatingAction);
            }
        }
Exemple #7
0
        public void TestDoAction()
        {
            var stack = new TransactionStack(5);

            using (new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                using (stack.CreateTransaction())
                {
                    var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                    stack.PushOperation(operation);
                }
                Assert.True(dirtiable.IsDirty);
            }
        }
Exemple #8
0
        public void TestUndo()
        {
            var stack = new TransactionStack(5);

            using (new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                using (stack.CreateTransaction())
                {
                    stack.PushOperation(operation);
                }
                Assert.Equal(true, dirtiable.IsDirty);
                stack.Rollback();
                Assert.Equal(false, dirtiable.IsDirty);
            }
        }
Exemple #9
0
        public void TestDoAndSave()
        {
            var stack = new TransactionStack(5);

            using (var manager = new DirtiableManager(stack))
            {
                var dirtiable = new SimpleDirtiable();
                var operation = new SimpleDirtyingOperation(dirtiable.Yield());
                using (stack.CreateTransaction())
                {
                    stack.PushOperation(operation);
                }
                Assert.Equal(true, dirtiable.IsDirty);
                manager.CreateSnapshot();
                Assert.Equal(false, dirtiable.IsDirty);
            }
        }
        } // OpenTransaction

        public static void CommitTransaction()
        {
            if (TransactionStack.Count == 0)
            {
                throw new InvalidOperationException(
                    "ActionManager.CommitTransaction was called"
                    + " when there is no open transaction (TransactionStack is empty)."
                    + " Please examine the stack trace of this exception to find code"
                    + " which called CommitTransaction one time too many."
                    + " Normally you don't call OpenTransaction and CommitTransaction directly,"
                    + " but use using(var t = Transaction.Create(Root)) instead.");
            }

            Transaction committing = TransactionStack.Pop();

            if (committing.HasActions())
                RecordAction(committing);
        } // CommitTransaction
Exemple #11
0
 public void OpenTransaction(ITransaction t)
 {
     TransactionStack.Push(t);
 }
        } // CreateTransaction

        public static void OpenTransaction(Transaction t)
        {
            TransactionStack.Push(t);
        } // OpenTransaction
Exemple #13
0
 internal void OpenTransaction(ITransaction t)
 {
     TransactionStack.Push(t);
 }