public async Task <string> UpdateHighScore(StudyItem document)
        {
            // Set header authorization
            client.DefaultRequestHeaders.Accept.Clear();
            //client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "NWEzOTVkNDktZmJlMy00ZDdkLWE5OTktMjlhMTQ2MzkzMmYxLWJsdWVtaXg6NjFlYTc2M2Y0YzIzNDc0YjYzMjgyNTlkZjI0ZmY3NGU2YWE4MmZmMTU0OTFhZWQ4M2U5ZGE5YWI5OWEzMjU4NQ==");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header


            //string should be serialized of StudyItem
            string      payload = JsonConvert.SerializeObject(document);
            HttpContent content = new StringContent(payload, Encoding.UTF8, "application/json");
            string      uri     = "https://5a395d49-fbe3-4d7d-a999-29a1463932f1-bluemix.cloudant.com/mydb/" + document._id.ToString();

            // Call asynchronous network methods in a try/catch block to handle exceptions.
            try
            {
                HttpResponseMessage response = await client.PutAsync(uri, content);

                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();

                return(responseBody);
            }
            catch (HttpRequestException e)
            {
                Debug.Log("\nException Caught!");
                Debug.Log("Message : " + e.Message);
                return(("Message : " + e.Message).ToString());
            }
        }
 public static List <StudyItem> GetSweeps(List <StudyItem> model, SearchResponse allsweeps, string study, string agency)
 {
     // move
     foreach (var sweep in allsweeps.Results)
     {
         StudyItem item = new StudyItem();
         item.AgencyId      = sweep.AgencyId;
         item.DisplayLabel  = sweep.DisplayLabel;
         item.Identifier    = sweep.Identifier;
         item.ReferenceItem = study;
         if (agency == null)
         {
             model.Add(item);
         }
         else
         {
             if (sweep.AgencyId == agency)
             {
                 model.Add(item);
             }
         }
     }
     model = model.OrderBy(r => r.ReferenceItem).ToList();
     return(model);
 }
        public static List <StudyItem> BuildSweepsNodes(List <StudyItem> model, SearchResponse allsweeps, string study, string agency, List <TreeViewNode> nodes, string parent)
        {
            int  i     = 1;
            bool found = false;

            foreach (var sweep in allsweeps.Results)
            {
                StudyItem item = new StudyItem();
                item.AgencyId      = sweep.AgencyId;
                item.DisplayLabel  = sweep.DisplayLabel;
                item.Identifier    = sweep.Identifier;
                item.ReferenceItem = study;
                if (sweep.AgencyId == agency)
                {
                    State         cstate = new State();
                    List <string> search = new List <string>()
                    {
                        item.AgencyId + "," + item.Identifier.ToString() + "," + item.DisplayLabel
                    };
                    //if (selecteditems != null) { found = search.Any(s => selecteditems.Contains(s)); } else { found = false; }
                    cstate.selected = found;
                    nodes.Add(new TreeViewNode {
                        id = parent + " " + item.Identifier.ToString(), parent = parent.ToString(), text = item.DisplayLabel, state = cstate
                    });
                }
                i++;
            }
            model = model.OrderBy(r => r.ReferenceItem).ToList();
            return(model);
        }
Example #4
0
    private void InitFile()
    {
        Util.DeleteChildren(parent);
        string path = "";

#if UNITY_EDITOR
        path = Application.streamingAssetsPath + "/Study";
#else
        path = Application.persistentDataPath + "/Study";
#endif
        path = Application.streamingAssetsPath + "/Study";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        DirectoryInfo direction = new DirectoryInfo(path);
        FileInfo[]    files     = direction.GetFiles(".", SearchOption.AllDirectories);
        index = 1;
        for (int i = 0; i < files.Length; i++)
        {
            if (files[i].Name.EndsWith(".txt") /* || files[i].Name.EndsWith(".pdf") || files[i].Name.EndsWith(".word")*/)
            {
                Debug.Log(files[i].Name);
                StudyInfo info = new StudyInfo();
                info.name = files[i].Name;
                info.url  = files[i].FullName;
                info.type = FileType.TXT;
                StudyItem item = Instantiate(itemPrefab);
                item.SetContent(info);
                item.transform.SetParent(parent, false);
            }
        }
    }
 public ActionResult Add(StudyItem entity)
 {
     entity.RegTime     = DateTime.Now;
     entity.ModfiedTime = DateTime.Now;
     entity.DelFlag     = true;
     StudyItemService.Add(entity);
     return(Json(new { status = 1, errorMsg = "操作成功!!" }));
 }
Example #6
0
        /// <summary>
        /// Activate the tool action.
        /// </summary>
        /// <remarks>
        /// This function detects secondary monitor if availible then open the study in separate window and show it in the secondary monitor
        /// </remarks>
        public void Activate()
        {
            //Get Current Selected Study
            StudyItem item = this.Context.SelectedStudy;

            if (item != null)
            {
                string[] studyInstanceUids = { "" + item.StudyInstanceUID + "" };

                //Create an OpenStudyArgs to be used later to open the study
                //Note that I used WindowBehaviour.Separate to open the study in a separate Form
                OpenStudyArgs args = new OpenStudyArgs(studyInstanceUids, item.Server, item.StudyLoaderName, WindowBehaviour.Separate);

                //Open the selected study
                OpenStudyHelper.OpenStudies(args);

                //Move it to secondary screen if only there are more than one screen
                if (System.Windows.Forms.Screen.AllScreens.Length > 1)
                {
                    //Get All System Screens
                    System.Windows.Forms.Screen[] Screens = System.Windows.Forms.Screen.AllScreens;

                    //Create a variable to hold the secondary screen variable and assign it to null
                    System.Windows.Forms.Screen SecScreenVar;
                    SecScreenVar = null;

                    //assign the SecScreenVar to the secondary screen
                    foreach (System.Windows.Forms.Screen SecScreen in Screens)
                    {
                        //if its the secondary assign it
                        if (SecScreen.Primary == false)
                        {
                            SecScreenVar = SecScreen;
                        }
                    }

                    //If a secondary screen found
                    if (SecScreenVar != null)
                    {
                        //Get the newly opened study window
                        Form currentForm = Form.ActiveForm;

                        //Set its start position to manual
                        currentForm.StartPosition = FormStartPosition.Manual;

                        //Set its location to the secondary screen
                        currentForm.Location = SecScreenVar.WorkingArea.Location;

                        //Set its size to the secondary screen size
                        currentForm.Size = new Size(SecScreenVar.WorkingArea.Width, SecScreenVar.WorkingArea.Height);

                        //Reshow it in its new location
                        currentForm.Hide();
                        currentForm.Show();
                    }
                }
            }
        }
