private ImageViewerComponent CreateViewerComponent(StartViewerApplicationRequest request) { var keyImagesOnly = request.LoadStudyOptions != null && request.LoadStudyOptions.KeyImagesOnly; var excludePriors = request.LoadStudyOptions != null && request.LoadStudyOptions.ExcludePriors; if (keyImagesOnly) { var layoutManager = new ImageViewer.Layout.Basic.LayoutManager() { LayoutHook = new KeyImageLayoutHook() }; //override the KO options const string ko = "KO"; var realOptions = new KeyImageDisplaySetCreationOptions(layoutManager.DisplaySetCreationOptions[ko]); layoutManager.DisplaySetCreationOptions[ko] = realOptions; if (excludePriors) { return new ImageViewerComponent(layoutManager, PriorStudyFinder.Null); } else { return new ImageViewerComponent(layoutManager); } } else { ImageViewer.Layout.Basic.LayoutManager layoutManager; layoutManager = new ImageViewer.Layout.Basic.LayoutManager() { LayoutHook = (request.LoadStudyOptions!=null && request.LoadStudyOptions.PreferredLayout != null) ? new CustomLayoutHook(request.LoadStudyOptions.PreferredLayout.Rows, request.LoadStudyOptions.PreferredLayout.Columns) : new CustomLayoutHook() }; if (excludePriors) { return new ImageViewerComponent(layoutManager, PriorStudyFinder.Null); } else { return new ImageViewerComponent(layoutManager); } } }
private static IList<StudyRootStudyIdentifier> FindStudies(StartViewerApplicationRequest request) { bool invalidRequest = true; List<StudyRootStudyIdentifier> results = new List<StudyRootStudyIdentifier>(); using (StudyRootQueryBridge bridge = new StudyRootQueryBridge(Platform.GetService<IStudyRootQuery>())) { if (request.StudyInstanceUid != null && request.StudyInstanceUid.Length > 0) { foreach (string studyUid in request.StudyInstanceUid) { //TODO (CR May 2010): can actually trigger a query of all studies if (!String.IsNullOrEmpty(studyUid)) invalidRequest = false; //TODO (CR May 2010): if request.AeTitle is set, assign RetrieveAeTitle parameter in // StudyRootStudyIndentifer to this value. Update the query code to then only // search this specified partition and remove the loop code below that looks // for matching AeTitles. StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier { StudyInstanceUid = studyUid }; IList<StudyRootStudyIdentifier> studies = bridge.StudyQuery(identifier); bool found = false; foreach (StudyRootStudyIdentifier study in studies) { if (!string.IsNullOrEmpty(request.AeTitle) && !study.RetrieveAeTitle.Equals(request.AeTitle)) continue; results.Add(study); found = true; } if (!found) throw new NotFoundLoadStudyException(studyUid); } } if (request.PatientId != null && request.PatientId.Length > 0) { foreach (string patientId in request.PatientId) { if (!String.IsNullOrEmpty(patientId)) invalidRequest = false; StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier { PatientId = patientId }; IList<StudyRootStudyIdentifier> studies = bridge.StudyQuery(identifier); bool found = false; foreach (StudyRootStudyIdentifier study in studies) { if (!string.IsNullOrEmpty(request.AeTitle) && !study.RetrieveAeTitle.Equals(request.AeTitle)) continue; results.Add(study); found = true; } if (!found) throw new PatientStudiesNotFoundException(patientId); } } if (request.AccessionNumber != null && request.AccessionNumber.Length > 0) { foreach (string accession in request.AccessionNumber) { if (!String.IsNullOrEmpty(accession)) invalidRequest = false; StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier { AccessionNumber = accession }; IList<StudyRootStudyIdentifier> studies = bridge.StudyQuery(identifier); bool found = false; foreach (StudyRootStudyIdentifier study in studies) { if (!string.IsNullOrEmpty(request.AeTitle) && !study.RetrieveAeTitle.Equals(request.AeTitle)) continue; results.Add(study); found = true; } if (!found) throw new AccessionStudiesNotFoundException(accession); } } } if (invalidRequest) throw new InvalidRequestException(); return results; }