/// <summary> /// Serialize DVT Detail Data to Xml. /// </summary> /// <param name="streamWriter">Stream writer to serialize to.</param> /// <param name="level">Recursion level. 0 = Top.</param> /// <returns>bool - success/failure</returns> public override bool DvtDetailToXml(StreamWriter streamWriter, int level) { // try to get the specific character set attribute // - this is needed to instantiate the DICOM to Unicode converter. DicomUnicodeConverter dicomUnicodeConverter = null; Attribute specificCharacterSetAttribute = this.GetAttribute(Tag.SPECIFIC_CHARACTER_SET); if ((specificCharacterSetAttribute != null) && (specificCharacterSetAttribute.ValueRepresentation == VR.CS)) { CodeString codeString = (CodeString)specificCharacterSetAttribute.DicomValue; String specificCharacterSetValue = String.Empty; for (int i = 0; i < codeString.Values.Count; i++) { specificCharacterSetValue += codeString.Values[i]; if ((i + 1) < codeString.Values.Count) { specificCharacterSetValue += "\\"; } } // used fixed location for Unicode character sets based on the application start-up directory //String baseDirectory = String.Format("{0}CHARACTERSETS", System.AppDomain.CurrentDomain.BaseDirectory); String baseDirectory = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "CHARACTERSETS"); dicomUnicodeConverter = new DicomUnicodeConverter(baseDirectory); if (dicomUnicodeConverter.Install(specificCharacterSetValue) == false) { dicomUnicodeConverter = null; } } // serialize the dataset bool result = false; streamWriter.WriteLine("<Dataset Name=\"{0}\">", IodId); foreach (Attribute attribute in this) { attribute.DicomUnicodeConverter = dicomUnicodeConverter; result = attribute.DvtDetailToXml(streamWriter, level); } streamWriter.WriteLine("</Dataset>"); return result; }
/// <summary> /// Convert the incoming string into a Unicode representation in XML format. /// The conversion is only done if 8-bit chars are present in the inString - otherwise /// an empty string is returned. /// </summary> /// <param name="dicomUnicodeConvertor">Instantiated DICOM to Unicode Convertor.</param> /// <param name="inString">String to be converted.</param> /// <returns>Converted Unicode XML string.</returns> public static System.String ConvertStringToXmlUnicode(DicomUnicodeConverter dicomUnicodeConvertor, System.String inString) { String outString = String.Empty; if ((dicomUnicodeConvertor == null) || (inString == null) || (inString == System.String.Empty)) { return outString; } bool only7BitCharsPresent = true; byte[] dicomString = new byte[inString.Length]; for (int i = 0; i < inString.Length; i++) { dicomString[i] = (byte)inString[i]; if ((dicomString[i] > 0x80) || (dicomString[i] == 0x1B)) { only7BitCharsPresent = false; } } if (only7BitCharsPresent == false) { UInt16[] unicode = dicomUnicodeConvertor.Unicode(dicomString); outString = dicomUnicodeConvertor.UnicodeAsXml(unicode); if (outString == String.Empty) { outString = "Specific Character Set not supported for display."; } } return outString; }
/// <summary> /// Serialize DVT Summary Data to Xml. /// </summary> /// <param name="streamWriter">Stream writer to serialize to.</param> /// <param name="level">Recursion level. 0 = Top.</param> /// <returns>bool - success/failure</returns> public bool DvtSummaryToXml(StreamWriter streamWriter, int level) { if ( (streamWriter != null) && this.ContainsMessages() ) { // try to get the specific character set attribute // - this is needed to instantiate the DICOM to Unicode converter. // used fixed location for Unicode character sets based on the application start-up directory //String baseDirectory = String.Format("{0}CHARACTERSETS", System.AppDomain.CurrentDomain.BaseDirectory); String baseDirectory = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "CHARACTERSETS"); DicomUnicodeConverter dicomUnicodeConverter = new DicomUnicodeConverter(baseDirectory); if (dicomUnicodeConverter.Install(_SpecificCharacterSetValues) == false) { dicomUnicodeConverter = null; } streamWriter.WriteLine("<ValidationResults>"); streamWriter.WriteLine("<ValidationDicomMessage>"); streamWriter.WriteLine("<MessageUID>{0}</MessageUID>", MessageUID); streamWriter.WriteLine("<Name>{0}</Name>", Name); if(Name == "Media Directory") streamWriter.WriteLine("<DICOMDIRName>{0}</DICOMDIRName>", DICOMDIRName); if (Modules.ContainsMessages()) { Modules.DisplayConditionText = ConditionTextDisplay; Modules.DicomUnicodeConverter = dicomUnicodeConverter; Modules.DvtSummaryToXml(streamWriter, level); } if ((AdditionalAttributes != null) && (AdditionalAttributes.ContainsMessages() == true)) { AdditionalAttributes.DisplayConditionText = ConditionTextDisplay; AdditionalAttributes.DicomUnicodeConverter = dicomUnicodeConverter; AdditionalAttributes.DvtSummaryToXml(streamWriter, level); } Messages.DvtDetailToXml(streamWriter, level); if (DirectoryRecordTOC != null) { DirectoryRecordTOC.DvtSummaryToXml(streamWriter, level); } streamWriter.WriteLine("</ValidationDicomMessage>"); streamWriter.WriteLine("</ValidationResults>"); } return true; }