Example #7
0
 private void Update()
 {
     if (lastItem != selectItem)
     {
         foreBg.SetActive(false);
         studyDetail.SetContent(selectItem.info);
         lastItem = selectItem;
     }
 }
Example #8
0
            protected override DragDropOption PerformDropForeignItems(IList <IGalleryItem> droppingItems, IGalleryItem targetItem, DragDropOption actions, ModifierFlags modifiers)
            {
                StudyItem      study  = (StudyItem)targetItem;
                DragDropOption action = DragDropOption.None;

                foreach (IGalleryItem droppingItem in droppingItems)
                {
                    if (droppingItem is SeriesItem)
                    {
                        SeriesItem series = (SeriesItem)droppingItem;
                        if (modifiers == ModifierFlags.None)
                        {
                            if (!study.Series.Contains(series))
                            {
                                study.Series.Add(series.Copy());
                                action = DragDropOption.Move;
                            }
                        }
                        else if (modifiers == ModifierFlags.Shift)
                        {
                            study.Series.Add(series.Copy());
                            action = DragDropOption.Copy;
                        }
                    }
                    else if (droppingItem is ImageItem)
                    {
                        ImageItem image = (ImageItem)droppingItem;
                        if (modifiers == ModifierFlags.None)
                        {
                            SeriesNode seriesNode = (SeriesNode)GetNodeAncestor(image.Node, 1);
                            StudyNode  studyNode  = (StudyNode)GetNodeAncestor(seriesNode, 1);
                            if (study.Node != studyNode)
                            {
                                SeriesItem series = new SeriesItem(seriesNode.Copy(false));
                                series.Images.Add(image.Copy());
                                series.UpdateIcon();
                                study.Series.Add(series);
                                action = DragDropOption.Move;
                            }
                        }
                        else if (modifiers == ModifierFlags.Shift)
                        {
                            SeriesNode seriesNode = (SeriesNode)GetNodeAncestor(image.Node, 1);
                            SeriesItem series     = new SeriesItem(seriesNode.Copy(false));
                            series.Images.Add(image.Copy());
                            series.UpdateIcon();
                            study.Series.Add(series);
                            action = DragDropOption.Copy;
                        }
                    }
                }
                return(action);
            }
        private static StudyItem ConvertToStudyItem(StudyRootStudyIdentifier study)
        {
            study.ResolveServer(true);
            var item = new StudyItem(study);

            if (String.IsNullOrEmpty(item.InstanceAvailability))
            {
                item.InstanceAvailability = "ONLINE";
            }

            return(item);
        }
        private StudyItem ConvertToStudyItem(StudyRootStudyIdentifier study)
        {
            string            studyLoaderName;
            ApplicationEntity applicationEntity;

            ServerPartition partiton = ServerPartitionMonitor.Instance.GetPartition(study.RetrieveAeTitle);

            if (partiton != null)
            {
                studyLoaderName = WebViewerServices.Default.StudyLoaderName;
                string host       = WebViewerServices.Default.ArchiveServerHostname;
                int    port       = WebViewerServices.Default.ArchiveServerPort;
                int    headerPort = WebViewerServices.Default.ArchiveServerHeaderPort;
                int    wadoPort   = WebViewerServices.Default.ArchiveServerWADOPort;

                applicationEntity = new ApplicationEntity()
                {
                    AETitle             = study.RetrieveAeTitle,
                    ScpParameters       = new ScpParameters(host, port),
                    StreamingParameters = new StreamingParameters(headerPort, wadoPort)
                };
            }
            else
            {
                Device theDevice = FindServer(study.RetrieveAeTitle);

                if (theDevice != null)
                {
                    // TODO (Marmot) - Need to get this to work with changes in marmot
                    applicationEntity = new ApplicationEntity()
                    {
                        ScpParameters = new ScpParameters(theDevice.IpAddress, theDevice.Port), AETitle = theDevice.AeTitle
                    };
                }
                else             // (node == null)
                {
                    Platform.Log(LogLevel.Warn,
                                 String.Format("Unable to find server information '{0}' in order to load study '{1}'",
                                               study.RetrieveAeTitle, study.StudyInstanceUid));

                    return(null);
                }
            }

            var item = new StudyItem(study, ServiceNodeExtensions.ToServiceNode(applicationEntity));

            if (String.IsNullOrEmpty(item.InstanceAvailability))
            {
                item.InstanceAvailability = "ONLINE";
            }

            return(item);
        }
Example #11
0
        public ActionResult Add(int id = 0, string content = "")
        {
            StudyItem model = new StudyItem();

            model.RegTime       = DateTime.Now;
            model.ModfiedTime   = DateTime.Now;
            model.StudyOnlineID = id;
            model.DelFlag       = true;
            model.Context       = content;
            model.UserInfoID    = 1;
            StudyItemService.Add(model);
            return(Json(new { status = 1, msg = "成功" }));
        }
