/// <summary> Add a new package-level dmdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_Package_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iPackage_dmdSec_ReaderWriter)
     {
         packageLevelDmdSecWriterConfigs.Add(NewConfig);
     }
 }
 /// <summary> Add a new division-level dmdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_Division_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iDivision_dmdSec_ReaderWriter)
     {
         divisionLevelDmdSecWriterConfigs.Add(NewConfig);
     }
 }
 /// <summary> Add a new file-level amdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_File_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iFile_amdSec_ReaderWriter)
     {
         fileLevelAmdSecWriterConfigs.Add(NewConfig);
     }
 }
        /// <summary> Add a new division-level amdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_Division_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
            {
                return;
            }

            //  if (NewConfig.ReaderWriterObject is iDivision_amdSec_ReaderWriter)
            Division_Level_AmdSec_Writer_Configs.Add(NewConfig);
        }
        /// <summary> Add a new file-level dmdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_File_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
            {
                return;
            }

            //  if (NewConfig.ReaderWriterObject is iFile_dmdSec_ReaderWriter)
            File_Level_DmdSec_Writer_Configs.Add(NewConfig);
        }
        /// <summary> Add a new package-level amdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_Package_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
            {
                return;
            }

            if (NewConfig.ReaderWriterObject is iPackage_amdSec_ReaderWriter)
            {
                packageLevelAmdSecWriterConfigs.Add(NewConfig);
            }
        }
 /// <summary> Add a new file-level amdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_File_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iFile_amdSec_ReaderWriter)
         fileLevelAmdSecWriterConfigs.Add(NewConfig);
 }
        /// <summary> Add a new package-level amdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_Package_Level_AmdSec_Writer_Config( METS_Section_ReaderWriter_Config NewConfig )
        {
            if (NewConfig == null)
                return;

            if ( NewConfig.ReaderWriterObject is iPackage_amdSec_ReaderWriter )
                packageLevelAmdSecWriterConfigs.Add(NewConfig);
        }
 /// <summary> Add a new division-level dmdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_Division_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iDivision_dmdSec_ReaderWriter)
         divisionLevelDmdSecWriterConfigs.Add(NewConfig);
 }
        /// <summary> Add a new package-level dmdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_Package_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
                return;

               // if (NewConfig.ReaderWriterObject is iPackage_dmdSec_ReaderWriter)
                Package_Level_DmdSec_Writer_Configs.Add(NewConfig);
        }
        /// <summary> Add a new file-level amdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_File_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
                return;

               // if (NewConfig.ReaderWriterObject is iFile_amdSec_ReaderWriter)
                File_Level_AmdSec_Writer_Configs.Add(NewConfig);
        }
 /// <summary> Adds a new METS section reader/writer configuration </summary>
 /// <param name="New_ReaderWriter"> New METS section reader/writer</param>
 /// <remarks> This instantiates the actual reader/writer class to determine which interfaces
 /// are implemeneted. </remarks>
 public void Add_METS_Section_ReaderWriter(METS_Section_ReaderWriter_Config New_ReaderWriter)
 {
     // Add to list of all METS sections readers/writers
     METS_Section_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 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 file-level dmdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_File_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
                return;

            if (NewConfig.ReaderWriterObject is iFile_dmdSec_ReaderWriter)
                fileLevelDmdSecWriterConfigs.Add(NewConfig);
        }
 /// <summary> Add a new package-level dmdSec reader/writer configuration </summary>
 /// <param name="NewConfig"> New METS section reader writer configuration </param>
 public void Add_Package_Level_DmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
 {
     if (NewConfig.ReaderWriterObject is iPackage_dmdSec_ReaderWriter)
         packageLevelDmdSecWriterConfigs.Add(NewConfig);
 }
        private static METS_Section_ReaderWriter_Config read_mets_section_readerwriter_config(XmlReader readerXml)
        {
            METS_Section_ReaderWriter_Config returnValue = new METS_Section_ReaderWriter_Config();

            readerXml.Read();

            // Move to and save the basic attributes
            if (readerXml.MoveToAttribute("ID"))
                returnValue.ID = readerXml.Value;
            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("isActive")) && (readerXml.Value.ToLower() == "false"))
            {
                returnValue.isActive = false;
            }
            if (readerXml.MoveToAttribute("section"))
            {
                switch (readerXml.Value.ToLower())
                {
                    case "amdsec":
                        returnValue.METS_Section = METS_Section_Type_Enum.amdSec;
                        if (readerXml.MoveToAttribute("amdSecType"))
                        {
                            switch( readerXml.Value.ToLower())
                            {
                                case "techmd":
                                    returnValue.amdSecType = METS_amdSec_Type_Enum.techMD;
                                    break;

                                case "rightsmd":
                                    returnValue.amdSecType = METS_amdSec_Type_Enum.rightsMD;
                                    break;

                                case "digiprovmd":
                                    returnValue.amdSecType = METS_amdSec_Type_Enum.digiProvMD;
                                    break;

                                case "sourcemd":
                                    returnValue.amdSecType = METS_amdSec_Type_Enum.sourceMD;
                                    break;

                            }
                        }
                        break;

                    case "dmdsec":
                        returnValue.METS_Section = METS_Section_Type_Enum.dmdSec;
                        break;
                }
            }

            while (readerXml.Read())
            {
                if (readerXml.NodeType == XmlNodeType.Element)
                {
                    switch (readerXml.Name.ToLower())
                    {
                        case "mapping":
                            METS_Section_ReaderWriter_Mapping newMapping = new METS_Section_ReaderWriter_Mapping();
                            if (readerXml.MoveToAttribute("mdtype"))
                                newMapping.MD_Type = readerXml.Value;
                            if (readerXml.MoveToAttribute("othermdtype"))
                                newMapping.Other_MD_Type = readerXml.Value;
                            if (readerXml.MoveToAttribute("label"))
                                newMapping.Label = readerXml.Value;
                            if ((readerXml.MoveToAttribute("isDefault")) && (readerXml.Value.ToLower() == "true"))
                                newMapping.isDefault = true;
                            returnValue.Add_Mapping(newMapping);
                            break;

                        case "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);
                            break;
                    }
                }
            }

            return returnValue;
        }
        /// <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);
        }
        /// <summary> Adds a new METS section reader/writer configuration </summary>
        /// <param name="New_ReaderWriter"> New METS section reader/writer</param>
        /// <remarks> This instantiates the actual reader/writer class to determine which interfaces
        /// are implemeneted. </remarks>
        public static void Add_METS_Section_ReaderWriter(METS_Section_ReaderWriter_Config New_ReaderWriter)
        {
            // Add to list of all METS sections readers/writers
            metsSectionReaderWriterConfigs.Add(New_ReaderWriter);

            // Create an instance of this reader/writer from the config
            if (!New_ReaderWriter.Create_ReaderWriterObject())
                return;
            object testObj = New_ReaderWriter.ReaderWriterObject;

            // Set flag defaults
            bool isAmdPackage = false;
            bool isDmdPackage = false;
            bool isDmdDivision = false;
            bool isAmdDivision = false;
            bool isDmdFile = false;
            bool isAmdFile = false;

            // Test for interface inheritence
            if (testObj is iPackage_amdSec_ReaderWriter) isAmdPackage = true;
            if (testObj is iPackage_dmdSec_ReaderWriter) isDmdPackage = true;
            if (testObj is iDivision_dmdSec_ReaderWriter) isDmdDivision = true;
            if (testObj is iDivision_amdSec_ReaderWriter) isAmdDivision = true;
            if (testObj is iFile_dmdSec_ReaderWriter) isDmdFile = true;
            if (testObj is iFile_amdSec_ReaderWriter) isAmdFile = true;

            // Step through all the mappings and add to the dictionaries
            foreach (METS_Section_ReaderWriter_Mapping thisMapping in New_ReaderWriter.Mappings)
            {
                // Create the dictionay key for this mapping
                Tuple<string, string> thisMappingKey = new Tuple<string, string>(thisMapping.MD_Type.ToUpper(), thisMapping.Other_MD_Type.ToUpper());

                // Add to the appropriate dictionary
                if (isAmdPackage)
                    packageAmdSecDictionary[thisMappingKey] = (iPackage_amdSec_ReaderWriter)testObj;
                if (isDmdDivision)
                    divisionDmdSecDictionary[thisMappingKey] = (iDivision_dmdSec_ReaderWriter)testObj;
                if (isDmdPackage)
                    packageDmdSecDictionary[thisMappingKey] = (iPackage_dmdSec_ReaderWriter)testObj;
                if (isAmdDivision)
                    divisionAmdSecDictionary[thisMappingKey] = (iDivision_amdSec_ReaderWriter)testObj;
                if (isDmdFile)
                    fileDmdSecDictionary[thisMappingKey] = (iFile_dmdSec_ReaderWriter)testObj;
                if (isAmdFile)
                    fileAmdSecDictionary[thisMappingKey] = (iFile_amdSec_ReaderWriter)testObj;
            }
        }
        private void add_metadata_single_config(TextWriter Output, METS_Section_ReaderWriter_Config Config, bool onlyShowDefaultMd)
        {
            Output.WriteLine("    <tr>");

            if (Config.isActive)
                Output.WriteLine("      <td class=\"sbkSeav_TableCenterCell\"><img src=\"" + Static_Resources_Gateway.Checkmark2_Png + "\" alt=\"yes\" /></td>");
            else
                Output.WriteLine("      <td class=\"sbkSeav_TableCenterCell\"><img src=\"" + Static_Resources_Gateway.Checkmark_Png + "\" alt=\"no\" /></td>");

               //     Output.WriteLine("      <td>" + config.ID + "</td>");
            Output.WriteLine("      <td>" + Config.Label + "</td>");

            // Add all the mappings (or only the default)
            if (onlyShowDefaultMd)
            {
                if (Config.Default_Mapping != null)
                {
                    if ( !String.IsNullOrEmpty(Config.Default_Mapping.Other_MD_Type))
                        Output.WriteLine("      <td>" + Config.Default_Mapping.Other_MD_Type + "</td>");
                    else
                        Output.WriteLine("      <td>" + Config.Default_Mapping.MD_Type + "</td>");
                }
                else
                {
                    Output.WriteLine("      <td></td>");
                }
            }
            else
            {
                Output.WriteLine("      <td>");
                // Start with the default
                METS_Section_ReaderWriter_Mapping defaultMapping = Config.Default_Mapping;
                if (defaultMapping != null)
                {
                    if (!String.IsNullOrEmpty(defaultMapping.Other_MD_Type))
                        Output.WriteLine("        " + defaultMapping.Other_MD_Type + "<br />");
                    else
                        Output.WriteLine("        " + defaultMapping.MD_Type + "<br />");
                }
                foreach (METS_Section_ReaderWriter_Mapping mapping in Config.Mappings)
                {
                    if ((defaultMapping == null) || (defaultMapping != mapping))
                    {
                        if (!String.IsNullOrEmpty(mapping.Other_MD_Type))
                            Output.WriteLine("        " + mapping.Other_MD_Type + "<br />");
                        else
                            Output.WriteLine("        " + mapping.MD_Type + "<br />");
                    }
                }
                Output.WriteLine("      </td>");
            }

            // Add the METS sections
            switch (Config.METS_Section)
            {
                case METS_Section_Type_Enum.DmdSec:
                    Output.WriteLine("      <td>dmdSec</td>");
                    break;
                case METS_Section_Type_Enum.AmdSec:
                    switch (Config.AmdSecType)
                    {
                        case METS_amdSec_Type_Enum.DigiProvMD:
                            Output.WriteLine("      <td>amdSec ( digiProvMD )</td>");
                            break;

                        case METS_amdSec_Type_Enum.RightsMD:
                            Output.WriteLine("      <td>amdSec ( rightsMD )</td>");
                            break;

                        case METS_amdSec_Type_Enum.SourceMD:
                            Output.WriteLine("      <td>amdSec ( sourceMD )</td>");
                            break;

                        case METS_amdSec_Type_Enum.TechMD:
                            Output.WriteLine("      <td>amdSec ( techMD )</td>");
                            break;

                        default:
                            Output.WriteLine("      <td>amdSec </td>");
                            break;
                    }
                    break;
            }

            if (!String.IsNullOrEmpty(Config.Code_Assembly))
                Output.WriteLine("      <td>" + Config.Code_Namespace + "." + Config.Code_Class + " ( " + Config.Code_Assembly + " )</td>");
            else
                Output.WriteLine("      <td>" + (Config.Code_Namespace + "." + Config.Code_Class).Replace("SobekCM.Resource_Object.METS_Sec_ReaderWriters.","") + "</td>");

            //if (Config.Options == null)
            //    Output.WriteLine("      <td></td>");
            //else
            //{
            //    Output.WriteLine("      <td>");
            //    foreach (StringKeyValuePair thisOption in Config.Options)
            //    {
            //        Output.WriteLine("        " + thisOption.Key + " = " + thisOption.Value + "<br />");
            //    }
            //    Output.WriteLine("      </td>");
            //}

            Output.WriteLine("    </tr>");
        }
        /// <summary> Add a new division-level amdSec reader/writer configuration </summary>
        /// <param name="NewConfig"> New METS section reader writer configuration </param>
        public void Add_Division_Level_AmdSec_Writer_Config(METS_Section_ReaderWriter_Config NewConfig)
        {
            if (NewConfig == null)
                return;

            if (NewConfig.ReaderWriterObject is iDivision_amdSec_ReaderWriter)
                divisionLevelAmdSecWriterConfigs.Add(NewConfig);
        }