Ejemplo n.º 1
0
        internal static StudyData ReadStudyData(WadoDataSetModel model)
        {
            var adaptee = new StudyData();

            adaptee.AccessionNumber = model.AccessionNumber;
            //adaptee.AdditionalPatientHistory
            //adaptee.AdmittingDiagnosesDescription
            //adaptee.Age
            adaptee.Date        = model.StudyDate;
            adaptee.Description = model.StudyDescription;
            //adaptee.Id
            adaptee.InstanceUID       = model.StudyInstanceUID;
            adaptee.ModalitiesInStudy = new string[] { model.Modality };
            //adaptee.NameOfDoctorsReading =
            //adaptee.NumberOfRelatedInstances =
            //adaptee.NumberOfRelatedSeries =
            adaptee.Patient           = new PatientData();
            adaptee.Patient.BirthDate = model.PatientBirthDate;
            //adaptee.Patient.Comments
            //adaptee.Patient.EthnicGroup
            adaptee.Patient.ID   = model.PatientID;
            adaptee.Patient.Name = model.PatientName;
            adaptee.Patient.NumberOfRelatedInstances = model.NumberOfStudyRelatedInstances;
            adaptee.Patient.NumberOfRelatedSeries    = model.NumberOfStudyRelatedSeries;
            //adaptee.Patient.NumberOfRelatedStudies
            adaptee.Patient.Sex = model.PatientSex;

            //adaptee.ReferringPhysiciansName
            //adaptee.Size =
            //adaptee.Weight =

            return(adaptee);
        }
Ejemplo n.º 2
0
        internal static SeriesData ReadSeriesData(WadoDataSetModel model)
        {
            var adaptee = new SeriesData();

            adaptee.CompleteMRTI             = false;
            adaptee.Date                     = model.SeriesDate;
            adaptee.Description              = model.SeriesDescription;
            adaptee.InstanceUID              = model.SeriesInstanceUID;
            adaptee.Modality                 = model.Modality;
            adaptee.Number                   = model.SeriesNumber;
            adaptee.NumberOfRelatedInstances = model.NumberOfInstances;
            adaptee.Patient                  = new PatientData();
            adaptee.Patient.BirthDate        = model.PatientBirthDate;
            //adaptee.Patient.Comments
            //adaptee.Patient.EthnicGroup
            adaptee.Patient.ID   = model.PatientID;
            adaptee.Patient.Name = model.PatientName;
            adaptee.Patient.NumberOfRelatedInstances = model.NumberOfStudyRelatedInstances;
            adaptee.Patient.NumberOfRelatedSeries    = model.NumberOfStudyRelatedSeries;

            //adaptee.Patient.NumberOfRelatedStudies

            adaptee.SopInstanceUIDs = new List <string>()
            {
                model.SOPInstanceUID
            };
            adaptee.StudyInstanceUID = model.StudyInstanceUID;

            return(adaptee);
        }
Ejemplo n.º 3
0
        internal static string ToWadoRenderedRsQueryUrl(WadoDataSetModel model)
        {
            var url = new StringBuilder();

            if (!string.IsNullOrEmpty(model.StudyInstanceUID))
            {
                url.Append("studies/").Append(model.StudyInstanceUID).Append("/");
                if (!string.IsNullOrEmpty(model.SeriesInstanceUID))
                {
                    url.Append("series/").Append(model.SeriesInstanceUID).Append("/");
                    if (!string.IsNullOrEmpty(model.SOPInstanceUID))
                    {
                        url.Append("instances/").Append(model.SOPInstanceUID).Append("/");
                    }
                }
            }
            else
            {
                throw new ArgumentNullException();
            }

            url.Append("Rendered");

            return(url.ToString());
        }
Ejemplo n.º 4
0
        private static string BuildQueryParams(WadoDataSetModel model, List <string> execluded)
        {
            string query = "?";

            foreach (var propertyInfo in model.GetType().GetProperties())
            {
                if (null != execluded)
                {
                    if (execluded.Exists(x => (x == propertyInfo.Name)))
                    {
                        continue;
                    }
                }

                var value = propertyInfo.GetValue(model) as string;

                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }

                query += propertyInfo.Name + "=" + value + "&";
            }
            query = query.TrimEnd('&').TrimEnd('?');
            return(query);
        }