Example #12
0
            protected override DragDropOption CheckDropForeignItems(IList <IGalleryItem> droppingItems, IGalleryItem targetItem, DragDropOption actions, ModifierFlags modifiers)
            {
                StudyItem study   = (StudyItem)targetItem;
                bool      allowed = true;

                foreach (IGalleryItem droppingItem in droppingItems)
                {
                    if (droppingItem is SeriesItem)
                    {
                        SeriesItem series = (SeriesItem)droppingItem;
                        if (modifiers == ModifierFlags.None)
                        {
                            allowed &= !(study.Series.Contains(series));                             // disallow moves where the item is already in the target tree
                        }
                        else if (modifiers == ModifierFlags.Shift)
                        {
                            allowed &= true;
                        }
                    }
                    else if (droppingItem is ImageItem)
                    {
                        ImageItem image = (ImageItem)droppingItem;
                        if (modifiers == ModifierFlags.None)
                        {
                            allowed &= (study.Node != GetNodeAncestor(image.Node, 2));                             // disallow moves where the item is already in the target tree
                        }
                        else if (modifiers == ModifierFlags.Shift)
                        {
                            allowed &= true;
                        }
                    }
                    else
                    {
                        allowed &= false;
                    }
                }

                if (allowed)
                {
                    if (modifiers == ModifierFlags.None)
                    {
                        return(DragDropOption.Move);
                    }
                    else if (modifiers == ModifierFlags.Shift)
                    {
                        return(DragDropOption.Copy);
                    }
                }
                return(DragDropOption.None);
            }
        internal RenameStudyComponent(StudyItem studyItem)
        {
            _original = new StudyData();
            _original.AccessionNumber      = studyItem.AccessionNumber;
            _original.PatientsName         = studyItem.PatientsName;
            _original.PatientId            = studyItem.PatientId;
            _original.StudyDescription     = studyItem.StudyDescription;
            _original.PatientsBirthDateRaw = studyItem.PatientsBirthDate;
            _original.StudyDateRaw         = studyItem.StudyDate;

            _renamed = _original.Clone();

            _validator = new DicomAnonymizer.ValidationStrategy();
        }
        public override StudyItemList Query(QueryParameters queryParams, object targetServer)
        {
            ApplicationEntity selectedServer = (ApplicationEntity)targetServer;

            StudyItemList list = new StudyItemList();

            foreach (var key in MINTApi.GetStudies(selectedServer.Host))
            {
                var item = new StudyItem(key.StudyUid, key, MINTApi.LoaderName);

                MINTApi.FillStudyItem(item, key);
                list.Add(item);
            }

            return(list);
        }
        /// <summary>
        /// Queries local datastore for studies based on specified search function.
        /// </summary>
        private void QueryStudies(string query, Converter <string, KeyValuePair <string, double>[]> searchFunc)
        {
            // if there is a previous task that may still be running, disconnect it so we effectively abandon it
            if (_queryStudiesTask != null)
            {
                _queryStudiesTask.ProgressUpdated -= OnQueryStudiesProgressUpdate;
            }

            // clear existing items
            _searchResults.Items.Clear();

            // create new task to query similar studies asynchronously so as not to block UI
            _queryStudiesTask = new BackgroundTask(
                delegate(IBackgroundTaskContext ctx)
            {
                KeyValuePair <string, double>[] similarStudyUids = searchFunc(query);
                foreach (KeyValuePair <string, double> kvp in similarStudyUids)
                {
                    string studyUid = kvp.Key;
                    double score    = kvp.Value;

                    QueryParameters queryParams = new QueryParameters();
                    queryParams.Add("PatientsName", "");
                    queryParams.Add("PatientId", "");
                    queryParams.Add("AccessionNumber", "");
                    queryParams.Add("StudyDescription", "");
                    queryParams.Add("ModalitiesInStudy", "");
                    queryParams.Add("StudyDate", "");
                    queryParams.Add("StudyInstanceUid", studyUid);

                    // currently only the local dicom store is supported
                    StudyItemList similarStudyItems = ImageViewerComponent.FindStudy(queryParams, null, "DICOM_LOCAL");

                    // should only ever be one result at most
                    // if zero results, it means the study exists in the tag database but not in the local dicom store
                    StudyItem studyItem = CollectionUtils.FirstElement(similarStudyItems);
                    if (studyItem != null)
                    {
                        StudyTableEntry entry = new StudyTableEntry(studyItem, MakeTagsString(_database.GetTagsForStudy(studyUid)), score);
                        ctx.ReportProgress(new StudyQueryProgress(entry));
                    }
                }
            }, false);

            _queryStudiesTask.ProgressUpdated += OnQueryStudiesProgressUpdate;
            _queryStudiesTask.Run();
        }
        public void FullStudyItemFromXmlTest()
        {
            var item = new StudyItem("11111", null, "");

            Stream xmlStrm = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(studySummaryXml));

            MINTApi.FullStudyItemFromXml(item, xmlStrm);

            Assert.AreEqual("20030303", item.StudyDate);
            Assert.AreEqual("194001.000000", item.StudyTime);
            Assert.AreEqual("7570281", item.AccessionNumber);
            Assert.AreEqual(new PersonName("REF^PHYS^HERE"), item.ReferringPhysiciansName);
            Assert.AreEqual(new PersonName("NAME^HERE"), item.PatientsName);
            Assert.AreEqual("1122334455", item.PatientId);
            Assert.AreEqual("19920601", item.PatientsBirthDate);
            Assert.AreEqual("M", item.PatientsSex);
            Assert.AreEqual("7570281", item.StudyId);
        }
        private static MINTApi.StudyKey MINTStudyKey(StudyItem studyItem)
        {
            MINTApi.StudyKey key = studyItem.Server as MINTApi.StudyKey;
            if (key == null && Properties.Settings.Default.EnableXRef)
            {
                //we must be looking at studies listed in another server - see if the study is available in
                //the MINT service and cache it if it is.
                if (!_cachedKeys.TryGetValue(studyItem.StudyInstanceUid, out key))
                {
                    key = MINTApi.GetStudyKey(Properties.Settings.Default.MINTHostname,
                                              studyItem.StudyInstanceUid);

                    if (key != null)
                    {
                        _cachedKeys[studyItem.StudyInstanceUid] = key;
                    }
                }
            }
            return(key);
        }
        public static List <StudyItem> BuildSweepsTree(List <StudyItem> model, SearchResponse allsweeps, string study, string agency, List <TreeViewNode> nodes, string parent)
        {
            // move
            int i = 1;

            foreach (var sweep in allsweeps.Results)
            {
                StudyItem item = new StudyItem();
                item.AgencyId      = sweep.AgencyId;
                item.DisplayLabel  = sweep.DisplayLabel;
                item.Identifier    = sweep.Identifier;
                item.ReferenceItem = study;
                if (sweep.AgencyId == agency)
                {
                    model.Add(item);
                    nodes.Add(new TreeViewNode {
                        id = parent + " " + item.Identifier.ToString(), parent = parent.ToString(), text = item.DisplayLabel
                    });
                }
                i++;
            }
            model = model.OrderBy(r => r.ReferenceItem).ToList();
            return(model);
        }
