Example #1
0
        internal QRRequestData(DICOMData cmd, DICOMData data)
        {
            //parse query-retrieve level
            QueryLevel = AbstractSyntaxes.Lookup((string)cmd[DICOMTags.AffectedSOPClass].Data).ParseQRLevel();

            if (QueryLevel == QueryRetrieveLevel.ModalityWorklist)
            {
                FindLevel = QRLevelType.Study;
            }
            else
            {
                //parse find level
                string type = ((string)data[DICOMTags.QueryRetrieveLevel].Data).Trim().ToUpper();
                if (type == "PATIENT")
                {
                    FindLevel = QRLevelType.Patient;
                }
                else if (type == "STUDY")
                {
                    FindLevel = QRLevelType.Study;
                }
                else if (type == "SERIES")
                {
                    FindLevel = QRLevelType.Series;
                }
                else if (type == "IMAGE")
                {
                    FindLevel = QRLevelType.Image;
                }
                else
                {
                    FindLevel = QRLevelType.Study;    //fallback
                }
            }

            Console.Write(data.Dump());

            //pull all search terms
            SearchTerms = new Dictionary <uint, object>();
            foreach (DICOMElement elem in data.Elements.Values)
            {
                //Don't add group length elements
                if (elem.Elem == 0)
                {
                    continue;
                }
                if (elem.Tag == DICOMTags.QueryRetrieveLevel)
                {
                    continue;
                }

                if (elem.Tag == DICOMTags.ScheduledProcedureStepSequence)
                {
                    if (elem.VRShort == DICOMElementSQ.vrshort)
                    {
                        foreach (SQItem sqItem in ((DICOMElementSQ)elem).Items)
                        {
                            foreach (DICOMElement elemi in sqItem.Elements)
                            {
                                if (elemi.Elem == 0)
                                {
                                    continue;
                                }
                                if (elemi.Tag == DICOMTags.QueryRetrieveLevel)
                                {
                                    continue;
                                }

                                SearchTerms.Add(elemi.Tag, elemi.Data);
                            }
                        }
                    }
                }
                else if (elem.Data.ToString() != "")
                {
                    SearchTerms.Add(elem.Tag, elem.Data);
                }
            }

            FillTagsList(data);
        }