SobekCM.Resource_Object.Configuration.Metadata_Configuration.Save_To_Config_File C# (CSharp) Méthode

Save_To_Config_File() public méthode

Save this metadata configuration to a XML config file
public Save_To_Config_File ( string FilePath ) : bool
FilePath string File/path for the resulting XML config file
Résultat bool
        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;
        }