Example #19
0
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity targetServer)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");
            Platform.CheckForNullReference(targetServer, "targetServer");

            var selectedServer = targetServer.ToServiceNode();

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8 = "ISO_IR 192";
            var requestCollection = new DicomAttributeCollection { SpecificCharacterSet = utf8 };
            requestCollection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

			requestCollection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
			requestCollection[DicomTags.StudyInstanceUid].SetStringValue("");

			requestCollection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
			requestCollection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
			requestCollection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
			requestCollection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
			requestCollection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
			requestCollection[DicomTags.StudyTime].SetStringValue("");
			requestCollection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
			requestCollection[DicomTags.PatientsBirthDate].SetStringValue("");
			requestCollection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
			requestCollection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
			requestCollection[DicomTags.InstanceAvailability].SetEmptyValue(); // must not be included in request

			requestCollection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
			var codeValue = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
			var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");
			if (codeValue != null || codeMeaning != null)
			{
				var codeSequenceMacro = new CodeSequenceMacro
				{
					CodingSchemeDesignator = "",
					CodeValue = codeValue,
					CodeMeaning = codeMeaning
				};
				requestCollection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
			}

			requestCollection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
			codeValue = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
			codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
			if (codeValue != null || codeMeaning != null)
			{
				var codeSequenceMacro = new CodeSequenceMacro
				{
					CodingSchemeDesignator = "",
					CodeValue = codeValue,
					CodeMeaning = codeMeaning
				};
				requestCollection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
			}

			requestCollection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
			requestCollection[DicomTags.ResponsiblePersonRole].SetStringValue("");
			requestCollection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams,"ResponsibleOrganization"));

			IList<DicomAttributeCollection> results = Query(selectedServer, requestCollection);
			
			StudyItemList studyItemList = new StudyItemList();
			foreach (DicomAttributeCollection result in results)
			{
				StudyItem item = new StudyItem(result[DicomTags.StudyInstanceUid].GetString(0, ""), selectedServer);

				//TODO: add DicomField attributes to the StudyItem class (implement typeconverter for PersonName class).
				item.PatientsBirthDate = result[DicomTags.PatientsBirthDate].GetString(0, "");
				item.AccessionNumber = result[DicomTags.AccessionNumber].GetString(0, "");
				item.StudyDescription = result[DicomTags.StudyDescription].GetString(0, "");
				item.StudyDate = result[DicomTags.StudyDate].GetString(0, "");
				item.StudyTime = result[DicomTags.StudyTime].GetString(0, "");
				item.PatientId = result[DicomTags.PatientId].GetString(0, "");
				item.PatientsName = new PersonName(result[DicomTags.PatientsName].GetString(0, ""));
				item.ReferringPhysiciansName = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
				item.ModalitiesInStudy = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
				DicomAttribute attribute = result[DicomTags.NumberOfStudyRelatedInstances];
				if (!attribute.IsEmpty && !attribute.IsNull)
					item.NumberOfStudyRelatedInstances = attribute.GetInt32(0, 0);

				item.SpecificCharacterSet = result.SpecificCharacterSet;
				item.InstanceAvailability = result[DicomTags.InstanceAvailability].GetString(0, "");
				if (String.IsNullOrEmpty(item.InstanceAvailability))
					item.InstanceAvailability = "ONLINE";

				item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
				var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
				if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
				{
					var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
					item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
					item.PatientSpeciesCodeSequenceCodeValue = codeSequenceMacro.CodeValue;
					item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
				}

				item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
				var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
				if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
				{
					var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
					item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
					item.PatientBreedCodeSequenceCodeValue = codeSequenceMacro.CodeValue;
					item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
				}

				item.ResponsiblePerson = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
				item.ResponsiblePersonRole = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
				item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");
				studyItemList.Add(item);
			}

        	AuditHelper.LogQueryIssued(selectedServer.AETitle, selectedServer.ScpParameters.HostName, EventSource.CurrentUser,
        	                           EventResult.Success, SopClass.StudyRootQueryRetrieveInformationModelFindUid,
        	                           requestCollection);

			return studyItemList;
        }
 public StudyTableEntry(StudyItem studyItem, string tags, double similarityScore)
 {
     _studyItem       = studyItem;
     _tags            = tags;
     _similarityScore = similarityScore;
 }
