Пример #1
0
        private void PopulatePatient(DicomMessageBase response, IEnumerable <DicomTag> tagList, IPatientData row)
        {
            DicomDataset dataSet = response.DataSet;

            dataSet[DicomTags.RetrieveAeTitle].SetStringValue(Partition.AeTitle);

            var characterSet = GetPreferredCharacterSet();

            if (!string.IsNullOrEmpty(characterSet))
            {
                dataSet[DicomTags.SpecificCharacterSet].SetStringValue(characterSet);
                dataSet.SpecificCharacterSet = characterSet;
            }

            IList <IStudyData> relatedStudies = row.LoadRelatedStudies();
            IStudyData         studyData      = null;

            if (relatedStudies.Count > 0)
            {
                studyData = relatedStudies.First();
            }

            foreach (DicomTag tag in tagList)
            {
                try
                {
                    switch (tag.TagValue)
                    {
                    case DicomTags.PatientsName:
                        dataSet[DicomTags.PatientsName].SetStringValue(row.PatientName);
                        break;

                    case DicomTags.PatientId:
                        dataSet[DicomTags.PatientId].SetStringValue(row.PatientId);
                        break;

                    case DicomTags.IssuerOfPatientId:
                        dataSet[DicomTags.IssuerOfPatientId].SetStringValue(row.IssuerOfPatientId);
                        break;

                    case DicomTags.NumberOfPatientRelatedStudies:
                        dataSet[DicomTags.NumberOfPatientRelatedStudies].AppendInt32(row.NumberOfRelatedStudies);
                        break;

                    case DicomTags.NumberOfPatientRelatedSeries:
                        dataSet[DicomTags.NumberOfPatientRelatedSeries].AppendInt32(row.NumberOfRelatedSeries);
                        break;

                    case DicomTags.NumberOfPatientRelatedInstances:
                        dataSet[DicomTags.NumberOfPatientRelatedInstances].AppendInt32(
                            row.NumberOfRelatedInstances);
                        break;

                    case DicomTags.QueryRetrieveLevel:
                        dataSet[DicomTags.QueryRetrieveLevel].SetStringValue("PATIENT");
                        break;

                    case DicomTags.PatientsSex:
                        if (studyData == null)
                        {
                            dataSet[DicomTags.PatientsSex].SetNullValue();
                        }
                        else
                        {
                            dataSet[DicomTags.PatientsSex].SetStringValue(studyData.PatientSex);
                        }
                        break;

                    case DicomTags.PatientsBirthDate:
                        if (studyData == null)
                        {
                            dataSet[DicomTags.PatientsBirthDate].SetNullValue();
                        }
                        else
                        {
                            dataSet[DicomTags.PatientsBirthDate].SetDateTime(0, studyData.PatientBirthday);
                        }
                        break;

                    // Meta tags that should have not been in the RQ, but we've already set
                    case DicomTags.RetrieveAeTitle:
                    case DicomTags.InstanceAvailability:
                    case DicomTags.SpecificCharacterSet:
                        break;

                    default:
                        if (!tag.IsPrivate)
                        {
                            dataSet[tag].SetNullValue();
                        }

                        break;
                    }
                }
                catch (Exception e)
                {
                    Log.Logger.Error(e, "Unexpected error setting tag {0} in C-FIND-RSP", dataSet[tag].Tag.ToString());
                    if (!tag.IsPrivate)
                    {
                        dataSet[tag].SetNullValue();
                    }
                }
            }
        }