예제 #1
0
        private void AddSequenceAttributesContentInformation(AttributeList attributeList)
        {
            //
            // Determine the maximum amount of sequence items for all supplied sequence attributes
            // that have the include_sequence_items flag enabled.
            //

            int maxItemCount = attributeList.DicomMaxItemCount;


            //
            // Fill the table with the information.
            //

            for (int itemIndex = 1; itemIndex <= maxItemCount; itemIndex++)
            {
                //
                // Add begin item row.
                //

                AddSequenceItemRow(attributeList, itemIndex, true);


                //
                // Add the comparison of attributes within the sequence items.
                //

                AttributeCollections attributeCollections = new AttributeCollections();

                for (int attributeIndex = 0; attributeIndex < attributeList.Count; attributeIndex++)
                {
                    if (attributeList[attributeIndex] == null)
                    {
                        attributeCollections.AddNull();
                    }
                    else if (attributeList[attributeIndex] is Hl7Attribute)
                    {
                        attributeCollections.AddNull();
                    }
                    else if (attributeList[attributeIndex] is DicomAttribute)
                    {
                        DicomAttribute dicomAttribute = attributeList[attributeIndex] as DicomAttribute;

                        if ((dicomAttribute.ValidationRule.Flags & FlagsBase.Include_sequence_items) == FlagsBase.Include_sequence_items)
                        {
                            if (dicomAttribute.AttributeOnly is ValidAttribute)
                            // Attribute is valid attribute.
                            {
                                ValidAttribute validAttribute = dicomAttribute.AttributeOnly as ValidAttribute;

                                if (validAttribute.VR == VR.SQ)
                                // Attribute is valid SQ attribute.
                                {
                                    if (validAttribute.ItemCount < itemIndex)
                                    {
                                        // Item index to high for actual item count.
                                        attributeCollections.Add(new DicomAttributeCollection(new SequenceItem(), dicomAttribute.ValidationRule.Flags));
                                    }
                                    else
                                    // Item exists.
                                    {
                                        attributeCollections.Add(new DicomAttributeCollection(validAttribute.GetItem(itemIndex), dicomAttribute.ValidationRule.Flags));
                                    }
                                }
                                else
                                // Attribute is valid attribute but not a SQ attribute.
                                {
                                    attributeCollections.Add(new DicomAttributeCollection(new SequenceItem(), dicomAttribute.ValidationRule.Flags));
                                }
                            }
                            else
                            // Attribute does not exist.
                            {
                                attributeCollections.Add(new DicomAttributeCollection(new SequenceItem(), dicomAttribute.ValidationRule.Flags));
                            }
                        }
                        else
                        // Flags specify sequence items must not be included.
                        {
                            attributeCollections.AddNull();
                        }
                    }
                }

                AddAttributeCollectionsInformationUsingStaticDicomCompare(attributeCollections);


                //
                // Add end item row.
                //

                AddSequenceItemRow(attributeList, itemIndex, false);
            }
        }