Example #21
0
		private StudyItem ConvertToStudyItem(StudyRootStudyIdentifier study)
		{
			string studyLoaderName;
		    ApplicationEntity applicationEntity;

		    ServerPartition partiton = ServerPartitionMonitor.Instance.GetPartition(study.RetrieveAeTitle);
			if (partiton != null)
			{
                studyLoaderName = WebViewerServices.Default.StudyLoaderName;
                string host = WebViewerServices.Default.ArchiveServerHostname;
                int port = WebViewerServices.Default.ArchiveServerPort;
                int headerPort = WebViewerServices.Default.ArchiveServerHeaderPort;
                int wadoPort = WebViewerServices.Default.ArchiveServerWADOPort;

			    applicationEntity = new ApplicationEntity()
			                            {
                                            AETitle = study.RetrieveAeTitle,
			                                ScpParameters = new ScpParameters(host, port),
			                                StreamingParameters = new StreamingParameters(headerPort, wadoPort)
			                            };

			}
            else
			{
			    Device theDevice = FindServer(study.RetrieveAeTitle);

                if (theDevice != null)
			    {
		            // TODO (Marmot) - Need to get this to work with changes in marmot
			        applicationEntity = new ApplicationEntity() { ScpParameters = new ScpParameters(theDevice.IpAddress, theDevice.Port), AETitle = theDevice.AeTitle };
			    }
			    else // (node == null)
			    {
			        Platform.Log(LogLevel.Warn,
			                     String.Format("Unable to find server information '{0}' in order to load study '{1}'",
			                                   study.RetrieveAeTitle, study.StudyInstanceUid));

			        return null;
			    }
			}

		    var item = new StudyItem(study, ServiceNodeExtensions.ToServiceNode(applicationEntity));
			if (String.IsNullOrEmpty(item.InstanceAvailability))
				item.InstanceAvailability = "ONLINE";

			return item;
		}
        public override PriorStudyFinderResult FindPriorStudies()
        {
            _cancel = false;

            var priorsServerQueries = new List <IStudyRootQuery>();

            foreach (ServerPartition partition in ServerPartitionMonitor.Instance)
            {
                using (IReadContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenReadContext())
                {
                    IDeviceEntityBroker  broker   = ctx.GetBroker <IDeviceEntityBroker>();
                    DeviceSelectCriteria criteria = new DeviceSelectCriteria();
                    criteria.DeviceTypeEnum.EqualTo(DeviceTypeEnum.PriorsServer);
                    criteria.ServerPartitionKey.EqualTo(partition.Key);
                    IList <Device> list = broker.Find(criteria);
                    foreach (Device theDevice in list)
                    {
                        // Check the settings and log for debug purposes
                        if (!theDevice.Enabled)
                        {
                            Platform.Log(LogLevel.Debug, "Prior Server '{0}' on partition '{1}' is disabled in the device setting",
                                         theDevice.AeTitle, partition.AeTitle);
                            continue;
                        }

                        DicomStudyRootQuery remoteQuery = new DicomStudyRootQuery(partition.AeTitle, theDevice.AeTitle,
                                                                                  theDevice.IpAddress, theDevice.Port);
                        priorsServerQueries.Add(remoteQuery);
                    }
                }
            }

            // Log the prior servers for debug purpose
            if (Platform.IsLogLevelEnabled(LogLevel.Debug) && priorsServerQueries.Count > 0)
            {
                StringBuilder log = new StringBuilder();
                log.Append("Searching for priors on the following servers:");

                StringBuilder serverList = new StringBuilder();
                foreach (DicomStudyRootQuery server in priorsServerQueries)
                {
                    if (serverList.Length > 0)
                    {
                        serverList.Append(",");
                    }
                    serverList.AppendFormat("{0}", server);
                }

                log.Append(serverList.ToString());
                Platform.Log(LogLevel.Debug, log.ToString());
            }

            StudyItemList results = new StudyItemList();

            DefaultPatientReconciliationStrategy reconciliationStrategy = new DefaultPatientReconciliationStrategy();
            List <string> patientIds = new List <string>();

            foreach (Patient patient in Viewer.StudyTree.Patients)
            {
                if (_cancel)
                {
                    break;
                }

                IPatientData reconciled = reconciliationStrategy.ReconcileSearchCriteria(patient);
                if (!patientIds.Contains(reconciled.PatientId))
                {
                    patientIds.Add(reconciled.PatientId);
                }
            }

            //Note: we don't catch the exception for this one because it's just querying the other
            //partitions, so if it fails we want an outright failure to occur.  Besides, it should never happen
            //if the server is functioning correctly.
            using (StudyRootQueryBridge bridge = new StudyRootQueryBridge(Platform.GetService <IStudyRootQuery>()))
            {
                foreach (string patientId in patientIds)
                {
                    StudyRootStudyIdentifier identifier = new StudyRootStudyIdentifier {
                        PatientId = patientId
                    };

                    IList <StudyRootStudyIdentifier> studies = bridge.StudyQuery(identifier);
                    foreach (StudyRootStudyIdentifier study in studies)
                    {
                        if (_cancel)
                        {
                            break;
                        }

                        StudyItem studyItem = ConvertToStudyItem(study);
                        if (studyItem != null)
                        {
                            results.Add(studyItem);
                        }
                    }
                }
            }

            bool complete = true;

            foreach (IStudyRootQuery query in priorsServerQueries)
            {
                foreach (string patientId in patientIds)
                {
                    try
                    {
                        var identifier = new StudyRootStudyIdentifier
                        {
                            PatientId = patientId
                        };

                        IList <StudyRootStudyIdentifier> list = query.StudyQuery(identifier);
                        foreach (StudyRootStudyIdentifier i in list)
                        {
                            if (_cancel)
                            {
                                break;
                            }

                            StudyItem studyItem = ConvertToStudyItem(i);
                            if (studyItem != null)
                            {
                                results.Add(studyItem);
                            }
                        }
                    }
                    catch (FaultException <DataValidationFault> ex)
                    {
                        complete = false;
                        Platform.Log(LogLevel.Error, ex, "An error has occurred when searching for prior studies on server '{0}'", query.ToString());
                    }
                    catch (FaultException <QueryFailedFault> ex)
                    {
                        complete = false;
                        Platform.Log(LogLevel.Error, ex, "An error has occurred when searching for prior studies on server '{0}'", query.ToString());
                    }
                }
            }

            return(new PriorStudyFinderResult(results, complete));
        }
