public void Delete() { if (WorkItem == null) { return; } if (WorkItem.Status == WorkItemStatusEnum.Deleted) { return; } WorkItemUpdateResponse response = null; Platform.GetService <IWorkItemService>(s => response = s.Update(new WorkItemUpdateRequest { Delete = true, // TODO (Marmot) - This delete flag could be removed, and we could just use the status Identifier = WorkItem.Identifier })); // TODO (CR Jun 2012): The passed-in WorkItem contract should not be updated; // it should be done by the service and a new instance returned, or something should be returned by this // method to let the caller decide what to do. if (response.Item == null) { WorkItem.Status = WorkItemStatusEnum.Deleted; } else { WorkItem = response.Item; } }
public void Reset() { if (WorkItem == null) { return; } if (WorkItem.Status == WorkItemStatusEnum.Deleted) { return; } WorkItemUpdateResponse response = null; Platform.GetService <IWorkItemService>(s => response = s.Update(new WorkItemUpdateRequest { Status = WorkItemStatusEnum.Pending, ProcessTime = Platform.Time, Identifier = WorkItem.Identifier })); // TODO (CR Jun 2012): The passed-in WorkItem contract should not be updated; // it should be done by the service and a new instance returned, or something should be returned by this // method to let the caller decide what to do. if (response.Item == null) { WorkItem.Status = WorkItemStatusEnum.Deleted; } else { WorkItem = response.Item; } }
public WorkItemUpdateResponse Update(WorkItemUpdateRequest request) { var response = new WorkItemUpdateResponse(); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { var broker = context.GetWorkItemBroker(); var workItem = broker.GetWorkItem(request.Identifier); if (workItem == null) { response.Item = null; return response; } bool deleted = false; if (request.Delete.HasValue && request.Delete.Value) { if (workItem.Status != WorkItemStatusEnum.InProgress) { workItem.Status = WorkItemStatusEnum.Deleted; deleted = true; // If StudyDelete we're removing, "undelete" the study CheckDeleteStudyCanceled(context, workItem); } } if (!deleted) { if (request.ExpirationTime.HasValue) workItem.ExpirationTime = request.ExpirationTime.Value; if (request.Priority.HasValue) workItem.Priority = request.Priority.Value; if (request.Status.HasValue && workItem.Status != WorkItemStatusEnum.InProgress) { workItem.Status = request.Status.Value; if (request.Status.Value == WorkItemStatusEnum.Canceled) workItem.DeleteTime = Platform.Time.AddMinutes(WorkItemServiceSettings.Default.DeleteDelayMinutes); else if (request.Status.Value == WorkItemStatusEnum.Pending) { workItem.ScheduledTime = Platform.Time; workItem.FailureCount = 0; } // Cache the UserIdentityContext for later use by the shred if (workItem.Request.WorkItemType.Equals(ImportFilesRequest.WorkItemTypeString) && request.Status.Value == WorkItemStatusEnum.Pending) UserIdentityCache.Put(workItem.Oid, UserIdentityContext.CreateFromCurrentThreadPrincipal()); } if (request.ProcessTime.HasValue) workItem.ProcessTime = request.ProcessTime.Value; if (request.Cancel.HasValue && request.Cancel.Value) { if (workItem.Progress == null || workItem.Progress.IsCancelable) { if (workItem.Status.Equals(WorkItemStatusEnum.Idle) || workItem.Status.Equals(WorkItemStatusEnum.Pending)) { workItem.Status = WorkItemStatusEnum.Canceled; // If StudyDelete we're removing, "undelete" the study CheckDeleteStudyCanceled(context, workItem); } else if (workItem.Status.Equals(WorkItemStatusEnum.InProgress)) { // Abort the WorkItem WorkItemProcessor.Instance.Cancel(workItem.Oid); } } } } context.Commit(); response.Item = WorkItemDataHelper.FromWorkItem(workItem); } WorkItemPublishSubscribeHelper.PublishWorkItemChanged(WorkItemsChangedEventType.Update, response.Item); return response; }