private void OnReceiveMoveImageRequest(ClearCanvas.Dicom.Network.DicomServer server, byte presentationID, DicomMessage message, IDicomServiceNode remoteAEInfo) { string studyInstanceUid = message.DataSet[DicomTags.StudyInstanceUid].GetString(0, string.Empty); string seriesInstanceUid = message.DataSet[DicomTags.SeriesInstanceUid].GetString(0, string.Empty); var sopInstanceUids = (string[])message.DataSet[DicomTags.SopInstanceUid].Values; lock (_syncLock) { using (var context = new DataAccessContext()) { var s = context.GetStudyStoreQuery().StudyQuery(new StudyRootStudyIdentifier {StudyInstanceUid = studyInstanceUid}); var identifier = CollectionUtils.FirstElement(s); var client = new DicomSendBridge(); client.SendSops(remoteAEInfo, identifier, seriesInstanceUid, sopInstanceUids, WorkItemPriorityEnum.High); _sendOperations.Add(new SendOperationInfo(client.WorkItem, message.MessageId, presentationID, server) { SubOperations = sopInstanceUids.Length }); } } }
private void OnReceiveMoveSeriesRequest(ClearCanvas.Dicom.Network.DicomServer server, byte presentationID, DicomMessage message, IDicomServiceNode remoteAEInfo) { string studyInstanceUid = message.DataSet[DicomTags.StudyInstanceUid].GetString(0, ""); var seriesUids = (string[])message.DataSet[DicomTags.SeriesInstanceUid].Values; lock (_syncLock) { int subOperations = 0; using (var context = new DataAccessContext()) { var results = context.GetStudyStoreQuery().SeriesQuery(new SeriesIdentifier { StudyInstanceUid = studyInstanceUid, }); foreach (SeriesIdentifier series in results) { foreach (string seriesUid in seriesUids) if (series.SeriesInstanceUid.Equals(seriesUid) && series.NumberOfSeriesRelatedInstances.HasValue) { subOperations += series.NumberOfSeriesRelatedInstances.Value; break; } } var s = context.GetStudyStoreQuery().StudyQuery(new StudyRootStudyIdentifier {StudyInstanceUid = studyInstanceUid}); var identifier = CollectionUtils.FirstElement(s); var client = new DicomSendBridge(); client.SendSeries(remoteAEInfo, identifier, seriesUids, WorkItemPriorityEnum.High); _sendOperations.Add(new SendOperationInfo(client.WorkItem, message.MessageId, presentationID, server) { SubOperations = subOperations }); } } }
private void OnReceiveMoveStudiesRequest(ClearCanvas.Dicom.Network.DicomServer server, byte presentationID, DicomMessage message, IDicomServiceNode remoteAEInfo) { IEnumerable<string> studyUids = (string[])message.DataSet[DicomTags.StudyInstanceUid].Values; foreach (string studyUid in studyUids) { lock (_syncLock) { int subOperations = 0; using (var context = new DataAccessContext()) { var s = context.GetStudyStoreQuery().StudyQuery(new StudyRootStudyIdentifier {StudyInstanceUid = studyUid}); var identifier = CollectionUtils.FirstElement(s); if (identifier.NumberOfStudyRelatedInstances.HasValue) subOperations = identifier.NumberOfStudyRelatedInstances.Value; var client = new DicomSendBridge(); client.SendStudy(remoteAEInfo, identifier, WorkItemPriorityEnum.High); _sendOperations.Add(new SendOperationInfo(client.WorkItem, message.MessageId, presentationID, server) { SubOperations = subOperations }); } } } }
private void SendSeriesInternal() { if (!Enabled || this.Context.SelectedSeries == null) return; if (SelectedSeries.Any(series => series.ScheduledDeleteTime.HasValue)) { Context.DesktopWindow.ShowMessageBox(SR.MessageCannotSendSeriesScheduledForDeletion, MessageBoxActions.Ok); return; } var serverTreeComponent = new ServerTreeComponent { IsReadOnly = true, ShowCheckBoxes = false, ShowLocalServerNode = false, ShowTitlebar = false, ShowTools = false }; var dialogContainer = new SimpleComponentContainer(serverTreeComponent); ApplicationComponentExitCode code = ApplicationComponent.LaunchAsDialog( Context.DesktopWindow, dialogContainer, SR.TitleSendSeries); if (code != ApplicationComponentExitCode.Accepted) return; if (serverTreeComponent.SelectedServers.Count == 0) { Context.DesktopWindow.ShowMessageBox(SR.MessageSelectDestination, MessageBoxActions.Ok); return; } if (serverTreeComponent.SelectedServers.Count > 1) { if (Context.DesktopWindow.ShowMessageBox(SR.MessageConfirmSendToMultipleServers, MessageBoxActions.YesNo) == DialogBoxAction.No) return; } var client = new DicomSendBridge(); var seriesUids = Context.SelectedSeries.Select(item => item.SeriesInstanceUid).ToList(); foreach (var destination in serverTreeComponent.SelectedServers) { try { client.SendSeries(destination, Context.Study, seriesUids.ToArray(), WorkItemPriorityEnum.High); DateTime? studyDate = DateParser.Parse(Context.Study.StudyDate); Context.DesktopWindow.ShowAlert(AlertLevel.Info, string.Format(SR.MessageFormatSendSeriesScheduled, seriesUids.Count, destination.Name, Context.Study.PatientsName.FormattedName, studyDate.HasValue ? Format.Date(studyDate.Value) : string.Empty, Context.Study.AccessionNumber), SR.LinkOpenActivityMonitor, ActivityMonitorManager.Show, true); } catch (EndpointNotFoundException) { Context.DesktopWindow.ShowMessageBox(SR.MessageSendDicomServerServiceNotRunning, MessageBoxActions.Ok); } catch (Exception e) { ExceptionHandler.Report(e, SR.MessageFailedToSendSeries, Context.DesktopWindow); } } }
public void PublishRemote(ICollection<DicomFile> files, IDicomServiceNode destinationServer) { if (files == null || files.Count == 0) return; // cache files to temporary storage string tempFileDirectory; List<string> savedFiles; SaveFiles(files, destinationServer.AETitle, out tempFileDirectory, out savedFiles); try { var client = new DicomSendBridge(); client.PublishFiles(destinationServer, new StudyRootStudyIdentifier(CollectionUtils.FirstElement(files).DataSet), DeletionBehaviour.DeleteOnSuccess, savedFiles); } catch (Exception ex) { var message = string.Format("Failed to connect to the dicom send service to send files. The files must be published manually (location: {0})", tempFileDirectory); throw new DicomFilePublishingException(message, ex); } }
private void SendStudy(StudyTableItem study, DicomServiceNodeList destinations) { var client = new DicomSendBridge(); foreach (var destination in destinations) { client.SendStudy(destination, study, WorkItemPriorityEnum.High); } }