Ejemplo n.º 5
0
        internal static string ToWadoRsQueryUrl(WadoDataSetModel model)
        {
            if (string.IsNullOrEmpty(model.StudyInstanceUID) || string.IsNullOrEmpty(model.SeriesInstanceUID) || string.IsNullOrEmpty(model.SOPInstanceUID))
            {
                throw new ArgumentNullException("StudyInstanceUID, SeriesInstanceUID or SOPInstanceUID");
            }

            string url = string.Format("studies/{0}/series/{1}/instances/{2}/", model.StudyInstanceUID, model.SeriesInstanceUID, model.SOPInstanceUID);

            return(url);
        }
Ejemplo n.º 6
0
        internal static WadoDataSetModel ReadQueryOptions(QueryOptions query)
        {
            var model = new WadoDataSetModel();

            if (null != query)
            {
                if (null != query.PatientsOptions)
                {
                    model.PatientBirthDate = query.PatientsOptions.BirthDate;
                    //query.PatientsOptions.Comments;
                    //query.PatientsOptions.EthnicGroup;
                    model.PatientID   = query.PatientsOptions.PatientID;
                    model.PatientName = query.PatientsOptions.PatientName;
                    model.PatientSex  = query.PatientsOptions.Sex;
                }
                if (null != query.StudiesOptions)
                {
                    model.AccessionNumber = query.StudiesOptions.AccessionNumber;
                    if (null != query.StudiesOptions.ModalitiesInStudy && query.StudiesOptions.ModalitiesInStudy.Length > 0)
                    {
                        model.Modality = query.StudiesOptions.ModalitiesInStudy[0];
                    }
                    //query.StudiesOptions.ReferDoctorName
                    //query.StudiesOptions.StudyDateEnd;
                    model.StudyDate        = query.StudiesOptions.StudyDateStart;
                    model.StudyInstanceUID = query.StudiesOptions.StudyInstanceUID;
                    //query.StudiesOptions.StudyTimeEnd
                    //query.StudiesOptions.StudyTimeStart;
                }
                if (null != query.SeriesOptions)
                {
                    if (string.IsNullOrEmpty(model.Modality))
                    {
                        model.Modality = query.SeriesOptions.Modality;
                    }
                    //query.SeriesOptions.SeriesDateEnd
                    model.SeriesDate        = query.SeriesOptions.SeriesDateStart;
                    model.SeriesDescription = query.SeriesOptions.SeriesDescription;
                    model.SeriesInstanceUID = query.SeriesOptions.SeriesInstanceUID;
                    model.SeriesNumber      = query.SeriesOptions.SeriesNumber;
                }
                if (null != query.InstancesOptions)
                {
                    model.InstanceNumber = query.InstancesOptions.InstanceNumber;
                    model.SOPInstanceUID = query.InstancesOptions.SOPInstanceUID;
                }
            }

            return(model);
        }
Ejemplo n.º 7
0
        internal static WadoDataSetModel FromProperties(Dictionary <string, string> prp)
        {
            var model = new WadoDataSetModel();

            foreach (var propertyInfo in model.GetType().GetProperties())
            {
                if (prp.ContainsKey(propertyInfo.Name))
                {
                    propertyInfo.SetValue(model, FormatProperty(propertyInfo.Name, prp));
                }
            }

            return(model);
        }
Ejemplo n.º 8
0
        internal static PatientData ReadPatientData(WadoDataSetModel model)
        {
            var adaptee = new PatientData();

            adaptee.BirthDate   = model.PatientBirthDate;
            adaptee.Comments    = string.Empty;
            adaptee.EthnicGroup = string.Empty;
            adaptee.ID          = model.PatientID;
            adaptee.Name        = model.PatientName;
            adaptee.NumberOfRelatedInstances = model.NumberOfStudyRelatedInstances;
            adaptee.NumberOfRelatedSeries    = model.NumberOfStudyRelatedSeries;
            adaptee.NumberOfRelatedStudies   = string.Empty;
            adaptee.Sex = model.PatientSex;

            return(adaptee);
        }
