public void WriteXmlTest() { XmlWriterSettings settings = new XmlWriterSettings(); string value = "Test"; TagType type = TagType.Additive; bool isUser = false; TagValue firstItem = new TagValue(value, type, isUser); StringWriter stringWriter = new StringWriter(); XmlWriter writer = XmlWriter.Create(stringWriter, settings); var serial = new XmlSerializer(typeof(TagValueCollection)); var coll = new TagValueCollection(); coll.Add(firstItem); serial.Serialize(writer, coll); Assert.AreEqual(m_1ItemXml, stringWriter.ToString()); coll.Add(new TagValue("AnotherTestValue", TagType.Additive, false)); stringWriter = new StringWriter(); writer = XmlWriter.Create(stringWriter, settings); serial.Serialize(writer, coll); Assert.AreEqual(m_2ItemXml, stringWriter.ToString()); }
private TagValueCollection GenerateTagValueCollection(TagValueCollection tagValueFilterCollection) { TagValueCollection localTagValueCollection = new TagValueCollection(); // Check if the comparator can be used with a Universal Match on the Value of the Tag // - that is zero-length Value. if (this.UseComparator(tagValueFilterCollection, true) == true) { foreach (BaseTagValue baseTagValue in tagValueFilterCollection) { Hl7TagValue hl7TagValue = null; if (baseTagValue is Hl7TagValue) { hl7TagValue = (Hl7TagValue)baseTagValue; } else if (baseTagValue is DicomTagValue) { DicomTagValue dicomTagValue = (DicomTagValue)baseTagValue; hl7TagValue = new Hl7TagValue(DicomHl7TagMapTemplate.DicomToHl7Tag(dicomTagValue.Tag), dicomTagValue.Value); } // If the Value is empty (Universal Match) then try to get the actual // value from the comparator so that is actual value will be used against // other comparators. if (hl7TagValue.Tag != null) { if (hl7TagValue.Value == System.String.Empty) { // try to get a value for this Tag from this comparator System.String lValue = getValue(hl7TagValue.Tag); // Add a new Tag Value - with Value coming from this comparator // to the local filter. Hl7TagValue lHl7TagValue = new Hl7TagValue(hl7TagValue.Tag, lValue); localTagValueCollection.Add(lHl7TagValue); } else { // Just add the given Tag Value pair to the local filter localTagValueCollection.Add(hl7TagValue); } } } } // Return the local filter return(localTagValueCollection); }
/// <summary> /// /// </summary> public void CreateDefaultTagValues() { // Create a default value list that is the combination of the user defined // default values and the in-built default values. The user defined values // take precedence. _defaultDicomTagValues = new TagValueCollection(); // Add all the user defined default values provided foreach (BaseDicomTagValue userDefinedTagValue in _userDefinedDefaultTagValues) { if (userDefinedTagValue is DicomTagValueDelete) { // Do not add this to the list as the default should be deleted } else { _defaultDicomTagValues.Add(userDefinedTagValue); } } // Generate all the in-built default values InBuiltDefaultTagValues inBuiltDefaultTagValues = new InBuiltDefaultTagValues(); // Add the in-built default values - but only if not defined by the user foreach (BaseDicomTagValue inBuiltTagValue in inBuiltDefaultTagValues.TagValueDefaults) { BaseDicomTagValue userDefinedTagValue = _userDefinedDefaultTagValues.Find(inBuiltTagValue.Tag); if ((userDefinedTagValue != null) && (userDefinedTagValue is DicomTagValueDelete)) { // Do not add this to the list as the default should be deleted } else if (_defaultDicomTagValues.Find(inBuiltTagValue.Tag) == null) { _defaultDicomTagValues.Add(inBuiltTagValue); } } // Now instantiate the default tag value list _instantiatedDefaultTagValues = new TagValueCollection(); foreach (BaseDicomTagValue defaultTagValue in _defaultDicomTagValues) { // The Value property of defaultTagValue returns the next instantiated value based on the // how the default value was defined at setup. _instantiatedDefaultTagValues.Add(new DicomTagValue(defaultTagValue.Tag, defaultTagValue.Value)); } }
/// <summary> /// Update the default DICOM Tag Values grouped by the given affected entity. /// Any 'auto' default value in the affected entity will get it's next value. /// </summary> /// <param name="affectedEntity">Affected Entity enum - to update.</param> public void UpdateInstantiatedDefaultTagValues(AffectedEntityEnum affectedEntity) { foreach (BaseDicomTagValue defaultTagValue in _defaultDicomTagValues) { if (defaultTagValue.AffectedEntity == affectedEntity) { // Try to get the instantiated default tag value BaseDicomTagValue instantiatedDefaultTagValue = _instantiatedDefaultTagValues.Find(defaultTagValue.Tag); if (instantiatedDefaultTagValue != null) { // Remove the existing tag value _instantiatedDefaultTagValues.Remove(instantiatedDefaultTagValue); // Add the updated value // The Value property of defaultTagValue returns the next instantiated value based on the // how the default value was defined at setup. _instantiatedDefaultTagValues.Add(new DicomTagValue(defaultTagValue.Tag, defaultTagValue.Value)); } } } }
/// <summary> /// Add user defined default Tag Values. Used to help define the message tag/values /// used during the tests. /// </summary> /// <param name="defaultTagValue">Default Tag Value pair.</param> public void AddUserDefinedDefaultTagValue(BaseDicomTagValue defaultTagValue) { _userDefinedDefaultTagValues.Add(defaultTagValue); }
public InBuiltDefaultTagValues() { // Patient Entity default values _defaultDicomTagValues.Add(new DicomTagValue(Tag.PATIENTS_NAME, "Doe^John")); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.PatientEntity, Tag.PATIENT_ID, "PatId:", 1, 1, 6)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PATIENTS_BIRTH_DATE, "19600606")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PATIENTS_SEX, "M")); // Study Entity default values _defaultDicomTagValues.Add(new DicomTagValue(Tag.STUDY_DESCRIPTION, "StudyDescription")); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.StudyEntity, Tag.STUDY_ID, "StdyId:", 1, 1, 3)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetDate(AffectedEntityEnum.StudyEntity, Tag.STUDY_DATE)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetTime(AffectedEntityEnum.StudyEntity, Tag.STUDY_TIME)); // Series Entity default values _defaultDicomTagValues.Add(new DicomTagValue(Tag.PROTOCOL_NAME, "ProtocolName")); _defaultDicomTagValues.Add(new DicomTagValueAutoSetUid(AffectedEntityEnum.SeriesEntity, Tag.SERIES_INSTANCE_UID, _uidRoot, 1)); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.SeriesEntity, Tag.SERIES_NUMBER, "", 1, 1, 0)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.RETRIEVE_AE_TITLE, "RetrieveAET")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.SERIES_DESCRIPTION, "SeriesDescription")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PERFORMING_PHYSICIANS_NAME, "Performing^Physician")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.OPERATORS_NAME, "Operators^Name")); // Instance Entity default values _defaultDicomTagValues.Add(new DicomTagValueAutoSetUid(AffectedEntityEnum.InstanceEntity, Tag.SOP_INSTANCE_UID, _uidRoot, 1)); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.InstanceEntity, Tag.INSTANCE_NUMBER, "", 1, 1, 0)); // Image Service Request Entity default values _defaultDicomTagValues.Add(new DicomTagValue(Tag.REFERENCED_STUDY_SEQUENCE, "")); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.ImageServiceRequestEntity, Tag.ACCESSION_NUMBER, "AccNo:", 1, 1, 6)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.REFERRING_PHYSICIANS_NAME, "Referring^Physician")); // Requested Procedure Entity default values _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.RequestedProcedureEntity, Tag.REQUESTED_PROCEDURE_ID, "RPId:", 1, 1, 3)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.REQUESTED_PROCEDURE_DESCRIPTION, "RequestedProcedureDescription")); _defaultDicomTagValues.Add(new DicomTagValueAutoSetUid(AffectedEntityEnum.RequestedProcedureEntity, Tag.STUDY_INSTANCE_UID, _uidRoot, 1)); // Scheduled Procedure Step Entity default values _defaultDicomTagValues.Add(new DicomTagValue(Tag.MODALITY, "OT")); _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.ScheduledProcedureStepEntity, Tag.SCHEDULED_PROCEDURE_STEP_ID, "SPSId:", 1, 1, 3)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.SCHEDULED_PROCEDURE_STEP_DESCRIPTION, "ScheduledProcedureStepDescription")); _defaultDicomTagValues.Add(new DicomTagValueAutoSetDate(AffectedEntityEnum.ScheduledProcedureStepEntity, Tag.SCHEDULED_PROCEDURE_STEP_START_DATE)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetTime(AffectedEntityEnum.ScheduledProcedureStepEntity, Tag.SCHEDULED_PROCEDURE_STEP_START_TIME)); // Performed Procedure Step Entity default values _defaultDicomTagValues.Add(new DicomTagValueAutoIncrement(AffectedEntityEnum.PerformedProcedureStepEntity, Tag.PERFORMED_PROCEDURE_STEP_ID, "PPSId:", 1, 1, 3)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PERFORMED_PROCEDURE_STEP_DESCRIPTION, "PerformedProcedureStepDescription")); _defaultDicomTagValues.Add(new DicomTagValueAutoSetDate(AffectedEntityEnum.PerformedProcedureStepEntity, Tag.PERFORMED_PROCEDURE_STEP_START_DATE)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetTime(AffectedEntityEnum.PerformedProcedureStepEntity, Tag.PERFORMED_PROCEDURE_STEP_START_TIME)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetDate(AffectedEntityEnum.PerformedProcedureStepEntity, Tag.PERFORMED_PROCEDURE_STEP_END_DATE)); _defaultDicomTagValues.Add(new DicomTagValueAutoSetTime(AffectedEntityEnum.PerformedProcedureStepEntity, Tag.PERFORMED_PROCEDURE_STEP_END_TIME)); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PERFORMED_STATION_AE_TITLE, "PerformedAET")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PERFORMED_STATION_NAME, "PerformedStationName")); _defaultDicomTagValues.Add(new DicomTagValue(Tag.PERFORMED_LOCATION, "PerformedLocation")); }
/// <summary> /// Send a C-MOVE-RQ Information Model Retrieve. /// Retrieve based on the informationModel provided and the query/retrieve level. Take /// the retrieve tags from the retrieveTags provided. The retrieve is done to the move /// destination. /// /// The C-MOVE-RSP messages returned are stored in a DicomQueryItemCollection named RetrieveItems. /// </summary> /// <param name="informationModel">Q/R Information Model to be used in the retrieve operation.</param> /// <param name="level">Query / retrieve level.</param> /// <param name="moveDestination">AE Title of the "move" destination.</param> /// <param name="retrieveTags">List of Retrieve Tags.</param> /// <returns>Boolean indicating success or failure.</returns> public bool SendRetrieveImages(QueryRetrieveInformationModelEnum informationModel, QueryRetrieveLevelEnum level, System.String moveDestination, TagValueCollection retrieveTags) { System.String queryRetrieveLevel = System.String.Empty; switch (level) { case QueryRetrieveLevelEnum.PatientQueryRetrieveLevel: queryRetrieveLevel = "PATIENT"; break; case QueryRetrieveLevelEnum.StudyQueryRetrieveLevel: queryRetrieveLevel = "STUDY"; break; case QueryRetrieveLevelEnum.SeriesQueryRetrieveLevel: queryRetrieveLevel = "SERIES"; break; case QueryRetrieveLevelEnum.InstanceQueryRetrieveLevel: queryRetrieveLevel = "IMAGE"; break; default: return(false); } if (retrieveTags.Find(Tag.QUERY_RETRIEVE_LEVEL) == null) { retrieveTags.Add(new DicomTagValue(Tag.QUERY_RETRIEVE_LEVEL, queryRetrieveLevel)); } _retrieveItems = new DicomQueryItemCollection(); DicomTrigger trigger = new DicomTrigger(TransactionNameEnum.RAD_16); System.String sopClassUid = System.String.Empty; switch (informationModel) { case QueryRetrieveInformationModelEnum.PatientRootQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.1.2"; break; case QueryRetrieveInformationModelEnum.StudyRootQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.2.2"; break; case QueryRetrieveInformationModelEnum.PatientStudyOnlyQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.3.2"; break; default: return(false); } trigger.AddItem(GenerateTriggers.MakeCMoveRetrieve(informationModel, moveDestination, retrieveTags), sopClassUid, "1.2.840.10008.1.2"); // RAD-16 - trigger the ImageArchive bool triggerResult = TriggerActorInstances(ActorTypeEnum.ImageArchive, trigger, true); // Get the retrieve items returned if (triggerResult == true) { foreach (ActorsTransaction actorsTransaction in ActorsTransactionLog) { if (actorsTransaction.FromActorName.Type == ActorTypeEnum.ImageArchive) { BaseTransaction baseTransaction = actorsTransaction.Transaction; if (baseTransaction is DicomTransaction) { DicomTransaction dicomTransaction = (DicomTransaction)baseTransaction; if (dicomTransaction.Processed == false) { DicomMessageCollection cMoveResponses = dicomTransaction.DicomMessages.CMoveResponses; int index = 0; foreach (DvtkHighLevelInterface.Dicom.Messages.DicomMessage dicomMessage in cMoveResponses) { // store all C-MOVE-RSP messages // - use DicomQueryItem.GetValue(Tag.NUMBER_OF_COMPLETED_SUBOPERATIONS) to get completed count // - use DicomQueryItem.GetValue(Tag.NUMBER_OF_FAILED_SUBOPERATIONS) to get failed count // - use DicomQueryItem.GetValue(Tag.NUMBER_OF_REMAINING_SUBOPERATIONS) to get remaining count // - use DicomQueryItem.GetValue(Tag.NUMBER_OF_WARNING_SUBOPERATIONS) to get warning count DicomQueryItem dicomRetriveItem = new DicomQueryItem(index++, dicomMessage); _retrieveItems.Add(dicomRetriveItem); } dicomTransaction.Processed = true; } } } } } return(triggerResult); }
/// <summary> /// Send a C-FIND-RQ Information Model Query. /// Query based on the informationModel provided and the query/retrieve level. Take /// the query tags from the queryTags provided. /// /// The C-FIND-RSP messages returned are stored in a DicomQueryItemCollection named QueryItems. /// </summary> /// <param name="informationModel">Q/R Information Model to be used in the query operation.</param> /// <param name="level">Query / retrieve level.</param> /// <param name="queryTags">List of Query Tags.</param> /// <returns>Boolean indicating success or failure.</returns> public bool SendQueryImages(QueryRetrieveInformationModelEnum informationModel, QueryRetrieveLevelEnum level, TagValueCollection queryTags) { System.String queryRetrieveLevel = System.String.Empty; switch (level) { case QueryRetrieveLevelEnum.PatientQueryRetrieveLevel: _patientLevelQueryItems = new DicomQueryItemCollection(); queryRetrieveLevel = "PATIENT"; break; case QueryRetrieveLevelEnum.StudyQueryRetrieveLevel: _studyLevelQueryItems = new DicomQueryItemCollection(); queryRetrieveLevel = "STUDY"; break; case QueryRetrieveLevelEnum.SeriesQueryRetrieveLevel: _seriesLevelQueryItems = new DicomQueryItemCollection(); queryRetrieveLevel = "SERIES"; break; case QueryRetrieveLevelEnum.InstanceQueryRetrieveLevel: _instanceLevelQueryItems = new DicomQueryItemCollection(); queryRetrieveLevel = "IMAGE"; break; default: return(false); } if (queryTags.Find(Tag.QUERY_RETRIEVE_LEVEL) == null) { queryTags.Add(new DicomTagValue(Tag.QUERY_RETRIEVE_LEVEL, queryRetrieveLevel)); } DicomQueryItemCollection queryItems = QueryItems(level); DicomTrigger trigger = new DicomTrigger(TransactionNameEnum.RAD_14); System.String sopClassUid = System.String.Empty; switch (informationModel) { case QueryRetrieveInformationModelEnum.PatientRootQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.1.1"; break; case QueryRetrieveInformationModelEnum.StudyRootQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.2.1"; break; case QueryRetrieveInformationModelEnum.PatientStudyOnlyQueryRetrieveInformationModel: sopClassUid = "1.2.840.10008.5.1.4.1.2.3.1"; break; default: return(false); } trigger.AddItem(GenerateTriggers.MakeCFindQuery(informationModel, queryTags), sopClassUid, "1.2.840.10008.1.2"); // RAD-14 - trigger the ImageArchive bool triggerResult = TriggerActorInstances(ActorTypeEnum.ImageArchive, trigger, true); // Get the query items returned if (triggerResult == true) { foreach (ActorsTransaction actorsTransaction in ActorsTransactionLog) { if (actorsTransaction.FromActorName.Type == ActorTypeEnum.ImageArchive) { BaseTransaction baseTransaction = actorsTransaction.Transaction; if (baseTransaction is DicomTransaction) { DicomTransaction dicomTransaction = (DicomTransaction)baseTransaction; if (dicomTransaction.Processed == false) { DicomMessageCollection cFindResponses = dicomTransaction.DicomMessages.CFindResponses; int index = 0; foreach (DvtkHighLevelInterface.Dicom.Messages.DicomMessage dicomMessage in cFindResponses) { if (dicomMessage.DataSet.Count != 0) { DicomQueryItem dicomQueryItem = new DicomQueryItem(index++, dicomMessage); queryItems.Add(dicomQueryItem); } } dicomTransaction.Processed = true; } } } } } return(triggerResult); }
/// <summary> /// Add a Tag Value filter for the comparator. /// Only compare messages which contain the same values for this filter. /// </summary> /// <param name="tagValueFilter">Tag Value Filter.</param> public void AddComparisonTagValueFilter(DicomTagValue tagValueFilter) { _tagValueFilterCollection.Add(tagValueFilter); }