Configuration information about a reader/writer class used to read stand-along metadata files
        /// <summary> Clears the current metadata configuration and restores all the values
        /// to the default reader/writers and profiles </summary>
        public void Set_Default_Values()
        {
            Clear();
            isDefault = true;

            // Add the dublin core file reader/writer
            Metadata_File_ReaderWriter_Config dcFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.DC, Label = "Dublin Core File", canRead = true, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "DC_File_ReaderWriter"};
            dcFile.Add_Option("RDF_Style", "false");
            Add_Metadata_File_ReaderWriter(dcFile);

            // Add the dublin core file reader/writer
            Metadata_File_ReaderWriter_Config dcFile2 = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.DC, Label = "Dublin Core File (RDF Style)", canRead = false, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "DC_File_ReaderWriter"};
            dcFile2.Add_Option("RDF_Style", "true");
            Add_Metadata_File_ReaderWriter(dcFile2);

            // Add the EAD file reader/writer
            Metadata_File_ReaderWriter_Config eadFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.EAD, Label = "Encoded Archival Descriptor (EAD)", canRead = true, canWrite = false, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "EAD_File_ReaderWriter"};
            eadFile.Add_Option("Analyze_Description", "true");
            Add_Metadata_File_ReaderWriter(eadFile);

            // Add the MARC21 file reader/writer
            Metadata_File_ReaderWriter_Config marc21File = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.MARC21, Label = "MARC21 Single Record File", canRead = true, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "Marc21_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(marc21File);

            // Add the MarcXML file reader/writer
            Metadata_File_ReaderWriter_Config marcxmlFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.MARCXML, Label = "MarcXML Single Record File", canRead = true, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "MarcXML_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(marcxmlFile);

            // Add the METS file reader/writer
            Metadata_File_ReaderWriter_Config metsFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.METS, Label = "Metadata Encoding and Transmission Standard (METS)", canRead = true, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "METS_File_ReaderWriter"};
            metsFile.Add_Option("Minimize_File_Info", "false");
            metsFile.Add_Option("Support_Divisional_dmdSec_amdSec", "true");
            Add_Metadata_File_ReaderWriter(metsFile);

            // Add the MODS file reader/writer
            Metadata_File_ReaderWriter_Config modsFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.MODS, Label = "Metadata Object Description Standard (MODS)", canRead = true, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "MODS_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(modsFile);

            // Add the INFO file reader/writer
            Metadata_File_ReaderWriter_Config infoFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.OTHER, Other_MD_Type = "INFO", Label = "Legacy UF INFO Files", canRead = true, canWrite = false, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "INFO_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(infoFile);

            // Add the MXF file reader/writer
            Metadata_File_ReaderWriter_Config mxfFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.OTHER, Other_MD_Type = "MXF", Label = "MXF File", canRead = true, canWrite = false, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "MXF_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(mxfFile);

            // Add the OAI-PMH file reader/writer
            Metadata_File_ReaderWriter_Config oaiFile = new Metadata_File_ReaderWriter_Config {MD_Type = Metadata_File_Type_Enum.OTHER, Other_MD_Type = "OAI", Label = "OAI-PMH File", canRead = false, canWrite = true, Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters", Code_Class = "OAI_File_ReaderWriter"};
            Add_Metadata_File_ReaderWriter(oaiFile);

            // Add the MODS section reader/writer
            METS_Section_ReaderWriter_Config modsSection = new METS_Section_ReaderWriter_Config {ID = "MODS", Label = "MODS", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "MODS_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            modsSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("MODS", "MODS Metadata", true));
            modsSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("Metadata Object Description Standard", false ));
            Add_METS_Section_ReaderWriter(modsSection);

            // Add the dublin core section reader/writer
            METS_Section_ReaderWriter_Config dcSection = new METS_Section_ReaderWriter_Config {ID = "DC", Label = "Dublin Core", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "DC_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            dcSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("DC", "Dublin Core Metadata", true));
            dcSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("DUBLIN CORE", false));
            Add_METS_Section_ReaderWriter(dcSection);

            // Add the MarcXML section reader/writer
            METS_Section_ReaderWriter_Config marcXMLSection = new METS_Section_ReaderWriter_Config {ID = "MARCXML", Label = "MARCXML", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "MarcXML_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            marcXMLSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("MARCXML", "MarcXML Metadata", true));
            Add_METS_Section_ReaderWriter(marcXMLSection);

            // Add the DarwinCore section reader/writer
            METS_Section_ReaderWriter_Config darwinSection = new METS_Section_ReaderWriter_Config {ID = "DARWIN", Label = "DarwinCore", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "DarwinCore_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            darwinSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DARWINCORE", "DarwinCore Zoological Taxonomic Information", true));
            Add_METS_Section_ReaderWriter(darwinSection);

            // Add the ETD section reader/writer
            METS_Section_ReaderWriter_Config etdSection = new METS_Section_ReaderWriter_Config {ID = "ETD", Label = "ETD", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "ETD_SobekCM_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            etdSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEK_ETD", "SobekCM ETD Extension", true));
            Add_METS_Section_ReaderWriter(etdSection);

            // Add the ETD section reader/writer
            METS_Section_ReaderWriter_Config etd2Section = new METS_Section_ReaderWriter_Config {ID = "ETD2", Label = "ETD2", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "ETD_PALMM_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            etd2Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "PALMM", "PALMM ETD Extension", true));
            etd2Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "PALMM Extensions", "PALMM ETD Extension", false));
            Add_METS_Section_ReaderWriter(etd2Section);

            // Add the SobekCM section reader/writer
            METS_Section_ReaderWriter_Config sobekCMSection = new METS_Section_ReaderWriter_Config {ID = "SOBEK1", Label = "SobekCM", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "SobekCM_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            sobekCMSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEKCM", "SobekCM Custom Metadata", true));
            sobekCMSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "UFDC", "SobekCM Custom Metadata", false));
            sobekCMSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DLOC", "SobekCM Custom Metadata", false));
            Add_METS_Section_ReaderWriter(sobekCMSection);

            // Add the SobekCM Map section reader/writer
            METS_Section_ReaderWriter_Config sobekCMMapSection = new METS_Section_ReaderWriter_Config {ID = "SOBEK2", Label = "SobekCM Map", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "SobekCM_Map_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            sobekCMMapSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEK_MAP", "SobekCM Custom Map Authority Metadata", true));
            sobekCMMapSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "UFDC_MAP", "SobekCM Custom Map Authority Metadata", false));
            Add_METS_Section_ReaderWriter(sobekCMMapSection);

            // Add the DAITSS section reader/writer
            METS_Section_ReaderWriter_Config daitssSection = new METS_Section_ReaderWriter_Config {ID = "DAITSS", Label = "DAITSS", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "DAITSS_METS_amdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.AmdSec, AmdSecType = METS_amdSec_Type_Enum.DigiProvMD};
            daitssSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DAITSS", "DAITSS Archiving Information", true));
            Add_METS_Section_ReaderWriter(daitssSection);

            // Add the RightsMD section reader/writer
            METS_Section_ReaderWriter_Config rightsSection = new METS_Section_ReaderWriter_Config {ID = "RIGHTS", Label = "RightsMD", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "RightsMD_METS_amdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.AmdSec, AmdSecType = METS_amdSec_Type_Enum.RightsMD};
            rightsSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "RIGHTSMD", "Rights Information", true));
            Add_METS_Section_ReaderWriter(rightsSection);

            // Add the SobekCM fileinfo section reader/writer
            METS_Section_ReaderWriter_Config sobekCMFileSection = new METS_Section_ReaderWriter_Config {ID = "SOBEK3", Label = "SobekCM FileInfo", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "SobekCM_FileInfo_METS_amdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.AmdSec, AmdSecType = METS_amdSec_Type_Enum.TechMD};
            sobekCMFileSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEKCM", "SobekCM File Technical Details", true));
            Add_METS_Section_ReaderWriter(sobekCMFileSection);

            // Add the GML section reader/writer
            METS_Section_ReaderWriter_Config gmlSection = new METS_Section_ReaderWriter_Config {ID = "GML", Label = "GML Coordinate", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "GML_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            gmlSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "GML", "Geographic Markup Language", true));
            Add_METS_Section_ReaderWriter(gmlSection);

            // Add the IEEE-LOM section reader/writer
            METS_Section_ReaderWriter_Config lomSection = new METS_Section_ReaderWriter_Config {ID = "IEEE-LOM", Label = "IEEE-LOM: Learning Object Metadata", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "LOM_IEEE_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            lomSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "IEEE-LOM", "Learning Object Metadata", true));
            Add_METS_Section_ReaderWriter(lomSection);

            // Add the VRACore section reader/writer
            METS_Section_ReaderWriter_Config vraSection = new METS_Section_ReaderWriter_Config {ID = "VRACORE", Label = "VRACore Visual Resource Metadata", Code_Assembly = String.Empty, Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters", Code_Class = "VRACore_METS_dmdSec_ReaderWriter", isActive = true, METS_Section = METS_Section_Type_Enum.DmdSec};
            vraSection.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "VRACore", "VRACore Visual Resource Metadata", true));
            Add_METS_Section_ReaderWriter(vraSection);

            // Add the default METS writig profile
            METS_Writing_Profile defaultProfile = new METS_Writing_Profile {Default_Profile = true, Profile_Name = "Complete MODS Writer", Profile_Description = "This profile includes almost all of the possible sub-writers but the main bibliographic data is stored in MODS"};
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(modsSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(sobekCMSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(sobekCMMapSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(darwinSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(etdSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(gmlSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(lomSection);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(vraSection);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(daitssSection);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(rightsSection);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(sobekCMFileSection);
             //   defaultProfile.Add_Division_Level_DmdSec_Writer_Config(MODS_Section);
            defaultProfile.Add_Division_Level_DmdSec_Writer_Config(gmlSection);
            Add_METS_Writing_Profile(defaultProfile);

            // Add the default METS writig profile
            METS_Writing_Profile dcProfile = new METS_Writing_Profile {Default_Profile = false, Profile_Name = "Simple Dublin Core Writer", Profile_Description = "This is a simplified profile which uses Dublin Core to describe all levels of the METS"};
            dcProfile.Add_Package_Level_DmdSec_Writer_Config(dcSection);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(daitssSection);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(rightsSection);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(sobekCMFileSection);
            dcProfile.Add_Division_Level_DmdSec_Writer_Config(dcSection);
            dcProfile.Add_File_Level_DmdSec_Writer_Config(dcSection);
            Add_METS_Writing_Profile(dcProfile);

            // Add the standard metadata mapper
            Mapping_Configs.Add(new Metadata_Mapping_Config("Standard Mapper", "SobekCM.Resource_Object.Mapping", "Standard_Bibliographic_Mapper", null ));
        }
        /// <summary> Add a new metadata file reader/writer configuration </summary>
        /// <param name="New_ReaderWriter"> New metadata file reader/writer configuration </param>
        public void Add_Metadata_File_ReaderWriter(Metadata_File_ReaderWriter_Config New_ReaderWriter)
        {
            // If this type already exists, remove it
            Metadata_File_ReaderWriter_Config existing = null;
            foreach (Metadata_File_ReaderWriter_Config existingConfig in Metadata_File_ReaderWriter_Configs)
            {
                if (New_ReaderWriter.MD_Type == existingConfig.MD_Type)
                {
                    if (New_ReaderWriter.MD_Type == Metadata_File_Type_Enum.OTHER)
                    {
                        if (String.Compare(New_ReaderWriter.Other_MD_Type, existingConfig.Other_MD_Type, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            existing = existingConfig;
                            break;
                        }
                    }
                    else
                    {
                        existing = existingConfig;
                        break;
                    }
                }
            }
            if (existing != null)
                Metadata_File_ReaderWriter_Configs.Remove(existing);

            // Now, add the new config
            Metadata_File_ReaderWriter_Configs.Add(New_ReaderWriter);
        }
        /// <summary> Clears the current metadata configuration and restores all the values
        /// to the default reader/writers and profiles </summary>
        public static void Set_Default_Values()
        {
            Clear();

            // Add the dublin core file reader/writer
            Metadata_File_ReaderWriter_Config DC_File = new Metadata_File_ReaderWriter_Config();
            DC_File.MD_Type = Metadata_File_Type_Enum.DC;
            DC_File.Label = "Dublin Core File";
            DC_File.canRead = true;
            DC_File.canWrite = true;
            DC_File.Code_Assembly = String.Empty;
            DC_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            DC_File.Code_Class = "DC_File_ReaderWriter";
            DC_File.Add_Option("RDF_Style", "false");
            Add_Metadata_File_ReaderWriter(DC_File);

            // Add the dublin core file reader/writer
            Metadata_File_ReaderWriter_Config DC_File2 = new Metadata_File_ReaderWriter_Config();
            DC_File2.MD_Type = Metadata_File_Type_Enum.DC;
            DC_File2.Label = "Dublin Core File (RDF Style)";
            DC_File2.canRead = false;
            DC_File2.canWrite = true;
            DC_File2.Code_Assembly = String.Empty;
            DC_File2.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            DC_File2.Code_Class = "DC_File_ReaderWriter";
            DC_File2.Add_Option("RDF_Style", "true");
            Add_Metadata_File_ReaderWriter(DC_File2);

            // Add the EAD file reader/writer
            Metadata_File_ReaderWriter_Config EAD_File = new Metadata_File_ReaderWriter_Config();
            EAD_File.MD_Type = Metadata_File_Type_Enum.EAD;
            EAD_File.Label = "Encoded Archival Descriptor (EAD)";
            EAD_File.canRead = true;
            EAD_File.canWrite = false;
            EAD_File.Code_Assembly = String.Empty;
            EAD_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            EAD_File.Code_Class = "EAD_File_ReaderWriter";
            EAD_File.Add_Option("Analyze_Description", "true");
            Add_Metadata_File_ReaderWriter(EAD_File);

            // Add the MARC21 file reader/writer
            Metadata_File_ReaderWriter_Config MARC21_File = new Metadata_File_ReaderWriter_Config();
            MARC21_File.MD_Type = Metadata_File_Type_Enum.MARC21;
            MARC21_File.Label = "MARC21 Single Record File";
            MARC21_File.canRead = true;
            MARC21_File.canWrite = true;
            MARC21_File.Code_Assembly = String.Empty;
            MARC21_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            MARC21_File.Code_Class = "Marc21_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(MARC21_File);

            // Add the MarcXML file reader/writer
            Metadata_File_ReaderWriter_Config MARCXML_File = new Metadata_File_ReaderWriter_Config();
            MARCXML_File.MD_Type = Metadata_File_Type_Enum.MARCXML;
            MARCXML_File.Label = "MarcXML Single Record File";
            MARCXML_File.canRead = true;
            MARCXML_File.canWrite = true;
            MARCXML_File.Code_Assembly = String.Empty;
            MARCXML_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            MARCXML_File.Code_Class = "MarcXML_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(MARCXML_File);

            // Add the METS file reader/writer
            Metadata_File_ReaderWriter_Config METS_File = new Metadata_File_ReaderWriter_Config();
            METS_File.MD_Type = Metadata_File_Type_Enum.METS;
            METS_File.Label = "Metadata Encoding and Transmission Standard (METS)";
            METS_File.canRead = true;
            METS_File.canWrite = true;
            METS_File.Code_Assembly = String.Empty;
            METS_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            METS_File.Code_Class = "METS_File_ReaderWriter";
            METS_File.Add_Option("Minimize_File_Info", "false");
            METS_File.Add_Option("Support_Divisional_dmdSec_amdSec", "true");
            Add_Metadata_File_ReaderWriter(METS_File);

            // Add the MODS file reader/writer
            Metadata_File_ReaderWriter_Config MODS_File = new Metadata_File_ReaderWriter_Config();
            MODS_File.MD_Type = Metadata_File_Type_Enum.MODS;
            MODS_File.Label = "Metadata Object Description Standard (MODS)";
            MODS_File.canRead = true;
            MODS_File.canWrite = true;
            MODS_File.Code_Assembly = String.Empty;
            MODS_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            MODS_File.Code_Class = "MODS_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(MODS_File);

            // Add the INFO file reader/writer
            Metadata_File_ReaderWriter_Config INFO_File = new Metadata_File_ReaderWriter_Config();
            INFO_File.MD_Type = Metadata_File_Type_Enum.OTHER;
            INFO_File.Other_MD_Type = "INFO";
            INFO_File.Label = "Legacy UF INFO Files";
            INFO_File.canRead = true;
            INFO_File.canWrite = false;
            INFO_File.Code_Assembly = String.Empty;
            INFO_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            INFO_File.Code_Class = "INFO_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(INFO_File);

            // Add the MXF file reader/writer
            Metadata_File_ReaderWriter_Config MXF_File = new Metadata_File_ReaderWriter_Config();
            MXF_File.MD_Type = Metadata_File_Type_Enum.OTHER;
            MXF_File.Other_MD_Type = "MXF";
            MXF_File.Label = "MXF File";
            MXF_File.canRead = true;
            MXF_File.canWrite = false;
            MXF_File.Code_Assembly = String.Empty;
            MXF_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            MXF_File.Code_Class = "MXF_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(MXF_File);

            // Add the OAI-PMH file reader/writer
            Metadata_File_ReaderWriter_Config OAI_File = new Metadata_File_ReaderWriter_Config();
            OAI_File.MD_Type = Metadata_File_Type_Enum.OTHER;
            OAI_File.Other_MD_Type = "OAI";
            OAI_File.Label = "OAI-PMH File";
            OAI_File.canRead = false;
            OAI_File.canWrite = true;
            OAI_File.Code_Assembly = String.Empty;
            OAI_File.Code_Namespace = "SobekCM.Resource_Object.Metadata_File_ReaderWriters";
            OAI_File.Code_Class = "OAI_File_ReaderWriter";
            Add_Metadata_File_ReaderWriter(OAI_File);

            // Add the MODS section reader/writer
            METS_Section_ReaderWriter_Config MODS_Section = new METS_Section_ReaderWriter_Config();
            MODS_Section.ID = "MODS";
            MODS_Section.Label = "MODS";
            MODS_Section.Code_Assembly = String.Empty;
            MODS_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            MODS_Section.Code_Class = "MODS_METS_dmdSec_ReaderWriter";
            MODS_Section.isActive = true;
            MODS_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            MODS_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("MODS", "MODS Metadata", true));
            MODS_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("Metadata Object Description Standard", false ));
            Add_METS_Section_ReaderWriter(MODS_Section);

            // Add the dublin core section reader/writer
            METS_Section_ReaderWriter_Config DC_Section = new METS_Section_ReaderWriter_Config();
            DC_Section.ID = "DC";
            DC_Section.Label = "Dublin Core";
            DC_Section.Code_Assembly = String.Empty;
            DC_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            DC_Section.Code_Class = "DC_METS_dmdSec_ReaderWriter";
            DC_Section.isActive = true;
            DC_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            DC_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("DC", "Dublin Core Metadata", true));
            DC_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("DUBLIN CORE", false));
            Add_METS_Section_ReaderWriter(DC_Section);

            // Add the MarcXML section reader/writer
            METS_Section_ReaderWriter_Config MarcXML_Section = new METS_Section_ReaderWriter_Config();
            MarcXML_Section.ID = "MarcXML";
            MarcXML_Section.Label = "MarcXML";
            MarcXML_Section.Code_Assembly = String.Empty;
            MarcXML_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            MarcXML_Section.Code_Class = "MarcXML_METS_dmdSec_ReaderWriter";
            MarcXML_Section.isActive = true;
            MarcXML_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            MarcXML_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("MARCXML", "MarcXML Metadata", true));
            Add_METS_Section_ReaderWriter(MarcXML_Section);

            // Add the DarwinCore section reader/writer
            METS_Section_ReaderWriter_Config Darwin_Section = new METS_Section_ReaderWriter_Config();
            Darwin_Section.ID = "DARWIN";
            Darwin_Section.Label = "DarwinCore";
            Darwin_Section.Code_Assembly = String.Empty;
            Darwin_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            Darwin_Section.Code_Class = "DarwinCore_METS_dmdSec_ReaderWriter";
            Darwin_Section.isActive = true;
            Darwin_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            Darwin_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DARWINCORE", "DarwinCore Zoological Taxonomic Information", true));
            Add_METS_Section_ReaderWriter(Darwin_Section);

            // Add the ETD section reader/writer
            METS_Section_ReaderWriter_Config ETD_Section = new METS_Section_ReaderWriter_Config();
            ETD_Section.ID = "ETD";
            ETD_Section.Label = "ETD";
            ETD_Section.Code_Assembly = String.Empty;
            ETD_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            ETD_Section.Code_Class = "ETD_METS_dmdSec_ReaderWriter";
            ETD_Section.isActive = true;
            ETD_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            ETD_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "PALMM", "PALMM ETD Extension", true));
            ETD_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "PALMM Extensions", "PALMM ETD Extension", false));
            Add_METS_Section_ReaderWriter(ETD_Section);

            // Add the SobekCM section reader/writer
            METS_Section_ReaderWriter_Config SobekCM_Section = new METS_Section_ReaderWriter_Config();
            SobekCM_Section.ID = "SOBEK1";
            SobekCM_Section.Label = "SobekCM";
            SobekCM_Section.Code_Assembly = String.Empty;
            SobekCM_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            SobekCM_Section.Code_Class = "SobekCM_METS_dmdSec_ReaderWriter";
            SobekCM_Section.isActive = true;
            SobekCM_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            SobekCM_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEKCM", "SobekCM Custom Metadata", true));
            SobekCM_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "UFDC", "SobekCM Custom Metadata", false));
            SobekCM_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DLOC", "SobekCM Custom Metadata", false));
            Add_METS_Section_ReaderWriter(SobekCM_Section);

            // Add the SobekCM Map section reader/writer
            METS_Section_ReaderWriter_Config SobekCM_Map_Section = new METS_Section_ReaderWriter_Config();
            SobekCM_Map_Section.ID = "SOBEK2";
            SobekCM_Map_Section.Label = "SobekCM Map";
            SobekCM_Map_Section.Code_Assembly = String.Empty;
            SobekCM_Map_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            SobekCM_Map_Section.Code_Class = "SobekCM_Map_METS_dmdSec_ReaderWriter";
            SobekCM_Map_Section.isActive = true;
            SobekCM_Map_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            SobekCM_Map_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEK_MAP", "SobekCM Custom Map Authority Metadata", true));
            SobekCM_Map_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "UFDC_MAP", "SobekCM Custom Map Authority Metadata", false));
            Add_METS_Section_ReaderWriter(SobekCM_Map_Section);

            // Add the DAITSS section reader/writer
            METS_Section_ReaderWriter_Config DAITSS_Section = new METS_Section_ReaderWriter_Config();
            DAITSS_Section.ID = "DAITSS";
            DAITSS_Section.Label = "DAITSS";
            DAITSS_Section.Code_Assembly = String.Empty;
            DAITSS_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            DAITSS_Section.Code_Class = "DAITSS_METS_amdSec_ReaderWriter";
            DAITSS_Section.isActive = true;
            DAITSS_Section.METS_Section = METS_Section_Type_Enum.amdSec;
            DAITSS_Section.amdSecType = METS_amdSec_Type_Enum.digiProvMD;
            DAITSS_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "DAITSS", "DAITSS Archiving Information", true));
            Add_METS_Section_ReaderWriter(DAITSS_Section);

            // Add the RightsMD section reader/writer
            METS_Section_ReaderWriter_Config Rights_Section = new METS_Section_ReaderWriter_Config();
            Rights_Section.ID = "RIGHTS";
            Rights_Section.Label = "RightsMD";
            Rights_Section.Code_Assembly = String.Empty;
            Rights_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            Rights_Section.Code_Class = "RightsMD_METS_amdSec_ReaderWriter";
            Rights_Section.isActive = true;
            Rights_Section.METS_Section = METS_Section_Type_Enum.amdSec;
            Rights_Section.amdSecType = METS_amdSec_Type_Enum.rightsMD;
            Rights_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "RIGHTSMD", "Rights Information", true));
            Add_METS_Section_ReaderWriter(Rights_Section);

            // Add the SobekCM fileinfo section reader/writer
            METS_Section_ReaderWriter_Config SobekCM_File_Section = new METS_Section_ReaderWriter_Config();
            SobekCM_File_Section.ID = "SOBEK3";
            SobekCM_File_Section.Label = "SobekCM FileInfo";
            SobekCM_File_Section.Code_Assembly = String.Empty;
            SobekCM_File_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            SobekCM_File_Section.Code_Class = "SobekCM_FileInfo_METS_amdSec_ReaderWriter";
            SobekCM_File_Section.isActive = true;
            SobekCM_File_Section.METS_Section = METS_Section_Type_Enum.amdSec;
            SobekCM_File_Section.amdSecType = METS_amdSec_Type_Enum.techMD;
            SobekCM_File_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "SOBEKCM", "SobekCM File Technical Details", true));
            Add_METS_Section_ReaderWriter(SobekCM_File_Section);

            // Add the GML section reader/writer
            METS_Section_ReaderWriter_Config GML_Section = new METS_Section_ReaderWriter_Config();
            GML_Section.ID = "GML";
            GML_Section.Label = "GML Coordinate";
            GML_Section.Code_Assembly = String.Empty;
            GML_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            GML_Section.Code_Class = "GML_METS_dmdSec_ReaderWriter";
            GML_Section.isActive = true;
            GML_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            GML_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "GML", "Geographic Markup Language", true));
            Add_METS_Section_ReaderWriter(GML_Section);

            // Add the IEEE-LOM section reader/writer
            METS_Section_ReaderWriter_Config LOM_Section = new METS_Section_ReaderWriter_Config();
            LOM_Section.ID = "IEEE-LOM";
            LOM_Section.Label = "IEEE-LOM: Learning Object Metadata";
            LOM_Section.Code_Assembly = String.Empty;
            LOM_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            LOM_Section.Code_Class = "LOM_IEEE_METS_dmdSec_ReaderWriter";
            LOM_Section.isActive = true;
            LOM_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            LOM_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "IEEE-LOM", "Learning Object Metadata", true));
            Add_METS_Section_ReaderWriter(LOM_Section);

            // Add the VRACore section reader/writer
            METS_Section_ReaderWriter_Config VRA_Section = new METS_Section_ReaderWriter_Config();
            VRA_Section.ID = "VRACORE";
            VRA_Section.Label = "VRACore Visual Resource Metadata";
            VRA_Section.Code_Assembly = String.Empty;
            VRA_Section.Code_Namespace = "SobekCM.Resource_Object.METS_Sec_ReaderWriters";
            VRA_Section.Code_Class = "VRACore_METS_dmdSec_ReaderWriter";
            VRA_Section.isActive = true;
            VRA_Section.METS_Section = METS_Section_Type_Enum.dmdSec;
            VRA_Section.Add_Mapping(new METS_Section_ReaderWriter_Mapping("OTHER", "VRACore", "VRACore Visual Resource Metadata", true));
            Add_METS_Section_ReaderWriter(VRA_Section);

            // Add the default METS writig profile
            METS_Writing_Profile defaultProfile = new METS_Writing_Profile();
            defaultProfile.Default_Profile = true;
            defaultProfile.Profile_Name = "Complete MODS Writer";
            defaultProfile.Profile_Description = "This profile includes almost all of the possible sub-writers but the main bibliographic data is stored in MODS";
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(MODS_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(SobekCM_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(SobekCM_Map_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(Darwin_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(ETD_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(GML_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(LOM_Section);
            defaultProfile.Add_Package_Level_DmdSec_Writer_Config(VRA_Section);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(DAITSS_Section);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(Rights_Section);
            defaultProfile.Add_Package_Level_AmdSec_Writer_Config(SobekCM_File_Section);
             //   defaultProfile.Add_Division_Level_DmdSec_Writer_Config(MODS_Section);
            defaultProfile.Add_Division_Level_DmdSec_Writer_Config(GML_Section);
            Add_METS_Writing_Profile(defaultProfile);

            // Add the default METS writig profile
            METS_Writing_Profile dcProfile = new METS_Writing_Profile();
            dcProfile.Default_Profile = false;
            dcProfile.Profile_Name = "Simple Dublin Core Writer";
            dcProfile.Profile_Description = "This is a simplified profile which uses Dublin Core to describe all levels of the METS";
            dcProfile.Add_Package_Level_DmdSec_Writer_Config(DC_Section);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(DAITSS_Section);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(Rights_Section);
            dcProfile.Add_Package_Level_AmdSec_Writer_Config(SobekCM_File_Section);
            dcProfile.Add_Division_Level_DmdSec_Writer_Config(DC_Section);
            dcProfile.Add_File_Level_DmdSec_Writer_Config(DC_Section);
            Add_METS_Writing_Profile(dcProfile);
        }
        private static void read_metadata_file_readerwriter_config(XmlReader readerXml)
        {
            Metadata_File_ReaderWriter_Config returnValue = new Metadata_File_ReaderWriter_Config();
            readerXml.Read();

            // Move to and save the basic attributes
            if (readerXml.MoveToAttribute("mdtype"))
            {
                switch (readerXml.Value.ToUpper())
                {
                    case "EAD":
                        returnValue.MD_Type = Metadata_File_Type_Enum.EAD;
                        break;

                    case "DC":
                        returnValue.MD_Type = Metadata_File_Type_Enum.DC;
                        break;

                    case "MARC21":
                        returnValue.MD_Type = Metadata_File_Type_Enum.MARC21;
                        break;

                    case "MARCXML":
                        returnValue.MD_Type = Metadata_File_Type_Enum.MARCXML;
                        break;

                    case "METS":
                        returnValue.MD_Type = Metadata_File_Type_Enum.METS;
                        break;

                    case "MODS":
                        returnValue.MD_Type = Metadata_File_Type_Enum.MODS;
                        break;

                    case "OTHER":
                        returnValue.MD_Type = Metadata_File_Type_Enum.OTHER;
                        if (readerXml.MoveToAttribute("othermdtype"))
                            returnValue.Other_MD_Type = readerXml.Value;
                        break;
                }
            }

            if (readerXml.MoveToAttribute("label"))
                returnValue.Label = readerXml.Value;
            if (readerXml.MoveToAttribute("namespace"))
                returnValue.Code_Namespace = readerXml.Value;
            if (readerXml.MoveToAttribute("class"))
                returnValue.Code_Class = readerXml.Value;
            if (readerXml.MoveToAttribute("assembly"))
                returnValue.Code_Assembly = readerXml.Value;
            if ((readerXml.MoveToAttribute("canRead")) && (readerXml.Value.ToLower() == "false"))
            {
                returnValue.canRead = false;
            }
            if ((readerXml.MoveToAttribute("canWrite")) && (readerXml.Value.ToLower() == "false"))
            {
                returnValue.canWrite = false;
            }

            while (readerXml.Read())
            {
                if ((readerXml.NodeType == XmlNodeType.Element) && (readerXml.Name.ToLower() == "option"))
                {
                    string key = String.Empty;
                    string value = String.Empty;
                    if (readerXml.MoveToAttribute("key"))
                        key = readerXml.Value;
                    if (readerXml.MoveToAttribute("value"))
                        value = readerXml.Value;
                    if ((key.Length > 0) && (value.Length > 0))
                        returnValue.Add_Option(key, value);
                }
            }

            Metadata_Configuration.Add_Metadata_File_ReaderWriter(returnValue);
        }
 /// <summary> Add a new metadata file reader/writer configuration </summary>
 /// <param name="New_ReaderWriter"> New metadata file reader/writer configuration </param>
 public static void Add_Metadata_File_ReaderWriter(Metadata_File_ReaderWriter_Config New_ReaderWriter)
 {
     metadataFileReaderWriterConfigs.Add(New_ReaderWriter);
 }