/// <summary> /// Compare the two messages. /// </summary> /// <param name="resultsReporter">Results reporter.</param> /// <param name="thatBaseComparator">Reference comparator.</param> /// <returns>bool - true = messages compared, false messages not compared</returns> public override bool Compare(ResultsReporter resultsReporter, BaseComparator thatBaseComparator) { bool compared = false; if (thatBaseComparator is DicomComparator) { DicomComparator thatDicomComparator = (DicomComparator)thatBaseComparator; // Check if both templates have been initialized correctly if ((this._template == null) || (thatDicomComparator._template == null)) { return(false); } // Check for comparator equality if (this == thatDicomComparator) { return(true); } MessageComparisonResults messageComparisonResults = new MessageComparisonResults(this._name, thatDicomComparator._name, this._template.Command, thatDicomComparator._template.Command, this._template.SopClassUid, thatDicomComparator._template.SopClassUid); // Iterate over this comparator foreach (DicomComparisonTag thisComparisonTag in this._template.ComparisonTags) { // try to get the equivalent tag in thatDicomComparator DicomComparisonTag thatComparisonTag = thatDicomComparator._template.ComparisonTags.Find(thisComparisonTag.Tag); if (thatComparisonTag != null) { AttributeComparisonResults attributeComparisonResults = new AttributeComparisonResults(thisComparisonTag.Tag, thisComparisonTag.DataFormat.ToDicomFormat(), thatComparisonTag.DataFormat.ToDicomFormat()); if (thisComparisonTag.DataFormat.Equals(thatComparisonTag.DataFormat) == false) { DvtkData.Validation.ValidationMessage validationMessage = new DvtkData.Validation.ValidationMessage(); validationMessage.Type = DvtkData.Validation.MessageType.Error; validationMessage.Message = "Attribute values do not match."; attributeComparisonResults.Messages.Add(validationMessage); } messageComparisonResults.Add(attributeComparisonResults); } } resultsReporter.WriteMessageComparisonResults(messageComparisonResults); compared = true; } return(compared); }
/// <summary> /// Try to find a comparison tag in the collection with the same tag as the given one. /// </summary> /// <param name="tag">Tag to try to find in the collection.</param> /// <returns>DicomComparisonTag - null if no match found</returns> public DicomComparisonTag Find(DvtkData.Dimse.Tag tag) { DicomComparisonTag dicomComparisonTag = null; foreach (DicomComparisonTag lDicomComparisonTag in this) { if (lDicomComparisonTag.Tag == tag) { dicomComparisonTag = lDicomComparisonTag; break; } } return(dicomComparisonTag); }
/// <summary> /// Compare the two messages. /// </summary> /// <param name="tagValueFilterCollection">Tag Value Filter.</param> /// <param name="resultsReporter">Results reporter.</param> /// <param name="thatBaseComparator">Reference comparator.</param> /// <returns>bool - true = messages compared, false messages not compared</returns> public override bool Compare(TagValueCollection tagValueFilterCollection, ResultsReporter resultsReporter, BaseComparator thatBaseComparator) { bool compared = false; if (thatBaseComparator is Hl7Comparator) { Hl7Comparator thatHl7Comparator = (Hl7Comparator)thatBaseComparator; // Check if both templates have been initialized correctly if ((this.Template == null) || (thatHl7Comparator.Template == null)) { return(false); } // Check for comparator equality if (this == thatHl7Comparator) { return(true); } // filter out comparators for the same message types if ((this.Template.MessageType == thatHl7Comparator.Template.MessageType) && (this.Template.MessageSubType == thatHl7Comparator.Template.MessageSubType)) { return(false); } // generate a local Tag Value collection from this // - this collection will include any tag value pair from the original collection and // the tag value pairs of any tags only (in the original collection) that match from this // comparator - that is the values are taken from this comparator. TagValueCollection lTagValueFilterCollection = GenerateTagValueCollection(tagValueFilterCollection); // check to see if the comparision filters match - without Univeral Matching // - now try to match this local filter collection against thatDicomComparator // - comparators that match will have the same tag value pairs (including the value) as // each other. if ((tagValueFilterCollection.Count == lTagValueFilterCollection.Count) && (thatHl7Comparator.UseComparator(lTagValueFilterCollection, false) == true)) { MessageComparisonResults messageComparisonResults = new MessageComparisonResults(this.Name, thatHl7Comparator.Name, this.Template.MessageType, thatHl7Comparator.Template.MessageType, this.Template.MessageSubType, thatHl7Comparator.Template.MessageSubType); // Iterate over this comparator foreach (Hl7ComparisonTag thisComparisonTag in this.Template.ComparisonTags) { // try to get the equivalent tag in thatHl7Comparator Hl7ComparisonTag thatComparisonTag = thatHl7Comparator.Template.ComparisonTags.Find(thisComparisonTag.Tag); if (thatComparisonTag != null) { AttributeComparisonResults attributeComparisonResults = new AttributeComparisonResults(SegmentNames.Name(thisComparisonTag.Tag.Segment), thisComparisonTag.Tag.FieldIndex, thisComparisonTag.DataFormat.ToHl7Format(), thatComparisonTag.DataFormat.ToHl7Format()); attributeComparisonResults.Name = DicomHl7TagMapTemplate.Hl7NameFromHl7Tag(thisComparisonTag.Tag); if (thisComparisonTag.DataFormat.Equals(thatComparisonTag.DataFormat) == false) { DvtkData.Validation.ValidationMessage validationMessage = new DvtkData.Validation.ValidationMessage(); validationMessage.Type = DvtkData.Validation.MessageType.Error; validationMessage.Message = "Attribute values do not match."; attributeComparisonResults.Messages.Add(validationMessage); } messageComparisonResults.Add(attributeComparisonResults); } } resultsReporter.WriteMessageComparisonResults(messageComparisonResults); compared = true; } } else if (thatBaseComparator is DicomComparator) { DicomComparator thatDicomComparator = (DicomComparator)thatBaseComparator; // Check if both templates have been initialized correctly if ((this.Template == null) || (thatDicomComparator.Template == null)) { return(false); } // generate a local Tag Value collection from this // - this collection will include any tag value pair from the original collection and // the tag value pairs of any tags only (in the original collection) that match from this // comparator - that is the values are taken from this comparator. TagValueCollection lTagValueFilterCollection = GenerateTagValueCollection(tagValueFilterCollection); // check to see if the comparision filters match - without Univeral Matching // - now try to match this local filter collection against thatDicomComparator // - comparators that match will have the same tag value pairs (including the value) as // each other. if ((tagValueFilterCollection.Count == lTagValueFilterCollection.Count) && (thatDicomComparator.UseComparator(lTagValueFilterCollection, false) == true)) { MessageComparisonResults messageComparisonResults = new MessageComparisonResults(this.Name, thatDicomComparator.Name, this.Template.MessageType, thatDicomComparator.Template.Command, this.Template.MessageSubType, thatDicomComparator.Template.SopClassUid); // Iterate over this comparator foreach (Hl7ComparisonTag thisComparisonTag in this.Template.ComparisonTags) { // try to get the equivalent tag in thatDicomComparator DicomComparisonTag thatComparisonTag = thatDicomComparator.Template.ComparisonTags.Find(DicomHl7TagMapTemplate.Hl7ToDicomTag(thisComparisonTag.Tag)); if (thatComparisonTag != null) { AttributeComparisonResults attributeComparisonResults = new AttributeComparisonResults(thatComparisonTag.Tag, SegmentNames.Name(thisComparisonTag.Tag.Segment), thisComparisonTag.Tag.FieldIndex, thisComparisonTag.DataFormat.ToHl7Format(), thatComparisonTag.DataFormat.ToDicomFormat()); if (thisComparisonTag.DataFormat.Equals(thatComparisonTag.DataFormat) == false) { DvtkData.Validation.ValidationMessage validationMessage = new DvtkData.Validation.ValidationMessage(); validationMessage.Type = DvtkData.Validation.MessageType.Error; validationMessage.Message = "Attribute values do not match."; attributeComparisonResults.Messages.Add(validationMessage); } messageComparisonResults.Add(attributeComparisonResults); } } resultsReporter.WriteMessageComparisonResults(messageComparisonResults); compared = true; } } return(compared); }
/// <summary> /// Determines whether the <see cref="DicomComparisonTagCollection"/> contains a specific element. /// </summary> /// <param name="value">The <see cref="DicomComparisonTag"/> to locate in the <see cref="DicomComparisonTagCollection"/>.</param> /// <returns> /// <c>true</c> if the <see cref="DicomComparisonTagCollection"/> contains the specified value; /// otherwise, <c>false</c>. /// </returns> public bool Contains(DicomComparisonTag value) { // If value is not of type Code, this will return false. return(List.Contains(value)); }
/// <summary> /// Removes the first occurrence of a specific <see cref="DicomComparisonTag"/> from the <see cref="DicomComparisonTagCollection"/>. /// </summary> /// <param name="value">The <see cref="DicomComparisonTag"/> to remove from the <see cref="DicomComparisonTagCollection"/>.</param> public void Remove(DicomComparisonTag value) { List.Remove(value); }
/// <summary> /// Inserts an <see cref="DicomComparisonTag"/> element into the <see cref="DicomComparisonTag"/> at the specified index. /// </summary> /// <param name="index">The zero-based index at which value should be inserted.</param> /// <param name="value">The <see cref="DicomComparisonTagCollection"/> to insert.</param> public void Insert(int index, DicomComparisonTag value) { List.Insert(index, value); }
/// <summary> /// Searches for the specified <see cref="DicomComparisonTag"/> and /// returns the zero-based index of the first occurrence within the entire <see cref="DicomComparisonTagCollection"/>. /// </summary> /// <param name="value">The <see cref="DicomComparisonTag"/> to locate in the <see cref="DicomComparisonTagCollection"/>.</param> /// <returns> /// The zero-based index of the first occurrence of value within the entire <see cref="DicomComparisonTagCollection"/>, /// if found; otherwise, -1. /// </returns> public int IndexOf(DicomComparisonTag value) { return(List.IndexOf(value)); }
/// <summary> /// Adds an object to the end of the <see cref="DicomComparisonTagCollection"/>. /// </summary> /// <param name="value">The <see cref="DicomComparisonTag"/> to be added to the end of the <see cref="DicomComparisonTagCollection"/>.</param> /// <returns>The <see cref="DicomComparisonTagCollection"/> index at which the value has been added.</returns> public int Add(DicomComparisonTag value) { return(List.Add(value)); }
private bool CopyToDicomMessage(DvtkData.Dimse.DicomMessage dicomMessage, DicomComparator sourceComparator) { bool messagePopulated = true; // Check if both templates have been initialized correctly if ((this.Template == null) || (sourceComparator.Template == null)) { return(false); } // Iterate over this comparator foreach (DicomComparisonTag thisComparisonTag in this.Template.ComparisonTags) { // try to get the equivalent tag in the sourceComparator DicomComparisonTag sourceComparisonTag = sourceComparator.Template.ComparisonTags.Find(thisComparisonTag.Tag); if (sourceComparisonTag != null) { System.String stringValue = sourceComparisonTag.DataFormat.ToDicomFormat(); DvtkData.Dimse.DataSet dataset = dicomMessage.DataSet; if (dataset != null) { // we need to see if the parent sequence has been set up in the dataset if (thisComparisonTag.ParentSequenceTag != Tag.UNDEFINED) { // set up the parent sequence and add it to the dataset SequenceOfItems sequenceOfItems = null; DvtkData.Dimse.Attribute sequenceAttribute = dataset.GetAttribute(thisComparisonTag.ParentSequenceTag); if (sequenceAttribute == null) { // add in an empty item DvtkData.Dimse.SequenceItem item = new SequenceItem(); dataset.AddAttribute(thisComparisonTag.ParentSequenceTag.GroupNumber, thisComparisonTag.ParentSequenceTag.ElementNumber, VR.SQ, item); sequenceAttribute = dataset.GetAttribute(thisComparisonTag.ParentSequenceTag); } // get the sequence item and add in the required attribute sequenceOfItems = (SequenceOfItems)sequenceAttribute.DicomValue; if (sequenceOfItems.Sequence.Count == 1) { DvtkData.Dimse.SequenceItem item = sequenceOfItems.Sequence[0]; if (item != null) { // add the attribute to the item if (sourceComparisonTag.Vr == VR.SQ) { // add in an empty item // TODO - fix this properly DvtkData.Dimse.SequenceItem item1 = new SequenceItem(); item.AddAttribute(sourceComparisonTag.Tag.GroupNumber, sourceComparisonTag.Tag.ElementNumber, VR.SQ, item1); } else { // if the attribute already exists - then we need to remove it // - it was probably set to the default value DvtkData.Dimse.Attribute attribute = item.GetAttribute(sourceComparisonTag.Tag); if (attribute != null) { item.Remove(attribute); } // add the attribute to the item item.AddAttribute(sourceComparisonTag.Tag.GroupNumber, sourceComparisonTag.Tag.ElementNumber, sourceComparisonTag.Vr, stringValue); } } } } else { // if the attribute already exists - then we need to remove it // - it was probably set to the default value DvtkData.Dimse.Attribute attribute = dataset.GetAttribute(sourceComparisonTag.Tag); if (attribute != null) { dataset.Remove(attribute); } // add the attribute at the top level dataset.AddAttribute(sourceComparisonTag.Tag.GroupNumber, sourceComparisonTag.Tag.ElementNumber, sourceComparisonTag.Vr, stringValue); } } } } return(messagePopulated); }