private IWorkItemProcessor InsertImportFiles(WorkItemPriorityEnum priority, WorkItemStatusEnum status) { var rq = new WorkItemInsertRequest { Request = new ImportFilesRequest() { Priority = priority, BadFileBehaviour = BadFileBehaviourEnum.Delete, FileImportBehaviour = FileImportBehaviourEnum.Save, FilePaths = new List<string>(), } }; var rsp = WorkItemService.Instance.Insert(rq); var updateRequest = new WorkItemUpdateRequest { Status = status, Identifier = rsp.Item.Identifier }; // TODO (CR Jul 2012): Can I actually force an item to "In Progress" this way? Probably shouldn't be able to do that. WorkItemService.Instance.Update(updateRequest); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { var broker = context.GetWorkItemBroker(); var d = new ImportItemProcessor(); d.Initialize(new WorkItemStatusProxy(broker.GetWorkItem(rsp.Item.Identifier))); return d; } }
public WorkItemInsertResponse Insert(WorkItemInsertRequest request) { try { return WorkItemService.Instance.Insert(request); } catch (Exception e) { Platform.Log(LogLevel.Error, e); var message = SR.ExceptionErrorProcessingInsert; var exceptionMessage = String.Format("{0}\nDetail:{1}", message, e.Message); throw new WorkItemServiceException(exceptionMessage); } }
public WorkItemInsertResponse Insert(WorkItemInsertRequest request) { // TODO (CR Jun 2012): The fact that there is special processing in here for particular types of work items // indicates there is something wrong with the design that may make adding custom work item types difficult. // Maybe the different "processors" need to perform the insert, or at least have some kind of method (rule) // for processing the insert? var response = new WorkItemInsertResponse(); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { DateTime now = Platform.Time; var broker = context.GetWorkItemBroker(); if (request.Request.WorkItemType.Equals(ReindexRequest.WorkItemTypeString)) { var list = broker.GetWorkItems(request.Request.WorkItemType, null, null); foreach (var workItem in list) { if (workItem.Status == WorkItemStatusEnum.Pending || workItem.Status == WorkItemStatusEnum.InProgress) { response.Item = WorkItemDataHelper.FromWorkItem(workItem); return response; } } } var deleteStudyRequest = request.Request as DeleteStudyRequest; if (deleteStudyRequest != null) { var list = broker.GetWorkItems(request.Request.WorkItemType, null, deleteStudyRequest.Study.StudyInstanceUid); foreach (var workItem in list) { if (workItem.Status == WorkItemStatusEnum.Pending || workItem.Status == WorkItemStatusEnum.InProgress) { // Mark studies to delete as "deleted" in the database. var studyBroker = context.GetStudyBroker(); var study = studyBroker.GetStudy(deleteStudyRequest.Study.StudyInstanceUid); if (study != null) { study.Deleted = true; context.Commit(); } response.Item = WorkItemDataHelper.FromWorkItem(workItem); return response; } } } var item = new WorkItem { Request = request.Request, Progress = request.Progress, Type = request.Request.WorkItemType, Priority = request.Request.Priority, ScheduledTime = now.AddSeconds(WorkItemServiceSettings.Default.InsertDelaySeconds), ProcessTime = now.AddSeconds(WorkItemServiceSettings.Default.InsertDelaySeconds), DeleteTime = now.AddMinutes(WorkItemServiceSettings.Default.DeleteDelayMinutes), ExpirationTime = now.AddSeconds(WorkItemServiceSettings.Default.ExpireDelaySeconds), RequestedTime = now, Status = WorkItemStatusEnum.Pending }; var studyRequest = request.Request as WorkItemStudyRequest; if (studyRequest != null) { item.StudyInstanceUid = studyRequest.Study.StudyInstanceUid; if (request.Request.WorkItemType.Equals(DeleteStudyRequest.WorkItemTypeString)) { // Mark studies to delete as "deleted" in the database. var studyBroker = context.GetStudyBroker(); var study = studyBroker.GetStudy(studyRequest.Study.StudyInstanceUid); if (study != null) study.Deleted = true; } } broker.AddWorkItem(item); context.Commit(); response.Item = WorkItemDataHelper.FromWorkItem(item); } // Cache the UserIdentityContext for later use by the shred if (request.Request.WorkItemType.Equals(ImportFilesRequest.WorkItemTypeString)) UserIdentityCache.Put(response.Item.Identifier,UserIdentityContext.CreateFromCurrentThreadPrincipal()); WorkItemPublishSubscribeHelper.PublishWorkItemChanged(WorkItemsChangedEventType.Update, response.Item); if (WorkItemProcessor.Instance != null) WorkItemProcessor.Instance.SignalThread(); return response; }
public WorkItemInsertResponse Insert(WorkItemInsertRequest request) { return(Channel.Insert(request)); }
private IWorkItemProcessor InsertStudyDelete(DicomMessageBase msg, WorkItemPriorityEnum priority, WorkItemStatusEnum status) { var rq = new WorkItemInsertRequest { Request = new DeleteStudyRequest { Patient = new WorkItemPatient(msg.DataSet), Study = new WorkItemStudy(msg.DataSet), Priority = priority } }; var rsp = WorkItemService.Instance.Insert(rq); var updateRequest = new WorkItemUpdateRequest { Status = status, Identifier = rsp.Item.Identifier }; WorkItemService.Instance.Update(updateRequest); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { var broker = context.GetWorkItemBroker(); var d = new DeleteStudyItemProcessor(); d.Initialize(new WorkItemStatusProxy(broker.GetWorkItem(rsp.Item.Identifier))); return d; } }
private IWorkItemProcessor InsertReapplyRules(WorkItemPriorityEnum priority, WorkItemStatusEnum status) { var rq = new WorkItemInsertRequest { Request = new ReapplyRulesRequest { ApplyDeleteActions = true, ApplyRouteActions = true, Priority = priority } }; var rsp = WorkItemService.Instance.Insert(rq); var updateRequest = new WorkItemUpdateRequest { Status = status, Identifier = rsp.Item.Identifier }; WorkItemService.Instance.Update(updateRequest); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { var broker = context.GetWorkItemBroker(); var d = new ReapplyRulesItemProcessor(); d.Initialize(new WorkItemStatusProxy(broker.GetWorkItem(rsp.Item.Identifier))); return d; } }
private IWorkItemProcessor InsertStudyProcess(DicomMessageBase msg, WorkItemPriorityEnum priority, WorkItemStatusEnum status, DateTime? processTime = null) { var rq = new WorkItemInsertRequest { Request = new DicomReceiveRequest { Patient = new WorkItemPatient(msg.DataSet), Study = new WorkItemStudy(msg.DataSet), SourceServerName = "TEST", Priority = priority } }; var rsp = WorkItemService.Instance.Insert(rq); var updateRequest = new WorkItemUpdateRequest { Status = status, Identifier = rsp.Item.Identifier, ProcessTime = processTime }; WorkItemService.Instance.Update(updateRequest); using (var context = new DataAccessContext(DataAccessContext.WorkItemMutex)) { var broker = context.GetWorkItemBroker(); var d = new StudyProcessProcessor(); d.Initialize(new WorkItemStatusProxy(broker.GetWorkItem(rsp.Item.Identifier))); return d; } }