Example #1
0
        internal void ApplyState(
            StateHandlerCollection handlers, IEnumerable<IApplyStateFilter> filters)
        {
            if (handlers == null) throw new ArgumentNullException("handlers");
            if (filters == null) throw new ArgumentNullException("filters");

            using (var transaction = _connection.CreateWriteTransaction())
            {
                foreach (var handler in handlers.GetHandlers(OldStateName))
                {
                    handler.Unapply(this, transaction);
                }

                foreach (var filter in filters)
                {
                    filter.OnStateUnapplied(this, transaction);
                }

                transaction.SetJobState(JobId, NewState);

                foreach (var handler in handlers.GetHandlers(NewState.Name))
                {
                    handler.Apply(this, transaction);
                }

                foreach (var filter in filters)
                {
                    filter.OnStateApplied(this, transaction);
                }

                if (NewState.ExpireJobOnApply)
                {
                    transaction.ExpireJob(JobId, JobExpirationTimeout);
                }
                else
                {
                    transaction.PersistJob(JobId);
                }

                transaction.Commit();
            }
        }