/// <summary>
 /// Cancels the transaction.
 /// </summary>
 public void CancelTransaction()
 {
     if (TransactionStack.Count > 0)
     {
         TransactionStack.Pop();
     }
 }
Пример #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);
            }
        }
Пример #3
0
        } // CommitTransaction

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

                TransactionStack.Clear();
            }
        } // RollBackTransaction
Пример #4
0
 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();
            }
        }
Пример #6
0
        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);
            }
        }
Пример #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);
            }
        }
Пример #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);
            }
        }
Пример #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);
            }
        }
Пример #10
0
        } // 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
Пример #11
0
 public void OpenTransaction(ITransaction t)
 {
     TransactionStack.Push(t);
 }
Пример #12
0
        } // CreateTransaction

        public static void OpenTransaction(Transaction t)
        {
            TransactionStack.Push(t);
        } // OpenTransaction
Пример #13
0
 internal void OpenTransaction(ITransaction t)
 {
     TransactionStack.Push(t);
 }