public bool Save_To_Config_File(string FilePath)
{
bool returnValue = true;
StreamWriter writer = null;
try
{
writer = new StreamWriter(FilePath, false, Encoding.UTF8);
writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
writer.WriteLine("<SobekCM_Config xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ");
writer.WriteLine("\txmlns=\"http://digital.uflib.ufl.edu/metadata/sobekcm_config\" ");
writer.WriteLine("\txsi:schemaLocation=\"http://digital.uflib.ufl.edu/metadata/sobekcm_config ");
writer.WriteLine("\t\thttp://digital.uflib.ufl.edu/metadata/sobekcm_config/sobekcm_config.xsd\">");
writer.WriteLine("\t<Metadata>");
writer.WriteLine("\t\t<Metadata_File_ReaderWriters>");
foreach (Metadata_File_ReaderWriter_Config fileConfig in Metadata_File_ReaderWriter_Configs)
{
writer.Write("\t\t\t<ReaderWriter ");
switch (fileConfig.MD_Type)
{
case Metadata_File_Type_Enum.DC:
writer.Write("mdtype=\"DC\" ");
break;
case Metadata_File_Type_Enum.EAD:
writer.Write("mdtype=\"EAD\" ");
break;
case Metadata_File_Type_Enum.MARCXML:
writer.Write("mdtype=\"MARCXML\" ");
break;
case Metadata_File_Type_Enum.MARC21:
writer.Write("mdtype=\"MARC21\" ");
break;
case Metadata_File_Type_Enum.METS:
writer.Write("mdtype=\"METS\" ");
break;
case Metadata_File_Type_Enum.MODS:
writer.Write("mdtype=\"MODS\" ");
break;
case Metadata_File_Type_Enum.OTHER:
writer.Write("mdtype=\"OTHER\" othermdtype=\"" + Convert_String_To_XML_Safe(fileConfig.Other_MD_Type) + "\" ");
break;
}
writer.Write("label=\"" + Convert_String_To_XML_Safe(fileConfig.Label) + "\" namespace=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Namespace) + "\" class=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Class) + "\" ");
if (fileConfig.Code_Assembly.Length > 0)
writer.Write("assembly=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Assembly) + "\" ");
writer.Write(fileConfig.canRead ? "canRead=\"true\" " : "canRead=\"false\" ");
writer.Write(fileConfig.canWrite ? "canWrite=\"true\" " : "canWrite=\"false\" ");
if (fileConfig.Options.Count > 0)
{
writer.WriteLine(">");
writer.WriteLine("\t\t\t\t<Options>");
foreach (StringKeyValuePair thisKey in fileConfig.Options)
{
writer.WriteLine("\t\t\t\t\t<Option key=\"" + Convert_String_To_XML_Safe(thisKey.Key) + "\" value=\"" + Convert_String_To_XML_Safe(thisKey.Value) + "\" />");
}
writer.WriteLine("\t\t\t\t</Options>");
writer.WriteLine("\t\t\t</ReaderWriter>");
}
else
{
writer.WriteLine("/>");
}
}
writer.WriteLine("\t\t</Metadata_File_ReaderWriters>");
writer.WriteLine("\t\t<METS_Sec_ReaderWriters>");
foreach (METS_Section_ReaderWriter_Config fileConfig in METS_Section_File_ReaderWriter_Configs)
{
writer.Write("\t\t\t<ReaderWriter ID=\"" + Convert_String_To_XML_Safe(fileConfig.ID) + "\" label=\"" + Convert_String_To_XML_Safe(fileConfig.Label) + "\" namespace=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Namespace) + "\" class=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Class) + "\" ");
if (fileConfig.Code_Assembly.Length > 0)
writer.Write("assembly=\"" + Convert_String_To_XML_Safe(fileConfig.Code_Assembly) + "\" ");
writer.Write(fileConfig.isActive ? "isActive=\"true\" " : "isActive=\"false\" ");
switch (fileConfig.METS_Section)
{
case METS_Section_Type_Enum.DmdSec:
writer.Write("section=\"dmdSec\" ");
break;
case METS_Section_Type_Enum.AmdSec:
writer.Write("section=\"amdSec\" ");
switch (fileConfig.AmdSecType)
{
case METS_amdSec_Type_Enum.DigiProvMD:
writer.Write("amdSecType=\"digiProvMD\" ");
break;
case METS_amdSec_Type_Enum.RightsMD:
writer.Write("amdSecType=\"rightsMD\" ");
break;
case METS_amdSec_Type_Enum.SourceMD:
writer.Write("amdSecType=\"sourceMD\" ");
break;
case METS_amdSec_Type_Enum.TechMD:
writer.Write("amdSecType=\"techMD\" ");
break;
}
break;
}
writer.WriteLine(">");
if (fileConfig.Mappings_Count > 0)
{
writer.WriteLine("\t\t\t\t<Mappings>");
foreach (METS_Section_ReaderWriter_Mapping thisMapping in fileConfig.Mappings)
{
writer.Write("\t\t\t\t\t<Mapping mdtype=\"" + Convert_String_To_XML_Safe(thisMapping.MD_Type) + "\" ");
if (thisMapping.Other_MD_Type.Length > 0)
writer.Write("othermdtype=\"" + Convert_String_To_XML_Safe(thisMapping.Other_MD_Type) + "\" ");
if (thisMapping.Label.Length > 0)
writer.Write("label=\"" + Convert_String_To_XML_Safe(thisMapping.Label) + "\" ");
if (thisMapping.isDefault)
writer.Write("isDefault=\"true\" ");
writer.WriteLine("/>");
}
writer.WriteLine("\t\t\t\t</Mappings>");
}
if (fileConfig.Options.Count > 0)
{
writer.WriteLine("\t\t\t\t<Options>");
foreach (StringKeyValuePair thisKey in fileConfig.Options)
{
writer.WriteLine("\t\t\t\t\t<Option key=\"" + Convert_String_To_XML_Safe(thisKey.Key) + "\" value=\"" + Convert_String_To_XML_Safe(thisKey.Value) + "\" />");
}
writer.WriteLine("\t\t\t\t</Options>");
}
writer.WriteLine("\t\t\t</ReaderWriter>");
}
writer.WriteLine("\t\t</METS_Sec_ReaderWriters>");
writer.WriteLine("\t\t<METS_Writing>");
foreach (METS_Writing_Profile profile in MetsWritingProfiles)
{
writer.Write("\t\t\t<Profile ");
if (profile.Default_Profile)
writer.Write("isDefault=\"true\" ");
writer.Write("name=\"" + Convert_String_To_XML_Safe(profile.Profile_Name) + "\" ");
writer.Write("description=\"" + Convert_String_To_XML_Safe(profile.Profile_Description) + "\">");
writer.WriteLine("\t\t\t\t<Package_Scope>");
if (profile.Package_Level_DmdSec_Writer_Configs.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<dmdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in profile.Package_Level_DmdSec_Writer_Configs)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</dmdSec>");
}
if (profile.Package_Level_AmdSec_Writer_Configs.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<amdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in profile.Package_Level_AmdSec_Writer_Configs)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</amdSec>");
}
writer.WriteLine("\t\t\t\t</Package_Scope>");
List<METS_Section_ReaderWriter_Config> divAmdSec = profile.Division_Level_AmdSec_Writer_Configs;
List<METS_Section_ReaderWriter_Config> divDmdSec = profile.Division_Level_DmdSec_Writer_Configs;
if ((divAmdSec.Count > 0) || (divDmdSec.Count > 0))
{
writer.WriteLine("\t\t\t\t<Division_Scope>");
if (divDmdSec.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<dmdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in divDmdSec)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</dmdSec>");
}
if (divAmdSec.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<amdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in divAmdSec)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</amdSec>");
}
writer.WriteLine("\t\t\t\t</Division_Scope>");
}
List<METS_Section_ReaderWriter_Config> fileAmdSec = profile.File_Level_AmdSec_Writer_Configs;
List<METS_Section_ReaderWriter_Config> fileDmdSec = profile.File_Level_DmdSec_Writer_Configs;
if ((fileAmdSec.Count > 0) || (fileDmdSec.Count > 0))
{
writer.WriteLine("\t\t\t\t<File_Scope>");
if (fileDmdSec.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<dmdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in fileDmdSec)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</dmdSec>");
}
if (fileAmdSec.Count > 0)
{
writer.WriteLine("\t\t\t\t\t<amdSec>");
foreach (METS_Section_ReaderWriter_Config thisWriter in fileAmdSec)
{
writer.WriteLine("\t\t\t\t\t\t<ReaderWriterRef ID=\"" + thisWriter.ID + "\" />");
}
writer.WriteLine("\t\t\t\t\t</amdSec>");
}
writer.WriteLine("\t\t\t\t</File_Scope>");
}
writer.WriteLine("\t\t\t</Profile>");
}
writer.WriteLine("\t\t</METS_Writing>");
// Any additional metadata module info to include?
if (Metadata_Modules_To_Include.Count > 0)
{
writer.WriteLine("\t\t<Additional_Metadata_Modules>");
foreach (Additional_Metadata_Module_Config config in Metadata_Modules_To_Include)
{
writer.Write("\t\t\t<MetadataModule key=\"" + Convert_String_To_XML_Safe(config.Key) + "\" ");
if (config.Code_Assembly.Length > 0)
{
writer.Write("assembly=\"" + Convert_String_To_XML_Safe(config.Code_Assembly) + "\" ");
}
writer.WriteLine("namespace=\"" + Convert_String_To_XML_Safe(config.Code_Namespace) + "\" class=\"" + Convert_String_To_XML_Safe(config.Code_Class) + "\" />");
}
writer.WriteLine("\t\t</Additional_Metadata_Modules>");
}
writer.WriteLine("\t</Metadata>");
writer.WriteLine("</SobekCM_Config>");
writer.Flush();
writer.Close();
}
catch
{
returnValue = false;
}
finally
{
if (writer != null)
writer.Close();
}
return returnValue;
}