/// <summary> /// Store the given <see cref="ITrigger" />. /// </summary> /// <param name="newTrigger">The <see cref="ITrigger" /> to be stored.</param> /// <param name="replaceExisting">If <see langword="true" />, any <see cref="ITrigger" /> existing in /// the <see cref="IJobStore" /> with the same name and group should /// be over-written.</param> public virtual void StoreTrigger(IOperableTrigger newTrigger, bool replaceExisting) { lock (lockObject) { if (this.CheckExists(newTrigger.Key)) { if (!replaceExisting) { throw new ObjectAlreadyExistsException(newTrigger); } // don't delete orphaned job, this trigger has the job anyways this.RemoveTrigger(newTrigger.Key, false); } if (this.RetrieveJob(newTrigger.JobKey) == null) { throw new JobPersistenceException("The job (" + newTrigger.JobKey + ") referenced by the trigger does not exist."); } var document = newTrigger.ToBsonDocument(); string state = "Waiting"; if (this.PausedTriggerGroups.FindOneByIdAs<BsonDocument>(newTrigger.Key.Group) != null || this.PausedJobGroups.FindOneByIdAs<BsonDocument>(newTrigger.JobKey.Group) != null) { state = "Paused"; if (this.BlockedJobs.FindOneByIdAs<BsonDocument>(newTrigger.JobKey.ToBsonDocument()) != null) { state = "PausedAndBlocked"; } } else if (this.BlockedJobs.FindOneByIdAs<BsonDocument>(newTrigger.JobKey.ToBsonDocument()) != null) { state = "Blocked"; } document.Add("State", state); this.Triggers.Save(document); } }