private static void read_mets_writing_config(XmlReader ReaderXml, Dictionary<string, METS_Section_ReaderWriter_Config> ReaderWriters, Metadata_Configuration Config ) { bool inPackage = false; bool inDivision = false; bool inFile = false; bool inDmdSec = true; METS_Writing_Profile profile = null; int unnamed_profile_counter = 1; while (ReaderXml.Read()) { if (ReaderXml.NodeType == XmlNodeType.Element) { switch (ReaderXml.Name.ToLower()) { case "profile": profile = new METS_Writing_Profile(); if (ReaderXml.MoveToAttribute("name")) profile.Profile_Name = ReaderXml.Value.Trim(); if (ReaderXml.MoveToAttribute("description")) profile.Profile_Description = ReaderXml.Value; if (ReaderXml.MoveToAttribute("isDefault")) { bool tempValue; if (bool.TryParse(ReaderXml.Value, out tempValue)) { profile.Default_Profile = tempValue; } } // Enforce a name for this profile (should have one according to XSD) if (profile.Profile_Name.Length == 0) { profile.Profile_Name = "Unnamed" + unnamed_profile_counter; unnamed_profile_counter++; } // Does this profile already exist? METS_Writing_Profile existingProfile = Config.Get_Writing_Profile(profile.Profile_Name); if (existingProfile != null) { profile = existingProfile; } else { Config.Add_METS_Writing_Profile(profile); } break; case "package_scope": inPackage = true; inDivision = false; inFile = false; break; case "division_scope": inPackage = false; inDivision = true; inFile = false; break; case "file_scope": inPackage = false; inDivision = false; inFile = true; break; case "dmdsec": inDmdSec = true; break; case "amdsec": inDmdSec = false; break; case "readerwriterref": if (ReaderXml.MoveToAttribute("ID")) { string id = ReaderXml.Value.ToUpper(); if ((ReaderWriters.ContainsKey(id)) && (profile != null)) { METS_Section_ReaderWriter_Config readerWriter = ReaderWriters[id]; if (inPackage) { if (inDmdSec) profile.Add_Package_Level_DmdSec_Writer_Config(readerWriter); else profile.Add_Package_Level_AmdSec_Writer_Config(readerWriter); } else if (inDivision) { if (inDmdSec) profile.Add_Division_Level_DmdSec_Writer_Config(readerWriter); else profile.Add_Division_Level_AmdSec_Writer_Config(readerWriter); } else if (inFile) { if (inDmdSec) profile.Add_File_Level_DmdSec_Writer_Config(readerWriter); else profile.Add_File_Level_AmdSec_Writer_Config(readerWriter); } } } break; } } } }