Ejemplo n.º 9
0
        internal static InstanceData ReadInstanceData(WadoDataSetModel model)
        {
            var adaptee = new InstanceData();

            //adaptee.DicomJSON
            //adaptee.ImageURL
            adaptee.InstanceNumber = model.InstanceNumber;
            //adaptee.MRTIImageInfo
            adaptee.NumberOfFrames = (string.IsNullOrEmpty(model.NumberOfFrames)) ? 0 : int.Parse(model.NumberOfFrames);
            //PageInfo PagesInfo
            adaptee.PatientID         = model.PatientID;
            adaptee.SeriesInstanceUID = model.SeriesInstanceUID;
            adaptee.SOPClassUID       = model.SOPClassUID;
            adaptee.SOPInstanceUID    = model.SOPInstanceUID;
            adaptee.StationName       = model.StationName;
            adaptee.StudyInstanceUID  = model.StudyInstanceUID;
            adaptee.TransferSyntax    = model.TransferSyntaxUID;

            return(adaptee);
        }
Ejemplo n.º 10
0
        internal async Task <Stream> RetrieveDatasetRendered(WadoDataSetModel query, Size?size)
        {
            var stm = await RestClient.queryRenderedDicomFile(UrlBuilder.Combine(ServiceConfig.WadoRsServiceUrl, WadoDataSetConverter.ToWadoRenderedRsQueryUrl(query)), null, size);

            return(stm);
        }
Ejemplo n.º 11
0
        internal async Task <Stream> RetrieveDataset(WadoDataSetModel query)
        {
            var stm = await RestClient.queryDicomStream(UrlBuilder.Combine(ServiceConfig.WadoRsServiceUrl, WadoDataSetConverter.ToWadoRsQueryUrl(query)));

            return(stm);
        }
Ejemplo n.º 12
0
        internal async Task <List <WadoDataSetModel> > InstanceLevel(WadoDataSetModel query)
        {
            var stm = await RestClient.queryJson(UrlBuilder.Combine(ServiceConfig.QidoRsServiceUrl, WadoDataSetConverter.ToQidoQueryUrl(query, "instance")));

            return(WadoDataSetModelFactory.ReadJsonObjects(stm));
        }
Ejemplo n.º 13
0
        internal static string ToQidoQueryUrl(WadoDataSetModel model, string queryRetrieveLevel)
        {
            var url = string.Empty;

            if (string.IsNullOrEmpty(queryRetrieveLevel))
            {
                if (!string.IsNullOrEmpty(model.StudyInstanceUID))
                {
                    if (!string.IsNullOrEmpty(model.SeriesInstanceUID))
                    {
                        queryRetrieveLevel = "instance";
                    }
                    else
                    {
                        queryRetrieveLevel = "series";
                    }
                }
                else
                {
                    queryRetrieveLevel = "study";
                }
            }

            switch (queryRetrieveLevel.ToLower())
            {
            case "patient":
                //this is not a standard qido-rs query
                //throw new Exception("Patient level query is not a standard qido-rs query");
            {
                url = "patients"
                      + BuildQueryParams(model, null);
            }
            break;

            case "study":
            {
                url = "studies"
                      + BuildQueryParams(model, null);
            }
            break;

            case "series":
            {
                if (!string.IsNullOrEmpty(model.StudyInstanceUID))
                {
                    var execludeList = new List <string>();
                    execludeList.Add("StudyInstanceUID");

                    url = string.Format("studies/{0}/series", model.StudyInstanceUID)
                          + BuildQueryParams(model, execludeList);
                }
                else
                {
                    Debug.WriteLine("Warning: building query string for a relational series query (optional for qido services)");
                    url = "series" + BuildQueryParams(model, null);
                    //throw new Exception("Series level query requires study instance uid to be present");
                }
            }
            break;

            case "instance":
            {
                var execludeList = new List <string>();
                execludeList.Add("StudyInstanceUID");
                execludeList.Add("SeriesInstanceUID");

                url = string.Format("studies/{0}/series/{1}/instances", model.StudyInstanceUID, model.SeriesInstanceUID)
                      + BuildQueryParams(model, execludeList);
            }
            break;

            default:
            {
                throw new ArgumentException();
            }
            }

            return(url);
        }