Example #23
0
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity server)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8       = "ISO_IR 192";
            var          collection = new DicomAttributeCollection {
                SpecificCharacterSet = utf8
            };

            collection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            collection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            collection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            collection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            collection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
            collection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
            collection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
            collection[DicomTags.StudyTime].SetStringValue("");
            collection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
            collection[DicomTags.PatientsBirthDate].SetStringValue("");
            collection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
            collection[DicomTags.StudyInstanceUid].SetStringValue(queryParams["StudyInstanceUid"]);
            collection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
            collection[DicomTags.InstanceAvailability].SetEmptyValue();             // must not be included in request

            collection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
            var codeValue   = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
            var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");

            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                collection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            collection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
            codeValue   = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
            codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                collection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            collection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
            collection[DicomTags.ResponsiblePersonRole].SetStringValue("");
            collection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            var localServer   = ServerDirectory.GetLocalServer();
            var studyItemList = new StudyItemList();

            using (var context = new DataAccessContext())
            {
                foreach (DicomAttributeCollection result in context.GetStudyStoreQuery().Query(collection))
                {
                    var item = new StudyItem(result[DicomTags.StudyInstanceUid].ToString(), localServer);
                    item.SpecificCharacterSet          = result.SpecificCharacterSet;
                    item.PatientId                     = result[DicomTags.PatientId].ToString();
                    item.PatientsName                  = new PersonName(result[DicomTags.PatientsName].ToString());
                    item.ReferringPhysiciansName       = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
                    item.PatientsBirthDate             = result[DicomTags.PatientsBirthDate].ToString();
                    item.StudyDate                     = result[DicomTags.StudyDate].ToString();
                    item.StudyTime                     = result[DicomTags.StudyTime].ToString();
                    item.StudyDescription              = result[DicomTags.StudyDescription].ToString();
                    item.ModalitiesInStudy             = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
                    item.AccessionNumber               = result[DicomTags.AccessionNumber].ToString();
                    item.NumberOfStudyRelatedInstances = result[DicomTags.NumberOfStudyRelatedInstances].GetInt32(0, 0);
                    item.InstanceAvailability          = result[DicomTags.InstanceAvailability].GetString(0, "");
                    if (String.IsNullOrEmpty(item.InstanceAvailability))
                    {
                        item.InstanceAvailability = "ONLINE";
                    }

                    item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
                    var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
                    if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
                    {
                        var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
                        item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                        item.PatientSpeciesCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                        item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                    }

                    item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
                    var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
                    if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
                    {
                        var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                        item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                        item.PatientBreedCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                        item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                    }

                    item.ResponsiblePerson       = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
                    item.ResponsiblePersonRole   = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
                    item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");

                    studyItemList.Add(item);
                }
            }

            AuditHelper.LogQueryIssued(null, null, EventSource.CurrentUser, EventResult.Success,
                                       SopClass.StudyRootQueryRetrieveInformationModelFindUid, collection);

            return(studyItemList);
        }
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity server)
        {
			Platform.CheckForNullReference(queryParams, "queryParams");

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8 = "ISO_IR 192";
            var collection = new DicomAttributeCollection {SpecificCharacterSet = utf8};
            collection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            collection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            collection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            collection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            collection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
			collection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
			collection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
			collection[DicomTags.StudyTime].SetStringValue("");
			collection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
        	collection[DicomTags.PatientsBirthDate].SetStringValue("");
            collection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
			collection[DicomTags.StudyInstanceUid].SetStringValue(queryParams["StudyInstanceUid"]);
			collection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
			collection[DicomTags.InstanceAvailability].SetEmptyValue(); // must not be included in request

			collection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
			var codeValue = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
			var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");
			if (codeValue != null || codeMeaning != null)
			{
				var codeSequenceMacro = new CodeSequenceMacro
					{
						CodingSchemeDesignator = "",
						CodeValue = codeValue,
						CodeMeaning = codeMeaning
					};
				collection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

			collection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
			codeValue = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
			codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
			if (codeValue != null || codeMeaning != null)
			{
				var codeSequenceMacro = new CodeSequenceMacro
					{
						CodingSchemeDesignator = "",
						CodeValue = codeValue,
						CodeMeaning = codeMeaning
					};
				collection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

			collection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
			collection[DicomTags.ResponsiblePersonRole].SetStringValue("");
			collection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            var localServer = ServerDirectory.GetLocalServer();
            var studyItemList = new StudyItemList();
			using (var context = new DataAccessContext())
			{
				foreach (DicomAttributeCollection result in context.GetStudyStoreQuery().Query(collection))
				{
                    var item = new StudyItem(result[DicomTags.StudyInstanceUid].ToString(), localServer);
					item.SpecificCharacterSet = result.SpecificCharacterSet;
					item.PatientId = result[DicomTags.PatientId].ToString();
					item.PatientsName = new PersonName(result[DicomTags.PatientsName].ToString());
					item.ReferringPhysiciansName = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
					item.PatientsBirthDate = result[DicomTags.PatientsBirthDate].ToString();
					item.StudyDate = result[DicomTags.StudyDate].ToString();
					item.StudyTime = result[DicomTags.StudyTime].ToString();
					item.StudyDescription = result[DicomTags.StudyDescription].ToString();
					item.ModalitiesInStudy = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
					item.AccessionNumber = result[DicomTags.AccessionNumber].ToString();
					item.NumberOfStudyRelatedInstances = result[DicomTags.NumberOfStudyRelatedInstances].GetInt32(0, 0);
					item.InstanceAvailability = result[DicomTags.InstanceAvailability].GetString(0, "");
					if (String.IsNullOrEmpty(item.InstanceAvailability))
						item.InstanceAvailability = "ONLINE";

					item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
					var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
					if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
					{
						var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[]) result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
						item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
						item.PatientSpeciesCodeSequenceCodeValue = codeSequenceMacro.CodeValue;
						item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
					}

					item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
					var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
					if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
					{
						var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                        item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
						item.PatientBreedCodeSequenceCodeValue = codeSequenceMacro.CodeValue;
						item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
					}

					item.ResponsiblePerson = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
					item.ResponsiblePersonRole = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
					item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");

					studyItemList.Add(item);
				}
			}

			AuditHelper.LogQueryIssued(null, null, EventSource.CurrentUser, EventResult.Success,
									   SopClass.StudyRootQueryRetrieveInformationModelFindUid, collection);

			return studyItemList;
		}
Example #25
0
 public string StudyItemGetter(StudyItem item)
 {
     PropertyInfo property = typeof(Student).GetProperty(item.ToString());
     MethodInfo method = property.GetGetMethod();
     return (string)method.Invoke(this, new object[] { });
 }
        public static void FullStudyItemFromXml(StudyItem item, Stream xmlStream)
        {
            var doc = ReadDocFromStream(xmlStream);

            foreach (XmlNode child in doc.ChildNodes)
            {
                if (child.Name == RootTag)
                {
                    var studyMetaChildren = child.ChildNodes;
                    if (studyMetaChildren == null)
                    {
                        continue;
                    }

                    foreach (XmlNode metaNode in studyMetaChildren)
                    {
                        if (metaNode.Name == "attributes")
                        {
                            var attributeNodes = metaNode.ChildNodes;
                            if (attributeNodes == null)
                            {
                                continue;
                            }
                            foreach (XmlNode node in attributeNodes)
                            {
                                // The DICOM study instance UID, not the MINT UUID.

                                var xmlNodeAttr = node.Attributes.GetNamedItem("tag");
                                if (string.IsNullOrEmpty(xmlNodeAttr.Value))
                                {
                                    continue;
                                }
                                var    valueNode = node.Attributes.GetNamedItem("val");
                                string value     = "";
                                if (valueNode != null)
                                {
                                    value = valueNode.Value;
                                }
                                switch (xmlNodeAttr.Value)
                                {
                                case "00080020":
                                    item.StudyDate = value;
                                    break;

                                case "00080030":
                                    item.StudyTime = value;
                                    break;

                                case "00080050":
                                    item.AccessionNumber = value;
                                    break;

                                case "00080090":
                                    item.ReferringPhysiciansName = new PersonName(value);
                                    break;

                                case "00081030":
                                    item.StudyDescription = value;
                                    break;

                                case "00100010":
                                    item.PatientsName = new PersonName(value);
                                    break;

                                case "00100020":
                                    item.PatientId = value;
                                    break;

                                case "00100030":
                                    item.PatientsBirthDate = value;
                                    break;

                                case "00100040":
                                    item.PatientsSex = value;
                                    break;

                                case "00200010":
                                    item.StudyId = value;
                                    break;

                                default:
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
 public ActionResult Edit(StudyItem entity)
 {
     entity.ModfiedTime = DateTime.Now;
     StudyItemService.Update(entity);
     return(Json(new { status = 1, errorMsg = "操作成功!!" }));
 }
Example #28
0
 public void AssertSopRefs()
 {
     Context.DesktopWindow.ShowMessageBox(string.Format("Sop References Held: {0}", StudyItem.CountInstances()), "Study Filters", MessageBoxActions.Ok);
 }
Example #29
0
 public SingleStudyLoader(SynchronizationContext uiThreadContext, IImageViewer viewer, StudyItem studyItem)
     : this(uiThreadContext, viewer)
 {
     _studyItem = studyItem;
 }
Example #30
0
		private static StudyItem ConvertToStudyItem(StudyRootStudyIdentifier study)
		{
		    study.ResolveServer(true);
		    var item = new StudyItem(study);
			if (String.IsNullOrEmpty(item.InstanceAvailability))
				item.InstanceAvailability = "ONLINE";

			return item;
		}
Example #31
0
			public SingleStudyLoader(SynchronizationContext uiThreadContext, ImageViewerComponent viewer, StudyItem studyItem)
				: this(uiThreadContext, viewer)
			{
				_studyItem = studyItem;
			}
Example #32
0
		internal StudyLoadFailedEventArgs(StudyItem study, Exception error)
		{
			this.Error = error;
			this.Study = study;
		}
        public override PriorStudyFinderResult FindPriorStudies()
        {
            _cancel = false;
            var results = new Dictionary <string, StudyItem>();

            IPatientReconciliationStrategy reconciliationStrategy = new DefaultPatientReconciliationStrategy();

            reconciliationStrategy.SetStudyTree(Viewer.StudyTree);

            var patientIds = new Dictionary <string, string>();

            foreach (Patient patient in Viewer.StudyTree.Patients)
            {
                if (_cancel)
                {
                    break;
                }

                IPatientData reconciled = reconciliationStrategy.ReconcileSearchCriteria(patient);
                patientIds[reconciled.PatientId] = reconciled.PatientId;
            }

            int failedCount  = 0;
            int successCount = 0;

            foreach (var priorsServer in ServerDirectory.GetPriorsServers(true))
            {
                if (_cancel)
                {
                    break;
                }

                try
                {
                    using (var bridge = new StudyRootQueryBridge(priorsServer.GetService <IStudyRootQuery>()))
                    {
                        foreach (string patientId in patientIds.Keys)
                        {
                            //#10790: don't search for priors if patient id is empty
                            if (string.IsNullOrEmpty(patientId))
                            {
                                continue;
                            }

                            var identifier = new StudyRootStudyIdentifier {
                                PatientId = patientId
                            };

                            IList <StudyRootStudyIdentifier> studies = bridge.StudyQuery(identifier);

                            Platform.Log(LogLevel.Debug, "Found {0} prior studies on server '{1}'", studies.Count, priorsServer.Name);

                            foreach (StudyRootStudyIdentifier study in studies)
                            {
                                if (_cancel)
                                {
                                    break;
                                }

                                //Eliminate false positives right away.
                                IPatientData reconciled = reconciliationStrategy.ReconcilePatientInformation(study);
                                if (reconciled == null)
                                {
                                    continue;
                                }

                                StudyItem studyItem = ConvertToStudyItem(study);
                                if (studyItem == null || results.ContainsKey(studyItem.StudyInstanceUid))
                                {
                                    continue;
                                }

                                if (!results.ContainsKey(studyItem.StudyInstanceUid))
                                {
                                    results[studyItem.StudyInstanceUid] = studyItem;
                                }
                            }
                        }
                    }

                    ++successCount;
                }
                catch (Exception e)
                {
                    ++failedCount;
                    Platform.Log(LogLevel.Error, e, "Failed to query server: {0}", priorsServer.Name);
                }
            }

            if (_cancel)
            {
                //Just pretend the query never happened.
                return(new PriorStudyFinderResult(new StudyItemList(), true));
            }

            if (failedCount > 0)
            {
                PriorStudyLoaderExceptionPolicy.NotifyFailedQuery();

                if (successCount == 0)
                {
                    throw new Exception("The search for prior studies has failed.");
                }
            }
            else
            {
                //Even if success count is zero, we'll still consider it "successful".
                PriorStudyLoaderExceptionPolicy.NotifySuccessfulQuery();
            }

            Platform.Log(LogLevel.Debug, "Found {0} prior studies in total.", results.Count);

            return(new PriorStudyFinderResult(new StudyItemList(results.Values), failedCount == 0));
        }
        public static void FillStudyItem(StudyItem item, StudyKey key)
        {
            HttpWebResponse rep = CallService(key.SummaryUri);

            FullStudyItemFromXml(item, rep.GetResponseStream());
        }
Example #35
0
 internal StudyLoadFailedEventArgs(StudyItem study, Exception error)
 {
     this.Error = error;
     this.Study = study;
 }
        public override StudyItemList Query(QueryParameters queryParams, IApplicationEntity targetServer)
        {
            Platform.CheckForNullReference(queryParams, "queryParams");
            Platform.CheckForNullReference(targetServer, "targetServer");

            var selectedServer = targetServer.ToServiceNode();

            //.NET strings are unicode, therefore, so is all the query data.
            const string utf8 = "ISO_IR 192";
            var          requestCollection = new DicomAttributeCollection {
                SpecificCharacterSet = utf8
            };

            requestCollection[DicomTags.SpecificCharacterSet].SetStringValue(utf8);

            requestCollection[DicomTags.QueryRetrieveLevel].SetStringValue("STUDY");
            requestCollection[DicomTags.StudyInstanceUid].SetStringValue("");

            requestCollection[DicomTags.PatientId].SetStringValue(queryParams["PatientId"]);
            requestCollection[DicomTags.AccessionNumber].SetStringValue(queryParams["AccessionNumber"]);
            requestCollection[DicomTags.PatientsName].SetStringValue(queryParams["PatientsName"]);
            requestCollection[DicomTags.ReferringPhysiciansName].SetStringValue(queryParams["ReferringPhysiciansName"]);
            requestCollection[DicomTags.StudyDate].SetStringValue(queryParams["StudyDate"]);
            requestCollection[DicomTags.StudyTime].SetStringValue("");
            requestCollection[DicomTags.StudyDescription].SetStringValue(queryParams["StudyDescription"]);
            requestCollection[DicomTags.PatientsBirthDate].SetStringValue("");
            requestCollection[DicomTags.ModalitiesInStudy].SetStringValue(queryParams["ModalitiesInStudy"]);
            requestCollection[DicomTags.NumberOfStudyRelatedInstances].SetStringValue("");
            requestCollection[DicomTags.InstanceAvailability].SetEmptyValue();             // must not be included in request

            requestCollection[DicomTags.PatientSpeciesDescription].SetStringValue(GetString(queryParams, "PatientSpeciesDescription"));
            var codeValue   = GetString(queryParams, "PatientSpeciesCodeSequenceCodeValue");
            var codeMeaning = GetString(queryParams, "PatientSpeciesCodeSequenceCodeMeaning");

            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientSpeciesCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.PatientBreedDescription].SetStringValue(GetString(queryParams, "PatientBreedDescription"));
            codeValue   = GetString(queryParams, "PatientBreedCodeSequenceCodeValue");
            codeMeaning = GetString(queryParams, "PatientBreedCodeSequenceCodeMeaning");
            if (codeValue != null || codeMeaning != null)
            {
                var codeSequenceMacro = new CodeSequenceMacro
                {
                    CodingSchemeDesignator = "",
                    CodeValue   = codeValue,
                    CodeMeaning = codeMeaning
                };
                requestCollection[DicomTags.PatientBreedCodeSequence].AddSequenceItem(codeSequenceMacro.DicomSequenceItem);
            }

            requestCollection[DicomTags.ResponsiblePerson].SetStringValue(GetString(queryParams, "ResponsiblePerson"));
            requestCollection[DicomTags.ResponsiblePersonRole].SetStringValue("");
            requestCollection[DicomTags.ResponsibleOrganization].SetStringValue(GetString(queryParams, "ResponsibleOrganization"));

            IList <DicomAttributeCollection> results = Query(selectedServer, requestCollection);

            StudyItemList studyItemList = new StudyItemList();

            foreach (DicomAttributeCollection result in results)
            {
                StudyItem item = new StudyItem(result[DicomTags.StudyInstanceUid].GetString(0, ""), selectedServer);

                //TODO: add DicomField attributes to the StudyItem class (implement typeconverter for PersonName class).
                item.PatientsBirthDate       = result[DicomTags.PatientsBirthDate].GetString(0, "");
                item.AccessionNumber         = result[DicomTags.AccessionNumber].GetString(0, "");
                item.StudyDescription        = result[DicomTags.StudyDescription].GetString(0, "");
                item.StudyDate               = result[DicomTags.StudyDate].GetString(0, "");
                item.StudyTime               = result[DicomTags.StudyTime].GetString(0, "");
                item.PatientId               = result[DicomTags.PatientId].GetString(0, "");
                item.PatientsName            = new PersonName(result[DicomTags.PatientsName].GetString(0, ""));
                item.ReferringPhysiciansName = new PersonName(result[DicomTags.ReferringPhysiciansName].GetString(0, ""));
                item.ModalitiesInStudy       = DicomStringHelper.GetStringArray(result[DicomTags.ModalitiesInStudy].ToString());
                DicomAttribute attribute = result[DicomTags.NumberOfStudyRelatedInstances];
                if (!attribute.IsEmpty && !attribute.IsNull)
                {
                    item.NumberOfStudyRelatedInstances = attribute.GetInt32(0, 0);
                }

                item.SpecificCharacterSet = result.SpecificCharacterSet;
                item.InstanceAvailability = result[DicomTags.InstanceAvailability].GetString(0, "");
                if (String.IsNullOrEmpty(item.InstanceAvailability))
                {
                    item.InstanceAvailability = "ONLINE";
                }

                item.PatientSpeciesDescription = result[DicomTags.PatientSpeciesDescription].GetString(0, "");
                var patientSpeciesCodeSequence = result[DicomTags.PatientSpeciesCodeSequence];
                if (!patientSpeciesCodeSequence.IsNull && patientSpeciesCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientSpeciesCodeSequence].Values)[0]);
                    item.PatientSpeciesCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientSpeciesCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientSpeciesCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.PatientBreedDescription = result[DicomTags.PatientBreedDescription].GetString(0, "");
                var patientBreedCodeSequence = result[DicomTags.PatientBreedCodeSequence];
                if (!patientBreedCodeSequence.IsNull && patientBreedCodeSequence.Count > 0)
                {
                    var codeSequenceMacro = new CodeSequenceMacro(((DicomSequenceItem[])result[DicomTags.PatientBreedCodeSequence].Values)[0]);
                    item.PatientBreedCodeSequenceCodingSchemeDesignator = codeSequenceMacro.CodingSchemeDesignator;
                    item.PatientBreedCodeSequenceCodeValue   = codeSequenceMacro.CodeValue;
                    item.PatientBreedCodeSequenceCodeMeaning = codeSequenceMacro.CodeMeaning;
                }

                item.ResponsiblePerson       = new PersonName(result[DicomTags.ResponsiblePerson].GetString(0, ""));
                item.ResponsiblePersonRole   = result[DicomTags.ResponsiblePersonRole].GetString(0, "");
                item.ResponsibleOrganization = result[DicomTags.ResponsibleOrganization].GetString(0, "");
                studyItemList.Add(item);
            }

            AuditHelper.LogQueryIssued(selectedServer.AETitle, selectedServer.ScpParameters.HostName, EventSource.CurrentUser,
                                       EventResult.Success, SopClass.StudyRootQueryRetrieveInformationModelFindUid,
                                       requestCollection);

            return(studyItemList);
        }
Example #37
0
 public void StudyItemSetter(StudyItem item, string value)
 {
     PropertyInfo property = typeof(Student).GetProperty(item.ToString());
     MethodInfo method= property.GetSetMethod();
     method.Invoke(this, new object[] { value });
 }
Example #38
0
        private void StudyGallery_SelectionChanged(object sender, EventArgs e)
        {
            StudyItem item = (StudyItem)_gvStudies.Selection.Item;

            this.SelectedStudy = item;
        }