Example #1
0
        /// <summary> Renders the HTML for this element </summary>
        /// <param name="Output"> Textwriter to write the HTML for this element </param>
        /// <param name="Bib"> Object to populate this element from </param>
        /// <param name="Skin_Code"> Code for the current skin </param>
        /// <param name="isMozilla"> Flag indicates if the current browse is Mozilla Firefox (different css choices for some elements)</param>
        /// <param name="popup_form_builder"> Builder for any related popup forms for this element </param>
        /// <param name="Current_User"> Current user, who's rights may impact the way an element is rendered </param>
        /// <param name="CurrentLanguage"> Current user-interface language </param>
        /// <param name="Translator"> Language support object which handles simple translational duties </param>
        /// <param name="Base_URL"> Base URL for the current request </param>
        /// <remarks> This simple element does not append any popup form to the popup_form_builder</remarks>
        public override void Render_Template_HTML(TextWriter Output, SobekCM_Item Bib, string Skin_Code, bool isMozilla, StringBuilder popup_form_builder, User_Object Current_User, Web_Language_Enum CurrentLanguage, Language_Support_Info Translator, string Base_URL)
        {
            // Check that an acronym exists
            if (Acronym.Length == 0)
            {
                Acronym = "Measurement related to this item, whether it is length, volume, duration, weight, etc..";
            }

            List <string> terms   = new List <string>();
            List <string> schemes = new List <string>();

            // Try to get any existing learning object metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo != null)
            {
                foreach (VRACore_Measurement_Info thisMeasurement in vraInfo.Measurements)
                {
                    terms.Add(thisMeasurement.Measurements);
                    schemes.Add(thisMeasurement.Units);
                }
            }

            render_helper(Output, terms, schemes, Skin_Code, Current_User, CurrentLanguage, Translator, Base_URL);
        }
        /// <summary> Renders the HTML for this element </summary>
        /// <param name="Output"> Textwriter to write the HTML for this element </param>
        /// <param name="Bib"> Object to populate this element from </param>
        /// <param name="Skin_Code"> Code for the current skin </param>
        /// <param name="isMozilla"> Flag indicates if the current browse is Mozilla Firefox (different css choices for some elements)</param>
        /// <param name="popup_form_builder"> Builder for any related popup forms for this element </param>
        /// <param name="Current_User"> Current user, who's rights may impact the way an element is rendered </param>
        /// <param name="CurrentLanguage"> Current user-interface language </param>
        /// <param name="Translator"> Language support object which handles simple translational duties </param>
        /// <param name="Base_URL"> Base URL for the current request </param>
        /// <remarks> This simple element does not append any popup form to the popup_form_builder</remarks>
        public override void Render_Template_HTML(TextWriter Output, SobekCM_Item Bib, string Skin_Code, bool isMozilla, StringBuilder popup_form_builder, User_Object Current_User, Web_Language_Enum CurrentLanguage, Language_Support_Info Translator, string Base_URL)
        {
            // Check that an acronym exists
            if (Acronym.Length == 0)
            {
                Acronym = "Materials out of which this resource, or a portion of this resource, was created.";
            }

            List <string> terms   = new List <string>();
            List <string> schemes = new List <string>();

            // Try to get any existing learning object metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo != null)
            {
                foreach (VRACore_Materials_Info thisMaterial in vraInfo.Materials)
                {
                    terms.Add(thisMaterial.Materials);
                    schemes.Add(thisMaterial.Type);
                }
            }

            render_helper(Output, terms, schemes, Skin_Code, Current_User, CurrentLanguage, Translator, Base_URL);
        }
 /// <summary> Prepares the bib object for the save, by clearing any existing data in this element's related field(s) </summary>
 /// <param name="Bib"> Existing digital resource object which may already have values for this element's data field(s) </param>
 /// <param name="Current_User"> Current user, who's rights may impact the way an element is rendered </param>
 /// <remarks> This clears any preexisting resource type values </remarks>
 public override void Prepare_For_Save(SobekCM_Item Bib, User_Object Current_User)
 {
     // Try to get any existing metadata module
     VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
     if (vraInfo != null)
         vraInfo.Clear_Cultural_Contexts();
 }
Example #4
0
        /// <summary> Renders the HTML for this element </summary>
        /// <param name="Output"> Textwriter to write the HTML for this element </param>
        /// <param name="Bib"> Object to populate this element from </param>
        /// <param name="Skin_Code"> Code for the current skin </param>
        /// <param name="IsMozilla"> Flag indicates if the current browse is Mozilla Firefox (different css choices for some elements)</param>
        /// <param name="PopupFormBuilder"> Builder for any related popup forms for this element </param>
        /// <param name="Current_User"> Current user, who's rights may impact the way an element is rendered </param>
        /// <param name="CurrentLanguage"> Current user-interface language </param>
        /// <param name="Translator"> Language support object which handles simple translational duties </param>
        /// <param name="Base_URL"> Base URL for the current request </param>
        /// <remarks> This simple element does not append any popup form to the popup_form_builder</remarks>
        public override void Render_Template_HTML(TextWriter Output, SobekCM_Item Bib, string Skin_Code, bool IsMozilla, StringBuilder PopupFormBuilder, User_Object Current_User, Web_Language_Enum CurrentLanguage, Language_Support_Info Translator, string Base_URL)
        {
            // Check that an acronym exists
            if (Acronym.Length == 0)
            {
                Acronym = "Technique used with this visual resource.";
            }

            // Start the list to collect all current instance values
            List <string> instanceValues = new List <string>();

            // Try to get any existing metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo != null)
            {
                foreach (string thisValue in vraInfo.Techniques)
                {
                    instanceValues.Add(thisValue);
                }
            }

            // Add to the current template (stream)
            render_helper(Output, instanceValues, Skin_Code, Current_User, CurrentLanguage, Translator, Base_URL);
        }
Example #5
0
        /// <summary> Saves the data rendered by this element to the provided bibliographic object during postback </summary>
        /// <param name="Bib"> Object into which to save the user's data, entered into the html rendered by this element </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            // Try to get any existing metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;


            string[] getKeys = HttpContext.Current.Request.Form.AllKeys;
            foreach (string thisKey in getKeys.Where(thisKey => thisKey.IndexOf(html_element_name.Replace("_", "")) == 0))
            {
                // Get the value from the form element
                string value = HttpContext.Current.Request.Form[thisKey].Trim();
                if (value.Length > 0)
                {
                    // There is a value, so ensure metadata does exist
                    if (vraInfo == null)
                    {
                        vraInfo = new VRACore_Info();
                        Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                    }

                    // Add the value
                    vraInfo.Add_Technique(value);
                }
            }
        }
        /// <summary> Map one or more data elements from the original METS-based object to the
        /// BriefItem object </summary>
        /// <param name="Original"> Original METS-based object </param>
        /// <param name="New"> New object to populate some data from the original </param>
        /// <returns> TRUE if successful, FALSE if an exception is encountered </returns>
        public bool MapToBriefItem(SobekCM_Item Original, BriefItemInfo New)
        {
            // Try to get the VRA Core metadata
            VRACore_Info vraInfo = Original.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            // Add the learning object metadata if it exists
            if ((vraInfo != null) && (vraInfo.hasData))
            {
                // Collect the state/edition information
                if (vraInfo.State_Edition_Count > 0)
                {
                    New.Add_Description("State / Edition", vraInfo.State_Editions);
                }

                // Collect and display all the material information
                if (vraInfo.Material_Count > 0)
                {
                    foreach (VRACore_Materials_Info materials in vraInfo.Materials)
                    {
                        New.Add_Description("Materials", materials.Materials);
                    }
                }

                // Collect and display all the measurements information
                if (vraInfo.Measurement_Count > 0)
                {
                    foreach (VRACore_Measurement_Info measurement in vraInfo.Measurements)
                    {
                        New.Add_Description("Measurements", measurement.Measurements);
                    }
                }

                // Display all cultural context information
                if (vraInfo.Cultural_Context_Count > 0)
                {
                    New.Add_Description("Cultural Context", vraInfo.Cultural_Contexts);
                }

                // Display all style/period information
                if (vraInfo.Style_Period_Count > 0)
                {
                    New.Add_Description("Style/Period", vraInfo.Style_Periods);
                }

                // Display all technique information
                if (vraInfo.Technique_Count > 0)
                {
                    New.Add_Description("Technique", vraInfo.Techniques);
                }

                // Add the inscriptions
                if (vraInfo.Inscription_Count > 0)
                {
                    New.Add_Description("Inscription", vraInfo.Inscriptions);
                }
            }

            return(true);
        }
        /// <summary> Saves the data stored in this instance of the
        /// element to the provided bibliographic object </summary>
        /// <param name="Bib"> Object to populate this element from </param>
        public override void Populate_From_Bib(SobekCM_Item Bib)
        {
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if ((vraInfo != null) && (base.index < vraInfo.Style_Period_Count))
            {
                base.thisBox.Text = vraInfo.Style_Periods[base.index];
            }
        }
        /// <summary> Prepares the bib object for the save, by clearing the
        /// existing data in this element's related field. </summary>
        /// <param name="Bib"> Existing Bib object </param>
        public override void Prepare_For_Save(SobekCM_Item Bib)
        {
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo != null)
            {
                vraInfo.Clear_Style_Periods();
            }
        }
        /// <summary> Flag indicates if this active reader/writer needs to append schema reference information
        /// to the METS XML header by analyzing the contents of the digital resource item </summary>
        /// <param name="METS_Item"> Package with all the metadata to save</param>
        /// <returns> TRUE if the schema should be attached, otherwise fALSE </returns>
        public bool Schema_Reference_Required_Package(SobekCM_Item METS_Item)
        {
            VRACore_Info vraInfo = METS_Item.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo == null)
            {
                return(false);
            }
            return(vraInfo.hasData);
        }
        /// <summary> Flag indicates if this active reader/writer will write a dmdSec </summary>
        /// <param name="METS_Item"> Package with all the metadata to save</param>
        /// <returns> TRUE if the package has data to be written, otherwise fALSE </returns>
        public bool Include_dmdSec(SobekCM_Item METS_Item, Dictionary <string, object> Options)
        {
            // Ensure this metadata module extension exists and has data
            VRACore_Info vraInfo = METS_Item.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if ((vraInfo == null) || (!vraInfo.hasData))
            {
                return(false);
            }
            return(true);
        }
        /// <summary> Saves the data stored in this instance of the
        /// element to the provided bibliographic object </summary>
        /// <param name="Bib"> Object to populate this element from </param>
        public override void Populate_From_Bib(SobekCM_Item Bib)
        {
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if ((vraInfo != null) && (base.index < vraInfo.Material_Count))
            {
                base.thisKeywordBox.Text = vraInfo.Materials[base.index].Materials;
                base.thisSchemeBox.Text  = vraInfo.Materials[base.index].Type;
            }
            else
            {
                base.thisSchemeBox.Text = "medium";
            }
        }
        /// <summary> Saves the data stored in this instance of the
        /// element to the provided bibliographic object </summary>
        /// <param name="Bib"> Object into which to save this element's data </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            if (thisBox.Text.Trim().Length > 0)
            {
                VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                if (vraInfo == null)
                {
                    vraInfo = new VRACore_Info();
                    Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                }

                vraInfo.Add_Style_Period(thisBox.Text.Trim());
            }
        }
        /// <summary> Saves the data rendered by this element to the provided bibliographic object during postback </summary>
        /// <param name="Bib"> Object into which to save the user's data, entered into the html rendered by this element </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            // Try to get any existing VRAcore metadata module
            VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            Dictionary <string, string> terms   = new Dictionary <string, string>();
            Dictionary <string, string> schemes = new Dictionary <string, string>();

            string[] getKeys = HttpContext.Current.Request.Form.AllKeys;
            foreach (string thisKey in getKeys)
            {
                if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_first") == 0)
                {
                    string term  = HttpContext.Current.Request.Form[thisKey];
                    string index = thisKey.Replace(html_element_name.Replace("_", "") + "_first", "");
                    terms[index] = term;
                }

                if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_second") == 0)
                {
                    string scheme = HttpContext.Current.Request.Form[thisKey];
                    string index  = thisKey.Replace(html_element_name.Replace("_", "") + "_second", "");
                    schemes[index] = scheme;
                }
            }

            // Were values found?
            if (terms.Count > 0)
            {
                // There is a value, so ensure VRAcore metadata does exist
                if (vraInfo == null)
                {
                    vraInfo = new VRACore_Info();
                    Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                }

                // Add each value
                foreach (string index in terms.Keys)
                {
                    if (!String.IsNullOrEmpty(terms[index]))
                    {
                        vraInfo.Add_Material(terms[index], schemes.ContainsKey(index) ? schemes[index] : String.Empty);
                    }
                }
            }
        }
        /// <summary> Saves the data stored in this instance of the
        /// element to the provided bibliographic object </summary>
        /// <param name="Bib"> Object into which to save this element's data </param>
        public override void Save_To_Bib(SobekCM_Item Bib)
        {
            if (base.thisKeywordBox.Text.Trim().Length > 0)
            {
                VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                if (vraInfo == null)
                {
                    vraInfo = new VRACore_Info();
                    Bib.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
                }

                if (base.thisSchemeBox.Text.Trim().Length > 0)
                {
                    vraInfo.Add_Material(base.thisKeywordBox.Text.Trim(), base.thisSchemeBox.Text.ToLower());
                }
                else
                {
                    vraInfo.Add_Material(base.thisKeywordBox.Text.Trim(), "medium");
                }
            }
        }
Example #15
0
        /// <summary> Adds a bit of data to a bibliographic package using the mapping </summary>
        /// <param name="Package">Bibliographic package to receive the data</param>
        /// <param name="Data">Text of the data</param>
        /// <param name="Field">Mapped field</param>
        /// <returns> TRUE if the field was mapped, FALSE if there was data and no mapping was found </returns>
        public bool Add_Data(SobekCM_Item Package, string Data, string Field)
        {
            // If no field listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrEmpty(Field))
            {
                return(true);
            }

            // If no data listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrWhiteSpace(Data))
            {
                return(true);
            }

            // Trim the data
            Data = Data.Trim();

            // Normalize the field name
            string correctName = Field.ToLower().Replace("(s)", "").Replace("#", "").Replace(" ", "").Replace(".", "").Replace(":", "").Replace("\\", "").Replace("/", "").Replace(")", "").Replace("(", "").Trim();

            // Everything depends on the field which is mapped
            switch (correctName)
            {
            case "acknowledgements":
            case "acknowledgments":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CreationCredits, "Acknowledgments");
                return(true);

            case "bulletincommitteemembers":
                Package.Bib_Info.Add_Named_Entity(Data, "Bulletin Committee Member").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "collectionlocation":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.AdditionalPhysicalForm, "Collection Location");
                return(true);

            case "columnist":
                Package.Bib_Info.Add_Named_Entity(Data, "Columnist").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "contents":
                Package.Bib_Info.Get_TableOfContents("Contents").Add(Data);
                return(true);

            case "contributinginstitution":
                Package.Bib_Info.Add_Named_Entity(Data, "Contributing Institution").Name_Type = Name_Info_Type_Enum.Corporate;
                return(true);

            case "contributor":
                Package.Bib_Info.Add_Named_Entity(Data, "Contributing Institution").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "coverstories":
                Package.Bib_Info.Get_TableOfContents("Cover Stories").Add(Data);
                return(true);

            case "coverstoriescontents":
                Package.Bib_Info.Get_TableOfContents("Cover Stories / Contents").Add(Data);
                return(true);

            case "covertitle":
                Package.Bib_Info.Get_TableOfContents("Contents").Add(Data);
                return(true);

            case "creator":
                Package.Bib_Info.Add_Named_Entity(Data, "Creator").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "creator,performer":
                Package.Bib_Info.Add_Named_Entity(Data, "Creator / Performer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "date":
                Package.Bib_Info.Origin_Info.Date_Created = Data;
                return(true);

            case "dateoriginal":
                Package.Bib_Info.Origin_Info.Date_Created = Data;
                return(true);

            case "description":
                Package.Bib_Info.Add_Abstract(new Abstract_Info {
                    Abstract_Text = Data, Type = "Summary", Display_Label = "Description"
                });
                return(true);

            case "designer":
                Package.Bib_Info.Add_Named_Entity(Data, "Designer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "digitalid":
                Package.Bib_Info.Add_Identifier(Data, "Digital Id");
                return(true);

            case "digitizationspecifications":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Ownership, "Digitization Specifications");
                return(true);

            case "editing":
            case "editor":
                Package.Bib_Info.Add_Named_Entity(Data, "Editor").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "editorwriter":
                Package.Bib_Info.Add_Named_Entity(Data, "Editor / Writer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "emcee":
                Package.Bib_Info.Add_Named_Entity(Data, "Emcee").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "features":
                Package.Bib_Info.Get_TableOfContents("Features").Add(Data);
                return(true);

            case "filesizeandduration":
                // Get the duration from the parantheses
                int fsd_start = Data.IndexOf("(");
                int fsd_end   = Data.IndexOf(")");
                if ((fsd_start > 0) && (fsd_end > fsd_start))
                {
                    string duration_string = Data.Substring(fsd_start + 1, fsd_end - fsd_start - 1);
                    if ((duration_string.IndexOf("second", StringComparison.OrdinalIgnoreCase) > 0) || (duration_string.IndexOf("minute", StringComparison.OrdinalIgnoreCase) > 0))
                    {
                        Package.Bib_Info.Original_Description.Extent = duration_string;
                    }
                }
                return(true);

            case "founder":
                Package.Bib_Info.Add_Named_Entity(Data, "Founder").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "frontpageheadlines":
                Package.Bib_Info.Get_TableOfContents("Front Page Headlines").Add(Data);
                return(true);

            case "generalsubjects":
                split_add_subjects(Package, Data);
                return(true);

            case "genre":
                Package.Bib_Info.Add_Genre(Data);
                return(true);

            case "geographiccoverage":
                Package.Bib_Info.Add_Spatial_Subject(Data);
                return(true);

            case "historicalnarrative":
                Package.Bib_Info.Add_Named_Entity(Data, "Historical Narrative").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "identifiedindividuals":
                Subject_Info_Name nameSubj = Package.Bib_Info.Add_Name_Subject();
                nameSubj.Full_Name   = Data;
                nameSubj.Name_Type   = Name_Info_Type_Enum.Personal;
                nameSubj.Description = "Identified Individuals";
                return(true);

            case "image-specificsubjects":
                split_add_subjects(Package, Data);
                return(true);

            case "internalnote":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.InternalComments, "Acknowledgments");
                return(true);

            case "interviewdate":
                Package.Bib_Info.Origin_Info.Add_Date_Other(Data, "Interview Date");
                return(true);

            case "interviewlocation":
                Package.Bib_Info.Origin_Info.Add_Place(Data);
                return(true);

            case "interviewee":
                Package.Bib_Info.Add_Named_Entity(Data, "Interviewee").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "interviewer":
                Package.Bib_Info.Add_Named_Entity(Data, "Interviewer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "issue":
            case "issuenumber":
                // If there is already an enumberation (1), use (2)
                if (!String.IsNullOrWhiteSpace(Package.Bib_Info.Series_Part_Info.Enum1))
                {
                    int issue_number = -1;
                    if (Int32.TryParse(Data, out issue_number))
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1       = "Issue " + Data;
                        Package.Bib_Info.Series_Part_Info.Enum1_Index = issue_number;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = Data + " Issue";
                    }
                }
                else
                {
                    int issue_number = -1;
                    if (Int32.TryParse(Data, out issue_number))
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2       = "Issue " + Data;
                        Package.Bib_Info.Series_Part_Info.Enum2_Index = issue_number;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2 = Data + " Issue";
                    }
                }
                return(true);

            case "issue-specificsubjects":
                split_add_subjects(Package, Data);
                return(true);

            case "item-specificsubjects":
                split_add_subjects(Package, Data);
                return(true);

            case "language":
                Package.Bib_Info.Add_Language(Data);
                return(true);

            case "layout":
                Package.Bib_Info.Add_Named_Entity(Data, "Layout").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "location":
                Package.Bib_Info.Origin_Info.Add_Place(Data);
                return(true);

            case "locationdepicted":
                Package.Bib_Info.Add_Spatial_Subject(Data);
                return(true);

            case "monthseason":
                Package.Bib_Info.Series_Part_Info.Month = Data;
                return(true);

            case "monthscovered":
                Package.Bib_Info.Series_Part_Info.Month = Data;
                return(true);

            case "namesorganizations":
                Package.Bib_Info.Add_Name_Subject().Full_Name = Data;
                return(true);

            case "originaldate":
                Package.Bib_Info.Origin_Info.Date_Issued = Data;
                return(true);

            case "originalitemid":
                Package.Bib_Info.Add_Identifier(Data, "Original ItemID");
                return(true);

            case "originalmedium":
                VRACore_Info vraCoreInfo2 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo2 == null)
                {
                    vraCoreInfo2 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo2);
                }
                vraCoreInfo2.Add_Material(Data, "medium");
                return(true);

            case "originalpublisher":
                Package.Bib_Info.Add_Publisher(Data);
                return(true);

            case "photographer":
                Package.Bib_Info.Add_Named_Entity(Data, "Photographer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "photographs":
                Package.Bib_Info.Add_Named_Entity(Data, "Photograph Studio").Name_Type = Name_Info_Type_Enum.Corporate;
                return(true);

            case "physicalcollection":
                Package.Bib_Info.Location.Holding_Name = Data;
                return(true);

            case "presentedatboardmeeting":
                Package.Bib_Info.Origin_Info.Add_Date_Other(Data, "Presented at board meeting");
                return(true);

            case "presenter":
                Package.Bib_Info.Add_Named_Entity(Data, "Presenter").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "president":
                Package.Bib_Info.Add_Named_Entity(Data, "President").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "projectcoordinator":
                Package.Bib_Info.Add_Named_Entity(Data, "Project Coordinator").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "projectcreator":
                Package.Bib_Info.Add_Named_Entity(Data, "Project Creator").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "publicationdate":
                Package.Bib_Info.Origin_Info.Date_Issued = Data;
                return(true);

            case "publisher":
                Package.Bib_Info.Add_Publisher(Data);
                return(true);

            case "relatedbminewsletter":
                Related_Item_Info relatedNewsletter = new Related_Item_Info();
                relatedNewsletter.Main_Title.Title = Data;
                relatedNewsletter.Relationship     = Related_Item_Type_Enum.UNKNOWN;
                relatedNewsletter.Add_Note("Related BMI Newsletter");
                Package.Bib_Info.Add_Related_Item(relatedNewsletter);
                return(true);

            case "relatedbmiphoto":
                Related_Item_Info relatedPhoto = new Related_Item_Info();
                relatedPhoto.Main_Title.Title = Data;
                relatedPhoto.Relationship     = Related_Item_Type_Enum.UNKNOWN;
                relatedPhoto.Add_Note("Related BMI Photograph");
                Package.Bib_Info.Add_Related_Item(relatedPhoto);
                return(true);

            case "resourcetype":
                Package.Bib_Info.Type.Add_Uncontrolled_Type(Data);
                return(true);

            case "rightsinformation":
                Package.Bib_Info.Access_Condition.Text = Data;
                return(true);

            case "scrapbook-specificsubjects":
                split_add_subjects(Package, Data);
                return(true);

            case "seasonmonth":
                Package.Bib_Info.Series_Part_Info.Month = Data;
                return(true);

            case "subjects":
                split_add_subjects(Package, Data);
                return(true);

            case "timeperiodcovered":
                // Was this either a number, or a range?
                int    dash_count = 0;
                bool   isNumbers  = true;
                string dns        = Data.Replace(" ", "");
                foreach (char thisChar in dns)
                {
                    if ((!Char.IsNumber(thisChar)) && (thisChar != '-'))
                    {
                        isNumbers = false;
                        break;
                    }

                    if (thisChar == '-')
                    {
                        dash_count++;
                    }
                }

                // Just add as is, if not number or range
                if ((!isNumbers) || (dash_count > 1))
                {
                    Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                }
                else
                {
                    int start_year = -1;
                    int end_year   = -1;
                    // Was it a range?
                    if (dash_count == 1)
                    {
                        string[] splitter = dns.Split("-".ToCharArray());
                        if (splitter.Length == 2)
                        {
                            if ((Int32.TryParse(splitter[0], out start_year)) && (Int32.TryParse(splitter[1], out end_year)))
                            {
                                Package.Bib_Info.Add_Temporal_Subject(start_year, end_year, Data);
                            }
                            else
                            {
                                Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                            }
                        }
                    }
                    else
                    {
                        if (Int32.TryParse(Data, out start_year))
                        {
                            Package.Bib_Info.Add_Temporal_Subject(start_year, -1, Data);
                        }
                        else
                        {
                            Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                        }
                    }
                }
                return(true);

            case "title":
                Package.Bib_Info.Main_Title.Title = Data;
                return(true);

            case "topics":
                split_add_subjects(Package, Data);
                return(true);

            case "transcriptionprovidedby":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CreationCredits, "Transcription Provided By");
                return(true);

            case "videofilesizeandduration":
                // Get the duration from the parantheses
                int vfsd_start = Data.IndexOf("(");
                int vfsd_end   = Data.IndexOf(")");
                if ((vfsd_start > 0) && (vfsd_end > vfsd_start))
                {
                    string duration_string = Data.Substring(vfsd_start + 1, vfsd_end - vfsd_start - 1);
                    Package.Bib_Info.Original_Description.Extent = duration_string;
                }
                return(true);

            case "videographer":
                Package.Bib_Info.Add_Named_Entity(Data, "Videographer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "volume":
                // If there is already an enumberation (1), move it to (2)
                if (!String.IsNullOrWhiteSpace(Package.Bib_Info.Series_Part_Info.Enum1))
                {
                    Package.Bib_Info.Series_Part_Info.Enum2       = Package.Bib_Info.Series_Part_Info.Enum1;
                    Package.Bib_Info.Series_Part_Info.Enum2_Index = Package.Bib_Info.Series_Part_Info.Enum1_Index;
                }

                // Now, add the volume
                int volume_number = -1;
                if (Int32.TryParse(Data, out volume_number))
                {
                    Package.Bib_Info.Series_Part_Info.Enum1       = "Volume " + Data;
                    Package.Bib_Info.Series_Part_Info.Enum1_Index = volume_number;
                }
                else
                {
                    Package.Bib_Info.Series_Part_Info.Enum1       = Data + " Volume";
                    Package.Bib_Info.Series_Part_Info.Enum1_Index = -1;
                }
                return(true);


            case "wars":
                if (Data.IndexOf("World War") >= 0)
                {
                    Package.Bib_Info.Add_Temporal_Subject(1939, 1945, "World War");
                }
                else if (Data.IndexOf("Vietnam") >= 0)
                {
                    Package.Bib_Info.Add_Temporal_Subject(1961, 1975, "Vietnam War");
                }
                else if (Data.IndexOf("Korean") >= 0)
                {
                    Package.Bib_Info.Add_Temporal_Subject(1950, 1953, "Korean War");
                }
                return(true);

            case "writer":
                Package.Bib_Info.Add_Named_Entity(Data, "Writer").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "writerscontributors":
                Package.Bib_Info.Add_Named_Entity(Data, "Writer / Contributor").Name_Type = Name_Info_Type_Enum.Personal;
                return(true);

            case "year":
                Package.Bib_Info.Series_Part_Info.Year = Data;
                return(true);

            default:
                // No mapping exists and this is a non-known no-mapping
                return(false);
            }
        }
        /// <summary> Writes the dmdSec for the entire package to the text writer </summary>
        /// <param name="Output_Stream">Stream to which the formatted text is written </param>
        /// <param name="METS_Item">Package with all the metadata to save</param>
        /// <param name="Options"> Dictionary of any options which this METS section writer may utilize</param>
        /// <returns>TRUE if successful, otherwise FALSE </returns>
        public bool Write_dmdSec(TextWriter Output_Stream, SobekCM_Item METS_Item, Dictionary <string, object> Options)
        {
            // Ensure this metadata module extension exists and has data
            VRACore_Info vraInfo = METS_Item.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if ((vraInfo == null) || (!vraInfo.hasData))
            {
                return(false);
            }

            Output_Stream.WriteLine("<vra:vra>");
            if (vraInfo.Cultural_Context_Count > 0)
            {
                foreach (string thisValue in vraInfo.Cultural_Contexts)
                {
                    Output_Stream.WriteLine("<vra:culturalContext>" + base.Convert_String_To_XML_Safe(thisValue) + "</vra:culturalContext>");
                }
            }
            if (vraInfo.Inscription_Count > 0)
            {
                foreach (string thisValue in vraInfo.Inscriptions)
                {
                    Output_Stream.WriteLine("<vra:inscription>" + base.Convert_String_To_XML_Safe(thisValue) + "</vra:inscription>");
                }
            }
            if (vraInfo.Material_Count > 0)
            {
                foreach (VRACore_Materials_Info thisValue in vraInfo.Materials)
                {
                    if (thisValue.Type.Length > 0)
                    {
                        Output_Stream.WriteLine("<vra:material type=\"" + base.Convert_String_To_XML_Safe(thisValue.Type) + "\">" + base.Convert_String_To_XML_Safe(thisValue.Materials) + "</vra:material>");
                    }
                    else
                    {
                        Output_Stream.WriteLine("<vra:material>" + base.Convert_String_To_XML_Safe(thisValue.Materials) + "</vra:material>");
                    }
                }
            }
            if (vraInfo.Measurement_Count > 0)
            {
                foreach (VRACore_Measurement_Info thisValue in vraInfo.Measurements)
                {
                    if (thisValue.Units.Length > 0)
                    {
                        Output_Stream.WriteLine("<vra:measurements unit=\"" + base.Convert_String_To_XML_Safe(thisValue.Units) + "\">" + base.Convert_String_To_XML_Safe(thisValue.Measurements) + "</vra:measurements>");
                    }
                    else
                    {
                        Output_Stream.WriteLine("<vra:measurements>" + base.Convert_String_To_XML_Safe(thisValue.Measurements) + "</vra:measurements>");
                    }
                }
            }
            if (vraInfo.State_Edition_Count > 0)
            {
                foreach (string thisValue in vraInfo.State_Editions)
                {
                    Output_Stream.WriteLine("<vra:stateEdition>" + base.Convert_String_To_XML_Safe(thisValue) + "</vra:stateEdition>");
                }
            }
            if (vraInfo.Style_Period_Count > 0)
            {
                foreach (string thisValue in vraInfo.Style_Periods)
                {
                    Output_Stream.WriteLine("<vra:stylePeriod>" + base.Convert_String_To_XML_Safe(thisValue) + "</vra:stylePeriod>");
                }
            }
            if (vraInfo.Technique_Count > 0)
            {
                foreach (string thisValue in vraInfo.Techniques)
                {
                    Output_Stream.WriteLine("<vra:technique>" + base.Convert_String_To_XML_Safe(thisValue) + "</vra:technique>");
                }
            }
            Output_Stream.WriteLine("</vra:vra>");

            return(true);
        }
Example #17
0
        /// <summary>  </summary>
        /// <param name="thisElement"></param>
        /// <param name="Bib"></param>
        /// <returns></returns>
        private int Get_Bib_Element_Count(abstract_Element thisElement, SobekCM_Item Bib)
        {
            switch (thisElement.Type)
            {
            case Element_Type.Abstract:
                return(Bib.Bib_Info.Abstracts_Count);

            case Element_Type.Affiliation:
                return(Bib.Bib_Info.Affiliations_Count);

            case Element_Type.Aggregations:
                return(Bib.Behaviors.Aggregation_Count > 0 ? 1 : 0);

            case Element_Type.Attribution:
                return(Bib.Bib_Info.Notes.Count(thisNote => thisNote.Note_Type == Note_Type_Enum.funding));

            case Element_Type.BibID:
                return(1);

            case Element_Type.Classification:
                return(Bib.Bib_Info.Classifications_Count);

            case Element_Type.Contributor:
                int contributor_count = 0;
                if ((Bib.Bib_Info.Main_Entity_Name.hasData) && (Bib.Bib_Info.Main_Entity_Name.Roles.Count > 0) && ((Bib.Bib_Info.Main_Entity_Name.Roles[0].Role.ToUpper() == "CONTRIBUTOR") || (Bib.Bib_Info.Main_Entity_Name.Roles[0].Role.ToUpper() == "CTB")))
                {
                    contributor_count++;
                }
                contributor_count += Bib.Bib_Info.Names.Count(thisName => (thisName.Roles.Count > 0) && ((thisName.Roles[0].Role.ToUpper() == "CONTRIBUTOR") || (thisName.Roles[0].Role.ToUpper() == "CTB")));
                return(contributor_count);

            case Element_Type.Coordinates:
                GeoSpatial_Information geoInfo = Bib.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                if (geoInfo == null)
                {
                    return(0);
                }
                return((geoInfo.Point_Count > 0) || (geoInfo.Polygon_Count > 0) ? 1 : 0);

            case Element_Type.Creator:
                if ((thisElement.Display_SubType != "simple") || (((Creator_Simple_Element)thisElement).Contributor_Exists == false))
                {
                    return(Bib.Bib_Info.Main_Entity_Name.hasData
                                       ? Bib.Bib_Info.Names.Count + 1
                                       : Bib.Bib_Info.Names.Count);
                }

                int non_contributor_count = 0;
                if ((Bib.Bib_Info.Main_Entity_Name.hasData) && ((Bib.Bib_Info.Main_Entity_Name.Roles.Count == 0) || ((Bib.Bib_Info.Main_Entity_Name.Roles[0].Role.ToUpper() != "CONTRIBUTOR") && (Bib.Bib_Info.Main_Entity_Name.Roles[0].Role.ToUpper() != "CTB"))))
                {
                    non_contributor_count++;
                }
                non_contributor_count += Bib.Bib_Info.Names.Count(thisName => (thisName.Roles.Count == 0) || ((thisName.Roles[0].Role.ToUpper() != "CONTRIBUTOR") && (thisName.Roles[0].Role.ToUpper() != "CTB")));
                return(non_contributor_count);

            case Element_Type.CreatorNotes:
                return(Bib.METS_Header.Creator_Individual_Notes_Count > 0 ? 1 : 0);

            case Element_Type.Date:
                return(Bib.Bib_Info.Origin_Info.Date_Issued.Length == 0 ? 0 : 1);

            case Element_Type.DateCopyrighted:
                return(Bib.Bib_Info.Origin_Info.Date_Copyrighted.Length > 0 ? 1 : 0);

            case Element_Type.DescriptionStandard:
                return(Bib.Bib_Info.Record.Description_Standard.Length > 0 ? 1 : 0);

            case Element_Type.Donor:
                return(Bib.Bib_Info.Donor.Full_Name.Length > 0 ? 1 : 0);

            case Element_Type.Edition:
                return(Bib.Bib_Info.Origin_Info.Edition.Length > 0 ? 1 : 0);

            case Element_Type.EncodingLevel:
                return(Bib.Bib_Info.EncodingLevel.Length > 0 ? 1 : 0);

            case Element_Type.EAD:
                return((Bib.Bib_Info.Location.EAD_URL.Length > 0) || (Bib.Bib_Info.Location.EAD_Name.Length > 0) ? 1 : 0);

            case Element_Type.Error:
                return(0);

            case Element_Type.ETD_CommitteeChair:
                Thesis_Dissertation_Info thesisInfo = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo != null) && (thesisInfo.Committee_Chair.Length > 0) ? 1 : 0);

            case Element_Type.ETD_CommitteeCoChair:
                Thesis_Dissertation_Info thesisInfo2 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo2 != null) && (thesisInfo2.Committee_Co_Chair.Length > 0) ? 1 : 0);

            case Element_Type.ETD_CommitteeMember:
                Thesis_Dissertation_Info thesisInfo3 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo3 != null) ? thesisInfo3.Committee_Members_Count : 0);

            case Element_Type.ETD_Degree:
                Thesis_Dissertation_Info thesisInfo4 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo4 != null) && (thesisInfo4.Degree.Length > 0) ? 1 : 0);

            case Element_Type.ETD_DegreeDiscipline:
                Thesis_Dissertation_Info thesisInfo5 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo5 != null) && (thesisInfo5.Degree_Discipline.Length > 0) ? 1 : 0);

            case Element_Type.ETD_DegreeGrantor:
                Thesis_Dissertation_Info thesisInfo6 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo6 != null) && (thesisInfo6.Degree_Grantor.Length > 0) ? 1 : 0);

            case Element_Type.ETD_DegreeLevel:
                Thesis_Dissertation_Info thesisInfo7 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo7 != null) && (thesisInfo7.Degree_Level != Thesis_Dissertation_Info.Thesis_Degree_Level_Enum.Unknown) ? 1 : 0);

            case Element_Type.ETD_GraduationDate:
                Thesis_Dissertation_Info thesisInfo8 = Bib.Get_Metadata_Module(GlobalVar.THESIS_METADATA_MODULE_KEY) as Thesis_Dissertation_Info;
                return((thesisInfo8 != null) && (thesisInfo8.Graduation_Date.HasValue) ? 1 : 0);

            case Element_Type.FCLA_Flags:
                return(1);

            case Element_Type.FDA_Account:
                DAITSS_Info daitssInfo = Bib.Get_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY) as DAITSS_Info;
                return(daitssInfo != null && daitssInfo.Account.Trim().Length > 0 ? 1 : 0);

            case Element_Type.FDA_SubAccount:
                DAITSS_Info daitssInfo2 = Bib.Get_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY) as DAITSS_Info;
                return(daitssInfo2 != null && daitssInfo2.SubAccount.Trim().Length > 0 ? 1 : 0);

            case Element_Type.FDA_Project:
                DAITSS_Info daitssInfo3 = Bib.Get_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY) as DAITSS_Info;
                return(daitssInfo3 != null && daitssInfo3.Project.Trim().Length > 0 ? 1 : 0);

            case Element_Type.Format:
                return(Bib.Bib_Info.Original_Description.Extent.Length > 0 ? 1 : 0);

            case Element_Type.Frequency:
                return(Bib.Bib_Info.Origin_Info.Frequencies_Count);

            case Element_Type.Genre:
                return(Bib.Bib_Info.Genres_Count);

            case Element_Type.Holding:
                return(1);

            case Element_Type.Wordmark:
                return(Bib.Behaviors.Wordmark_Count > 0 ? 1 : 0);

            case Element_Type.Identifier:
                return(Bib.Bib_Info.Identifiers_Count);

            case Element_Type.Language:
                return(Bib.Bib_Info.Languages.Count(thisLanguage => thisLanguage.Language_Text.Length > 0));

            case Element_Type.MainThumbnail:
                return(Bib.Behaviors.Main_Thumbnail.Length > 0 ? 1 : 0);

            case Element_Type.Manufacturer:
                return(Bib.Bib_Info.Manufacturers_Count);

            case Element_Type.Note:
                return(Bib.Bib_Info.Notes.Count(thisNote => thisNote.Note_Type != Note_Type_Enum.statement_of_responsibility));

            case Element_Type.OtherURL:
                return((Bib.Bib_Info.Location.Other_URL.Length > 0) || (Bib.Bib_Info.Location.Other_URL_Note.Length > 0) ? 1 : 0);

            case Element_Type.PALMM_Code:
                return(1);

            case Element_Type.Publisher:
                return(Bib.Bib_Info.Publishers_Count);

            case Element_Type.Publication_Place:
                if (Bib.Bib_Info.Publishers_Count > 0)
                {
                    if (Bib.Bib_Info.Publishers.SelectMany(thisName => thisName.Places).Any(thisPlace => thisPlace.Place_Text.Length > 0))
                    {
                        return(1);
                    }
                }
                return(0);

            case Element_Type.RecordOrigin:
                return(Bib.Bib_Info.Record.Record_Origin.Length > 0 ? 1 : 0);

            case Element_Type.RecordStatus:
                return(1);

            case Element_Type.RelatedItem:
                return(Bib.Bib_Info.RelatedItems_Count);

            case Element_Type.Rights:
                return(Bib.Bib_Info.Access_Condition.Text.Length > 0 ? 1 : 0);

            case Element_Type.Scale:
                if (Bib.Bib_Info.Subjects.Where(thisSubject => thisSubject.Class_Type == Subject_Info_Type.Cartographics).Any(thisSubject => ((Subject_Info_Cartographics)thisSubject).Scale.Length > 0))
                {
                    return(1);
                }
                return(0);

            case Element_Type.SerialHierarchy:
                return(Bib.Behaviors.Serial_Info.Count > 0 ? 1 : 0);

            case Element_Type.Source_Institution:
                return(1);

            case Element_Type.Source_Note:
                return(Bib.Bib_Info.Notes.Count(thisNote => thisNote.Note_Type == Note_Type_Enum.source));

            case Element_Type.Spatial:
                int hierSubjectCount = 0;
                if (thisElement.Display_SubType == "dublincore")
                {
                    foreach (Subject_Info thisSubject in Bib.Bib_Info.Subjects)
                    {
                        if (thisSubject.Class_Type == Subject_Info_Type.Hierarchical_Spatial)
                        {
                            hierSubjectCount++;
                        }
                        else if (thisSubject.Class_Type == Subject_Info_Type.Standard)
                        {
                            Subject_Info_Standard standSubject = (Subject_Info_Standard)thisSubject;
                            if ((standSubject.Genres_Count == 0) && (standSubject.Occupations_Count == 0) && (standSubject.Topics_Count == 0))
                            {
                                hierSubjectCount++;
                            }
                        }
                    }
                }
                else
                {
                    hierSubjectCount += Bib.Bib_Info.Subjects.Count(thisSubject => thisSubject.Class_Type == Subject_Info_Type.Hierarchical_Spatial);
                }

                return(hierSubjectCount);

            case Element_Type.Structure_Map:
                return(1);

            case Element_Type.Subject:
                bool standard = true;
                if ((thisElement.Display_SubType == "simple") || (thisElement.Display_SubType == "dublincore"))
                {
                    if (((Subject_Simple_Element)thisElement).Seperate_Dublin_Core_Spatial_Exists)
                    {
                        standard = false;
                    }
                }
                int subjectCount = 0;
                if (standard)
                {
                    subjectCount += Bib.Bib_Info.Subjects.Count(thisSubject => (thisSubject.Class_Type == Subject_Info_Type.Standard) || (thisSubject.Class_Type == Subject_Info_Type.TitleInfo) || (thisSubject.Class_Type == Subject_Info_Type.Name));
                }
                else
                {
                    foreach (Subject_Info thisSubject in Bib.Bib_Info.Subjects)
                    {
                        switch (thisSubject.Class_Type)
                        {
                        case Subject_Info_Type.TitleInfo:
                            subjectCount++;
                            break;

                        case Subject_Info_Type.Name:
                            subjectCount++;
                            break;

                        case Subject_Info_Type.Standard:
                            Subject_Info_Standard standSubject = (Subject_Info_Standard)thisSubject;
                            if ((standSubject.Topics_Count > 0) || (standSubject.Occupations_Count > 0) || (standSubject.Genres_Count > 0))
                            {
                                subjectCount++;
                            }
                            break;
                        }
                    }
                }
                return(subjectCount);

            case Element_Type.TargetAudience:
                return(Bib.Bib_Info.Target_Audiences.Any(thisTarget => thisTarget.Authority != "marctarget") ? 1 : 0);

            case Element_Type.Temporal:
                return(Bib.Bib_Info.TemporalSubjects_Count);

            case Element_Type.Title:
                return(1);

            case Element_Type.Title_Other:
                int title_count = 0;
                if (Bib.Bib_Info.Main_Title.Subtitle.Length > 0)
                {
                    title_count++;
                }

                if ((Bib.Bib_Info.hasSeriesTitle) && (Bib.Bib_Info.SeriesTitle.Title.Length > 0))
                {
                    title_count++;
                }

                if (Bib.Bib_Info.Other_Titles_Count > 0)
                {
                    title_count += Bib.Bib_Info.Other_Titles.Count(thisTitle => thisTitle.Title.Length > 0);
                }
                return(title_count);

            case Element_Type.Type:
                return(1);

            case Element_Type.VID:
                return(1);

            case Element_Type.Viewer:
                return(Bib.Behaviors.Views_Count);

            case Element_Type.VRA_CulturalContext:
                VRACore_Info vraInfo = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo != null ? vraInfo.Cultural_Context_Count : 0);

            case Element_Type.VRA_Inscription:
                VRACore_Info vraInfo2 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo2 != null ? vraInfo2.Inscription_Count : 0);

            case Element_Type.VRA_Material:
                VRACore_Info vraInfo3 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo3 != null ? vraInfo3.Material_Count : 0);

            case Element_Type.VRA_Measurement:
                VRACore_Info vraInfo4 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo4 != null ? vraInfo4.Measurement_Count : 0);

            case Element_Type.VRA_StateEdition:
                VRACore_Info vraInfo5 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo5 != null ? vraInfo5.State_Edition_Count : 0);

            case Element_Type.VRA_StylePeriod:
                VRACore_Info vraInfo6 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo6 != null ? vraInfo6.Style_Period_Count : 0);

            case Element_Type.VRA_Technique:
                VRACore_Info vraInfo7 = Bib.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;
                return(vraInfo7 != null ? vraInfo7.Technique_Count : 0);

            case Element_Type.Web_Skin:
                return(Bib.Behaviors.Web_Skin_Count > 0 ? 1 : 0);

            case Element_Type.ZT_Class:
                Zoological_Taxonomy_Info darwinCoreInfo = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo != null && darwinCoreInfo.Class.Length > 0  ? 1 : 0);

            case Element_Type.ZT_CommonName:
                Zoological_Taxonomy_Info darwinCoreInfo2 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo2 != null && darwinCoreInfo2.Common_Name.Length > 0  ? 1 : 0);

            case Element_Type.ZT_Family:
                Zoological_Taxonomy_Info darwinCoreInfo3 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo3 != null && darwinCoreInfo3.Family.Length > 0  ? 1 : 0);

            case Element_Type.ZT_Genus:
                Zoological_Taxonomy_Info darwinCoreInfo4 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo4 != null && darwinCoreInfo4.Genus.Length > 0  ? 1 : 0);

            case Element_Type.ZT_HigherClassification:
                Zoological_Taxonomy_Info darwinCoreInfo5 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo5 != null && darwinCoreInfo5.Higher_Classification.Length > 0  ? 1 : 0);

            case Element_Type.ZT_Kingdom:
                Zoological_Taxonomy_Info darwinCoreInfo6 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo6 != null && darwinCoreInfo6.Kingdom.Length > 0  ? 1 : 0);

            case Element_Type.ZT_Order:
                Zoological_Taxonomy_Info darwinCoreInfo7 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo7 != null && darwinCoreInfo7.Order.Length > 0  ? 1 : 0);

            case Element_Type.ZT_Phylum:
                Zoological_Taxonomy_Info darwinCoreInfo8 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo8 != null && darwinCoreInfo8.Phylum.Length > 0  ? 1 : 0);

            case Element_Type.ZT_ScientificName:
                Zoological_Taxonomy_Info darwinCoreInfo9 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo9 != null && darwinCoreInfo9.Scientific_Name.Length > 0  ? 1 : 0);

            case Element_Type.ZT_SpecificEpithet:
                Zoological_Taxonomy_Info darwinCoreInfo10 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo10 != null && darwinCoreInfo10.Specific_Epithet.Length > 0  ? 1 : 0);

            case Element_Type.ZT_TaxonRank:
                Zoological_Taxonomy_Info darwinCoreInfo11 = Bib.Get_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY) as Zoological_Taxonomy_Info;
                return(darwinCoreInfo11 != null && darwinCoreInfo11.Taxonomic_Rank.Length > 0  ? 1 : 0);

            default:
                return(0);
            }
        }
        /// <summary> Reads the dmdSec at the current position in the XmlTextReader and associates it with the
        /// entire package  </summary>
        /// <param name="Input_XmlReader"> Open XmlReader from which to read the metadata </param>
        /// <param name="Return_Package"> Package into which to read the metadata</param>
        /// <param name="Options"> Dictionary of any options which this METS section reader may utilize</param>
        /// <returns> TRUE if successful, otherwise FALSE</returns>
        public bool Read_dmdSec(XmlReader Input_XmlReader, SobekCM_Item Return_Package, Dictionary <string, object> Options)
        {
            // Ensure this metadata module extension exists
            VRACore_Info vraInfo = Return_Package.Get_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY) as VRACore_Info;

            if (vraInfo == null)
            {
                vraInfo = new VRACore_Info();
                Return_Package.Add_Metadata_Module(GlobalVar.VRACORE_METADATA_MODULE_KEY, vraInfo);
            }

            // Loop through reading each XML node
            do
            {
                // If this is the end of this section, return
                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && ((Input_XmlReader.Name == "METS:mdWrap") || (Input_XmlReader.Name == "mdWrap")))
                {
                    return(true);
                }

                // get the right division information based on node type
                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                {
                    string name = Input_XmlReader.Name.ToLower();
                    if (name.IndexOf("vra:") == 0)
                    {
                        name = name.Substring(4);
                    }

                    switch (name)
                    {
                    case "culturalcontext":
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Cultural_Context(Input_XmlReader.Value);
                            }
                        }
                        break;

                    case "inscription":
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Inscription(Input_XmlReader.Value);
                            }
                        }
                        break;

                    case "material":
                        string type = String.Empty;
                        if (Input_XmlReader.HasAttributes)
                        {
                            if (Input_XmlReader.MoveToAttribute("type"))
                            {
                                type = Input_XmlReader.Value;
                            }
                        }
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Material(Input_XmlReader.Value, type);
                            }
                        }
                        break;

                    case "measurements":
                        string units = String.Empty;
                        if (Input_XmlReader.HasAttributes)
                        {
                            if (Input_XmlReader.MoveToAttribute("unit"))
                            {
                                units = Input_XmlReader.Value;
                            }
                        }
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Measurement(Input_XmlReader.Value, units);
                            }
                        }
                        break;

                    case "stateedition":
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_State_Edition(Input_XmlReader.Value);
                            }
                        }
                        break;

                    case "styleperiod":
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Style_Period(Input_XmlReader.Value);
                            }
                        }
                        break;

                    case "technique":
                        Input_XmlReader.Read();
                        if (Input_XmlReader.NodeType == XmlNodeType.Text)
                        {
                            if (Input_XmlReader.Value.Length > 0)
                            {
                                vraInfo.Add_Technique(Input_XmlReader.Value);
                            }
                        }
                        break;
                    }
                }
            } while (Input_XmlReader.Read());

            return(true);
        }
        /// <summary> Adds a bit of data to a bibliographic package using the mapping </summary>
        /// <param name="Package">Bibliographic package to receive the data</param>
        /// <param name="Data">Text of the data</param>
        /// <param name="Field">Mapped field</param>
        /// <returns> TRUE if the field was mapped, FALSE if there was data and no mapping was found </returns>
        public bool Add_Data(SobekCM_Item Package, string Data, string Field)
        {
            // If no field listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrEmpty(Field))
            {
                return(true);
            }

            // If no data listed, just skip (but not a mapping error, so return TRUE)
            if (String.IsNullOrWhiteSpace(Data))
            {
                return(true);
            }

            // Trim the data
            Data = Data.Trim();

            // Normalize the field name
            string correctName = Field.ToUpper().Replace("#", "").Replace(" ", "").Replace(".", "").Replace(":", "").Replace("\\", "").Replace("/", "").Replace(")", "").Replace("(", "").Trim();

            if (correctName.Length == 0)
            {
                correctName = "None";
            }
            else
            {
                // Find the first number
                int charIndex = 0;
                while ((charIndex < correctName.Length) && (!Char.IsNumber(correctName[charIndex])))
                {
                    charIndex++;
                }

                // If the index stopped before the end (that is, it found a number),
                // trim the number of the column name
                if ((charIndex < correctName.Length) && (charIndex > 0))
                {
                    correctName = correctName.Substring(0, charIndex);
                }

                // If it was all numbers, just assign NONE
                if (charIndex == 0)
                {
                    correctName = "None";
                }
            }

            // Everything depends on the field which is mapped
            switch (correctName)
            {
            case "NONE":
                // Do nothing, since no mapping exists
                return(true);

            case "ABSTRACT":
            case "SUMMARY":
                Package.Bib_Info.Add_Abstract(Data, "en");
                return(true);

            case "ACCESSION":
            case "ACCESSIONNUMBER":
                Package.Bib_Info.Add_Identifier(Data, "Accession Number");
                return(true);

            case "ALTERNATETITLE":
            case "ALTTITLE":
            case "TITLEVARIANT":
                Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Alternative);
                return(true);

            case "ALTERNATETITLELANGUAGE":
            case "ALTTITLELANGUAGE":
                List <Title_Info> otherTitles = Package.Bib_Info.Other_Titles.Where(ThisTitle => ThisTitle.Title_Type == Title_Type_Enum.Alternative).ToList();
                if (otherTitles.Count > 0)
                {
                    otherTitles[otherTitles.Count - 1].Language = Data;
                }
                return(true);

            case "TITLETRANSLATION":
            case "TRANSLATEDTITLE":
                Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Translated);
                return(true);

            case "ATTRIBUTION":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Funding);
                return(true);

            case "COLLECTION":
            case "COLLECTIONCODE":
            case "AGGREGATION":
            case "AGGREGATIONCODE":
            case "SUBCOLLECTION":
            case "SUBCOLLECTIONS":
                Package.Behaviors.Add_Aggregation(Data.ToUpper());
                return(true);

            case "CLASSIFICATION":
                Package.Bib_Info.Add_Classification(Data);
                return(true);

            case "CLASSIFICATIONTYPE":
            case "CLASSIFICATIONAUTHORITY":
                if (Package.Bib_Info.Classifications_Count > 0)
                {
                    Package.Bib_Info.Classifications[Package.Bib_Info.Classifications_Count - 1].Authority = Data;
                }
                return(true);

            case "CONTRIBUTOR":
            case "CONTRIBUTORS":
                Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "contributor"));
                return(true);

            case "CREATOR":
            case "CREATORS":
            case "AUTHOR":
                // Ensure it doesn't already exist
                if (Package.Bib_Info.Names_Count > 0)
                {
                    foreach (Name_Info thisName in Package.Bib_Info.Names)
                    {
                        if (String.Compare(thisName.Full_Name, Data, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            return(true);
                        }
                    }
                }
                Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "creator"));
                return(true);

            case "CREATORPERSONALNAME":

                // Ensure it doesn't already exist
                if (Package.Bib_Info.Names_Count > 0)
                {
                    foreach (Name_Info thisName in Package.Bib_Info.Names)
                    {
                        if (String.Compare(thisName.Full_Name, Data, StringComparison.OrdinalIgnoreCase) == 0)
                        {
                            return(true);
                        }
                    }
                }

                Name_Info personalCreator = new Name_Info(Data, "creator");
                personalCreator.Name_Type = Name_Info_Type_Enum.Personal;
                Package.Bib_Info.Add_Named_Entity(personalCreator);
                return(true);

            case "CREATORCORPORATENAME":
                Name_Info corporateCreator = new Name_Info(Data, "creator");
                corporateCreator.Name_Type = Name_Info_Type_Enum.Corporate;
                Package.Bib_Info.Add_Named_Entity(corporateCreator);
                return(true);

            case "CREATORLANGUAGE":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Description = Data;
                }
                return(true);

            case "CREATORAFFILIATION":
            case "AUTHORAFFILIATION":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Affiliation = Data;
                }
                return(true);

            case "CREATORDATES":
            case "AUTHORDATES":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Dates = Data;
                }
                return(true);

            case "CREATORFAMILYNAME":
            case "AUTHORFAMILYNAME":
            case "FAMILYNAME":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                    if (lastNamedEntity.Family_Name.Length == 0)
                    {
                        lastNamedEntity.Family_Name = Data;
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info {
                            Family_Name = Data
                        };
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                }
                else
                {
                    Name_Info newNameEntity = new Name_Info {
                        Family_Name = Data
                    };
                    Package.Bib_Info.Add_Named_Entity(newNameEntity);
                }
                return(true);

            case "CREATORGIVENNAME":
            case "AUTHORGIVENNAME":
            case "GIVENNAME":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Name_Info lastNamedEntity = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                    if (lastNamedEntity.Given_Name.Length == 0)
                    {
                        lastNamedEntity.Given_Name = Data;
                    }
                    else
                    {
                        Name_Info newNameEntity = new Name_Info {
                            Given_Name = Data
                        };
                        Package.Bib_Info.Add_Named_Entity(newNameEntity);
                    }
                }
                else
                {
                    Name_Info newNameEntity = new Name_Info {
                        Given_Name = Data
                    };
                    Package.Bib_Info.Add_Named_Entity(newNameEntity);
                }
                return(true);

            case "CREATORROLE":
            case "AUTHORROLE":
            case "CREATORROLES":
            case "AUTHORROLES":
            case "CREATORATTRIBUTION":
                if (Package.Bib_Info.Names_Count > 0)
                {
                    Name_Info thisCreator = Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1];
                    if ((thisCreator.Roles.Count == 1) && ((thisCreator.Roles[0].Role == "creator") || (thisCreator.Roles[1].Role == "contributor")))
                    {
                        thisCreator.Roles.Clear();
                    }
                    Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Add_Role(Data);
                }
                return(true);

            case "CULTURALCONTEXT":
            case "CULTURE":
                VRACore_Info vraCoreInfo = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo == null)
                {
                    vraCoreInfo = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo);
                }
                vraCoreInfo.Add_Cultural_Context(Data);
                return(true);

            case "DONOR":
                Package.Bib_Info.Donor.Full_Name = Data;
                return(true);

            case "GENRE":
                Package.Bib_Info.Add_Genre(Data);
                return(true);

            case "GENREAUTHORITY":
                if (Package.Bib_Info.Genres_Count > 0)
                {
                    Package.Bib_Info.Genres[Package.Bib_Info.Genres_Count - 1].Authority = Data;
                }
                return(true);

            case "HOLDINGLOCATIONCODE":
            case "HOLDINGCODE":
                Package.Bib_Info.Location.Holding_Code = Data;
                return(true);

            case "HOLDINGLOCATIONSTATEMENT":
            case "HOLDINGSTATEMENT":
            case "CONTRIBUTINGINSTITUTION":
            case "LOCATIONCURRENT":
            case "LOCATIONCURRENTSITE":
            case "LOCATIONCURRENTREPOSITORY":
                Package.Bib_Info.Location.Holding_Name = Data;
                return(true);

            case "LOCATIONFORMERSITE":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.OriginalLocation);
                return(true);

            case "IDENTIFIER":
            case "IDNUMBERFORMERREPOSITORY":
            case "IDNUMBERCURRENTREPOSITORY":
            case "IDNUMBERCURRENTRESPOSITORY":
                Package.Bib_Info.Add_Identifier(Data);
                return(true);

            case "IDENTIFIERTYPE":
                if (Package.Bib_Info.Identifiers_Count > 0)
                {
                    Package.Bib_Info.Identifiers[Package.Bib_Info.Identifiers_Count - 1].Type = Data;
                }
                return(true);

            case "INSCRIPTION":
                VRACore_Info vraCoreInfo8 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo8 == null)
                {
                    vraCoreInfo8 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo8);
                }
                vraCoreInfo8.Add_Inscription(Data);
                return(true);

            case "LANGUAGE":
                Package.Bib_Info.Add_Language(Data);
                return(true);

            case "PUBLISHER":
            case "PUBLISHERS":
                Package.Bib_Info.Add_Publisher(Data);
                return(true);

            case "PLACEOFPUBLICATION":
            case "PUBLICATIONPLACE":
            case "PUBPLACE":
            case "PUBLICATIONLOCATION":
            case "PLACE":
                Package.Bib_Info.Origin_Info.Add_Place(Data);
                return(true);

            case "RELATEDURLLABEL":
                Package.Bib_Info.Location.Other_URL_Display_Label = Data;
                return(true);

            case "RELATEDURL":
            case "RELATEDURLLINK":
                Package.Bib_Info.Location.Other_URL = Data;
                return(true);

            case "RELATEDURLNOTE":
            case "RELATEDURLNOTES":
                Package.Bib_Info.Location.Other_URL_Note = Data;
                return(true);

            case "SOURCEINSTITUTIONCODE":
            case "SOURCECODE":
                Package.Bib_Info.Source.Code = Data;
                return(true);

            case "SOURCEINSTITUTIONSTATEMENT":
            case "SOURCESTATEMENT":
            case "SOURCE":
                Package.Bib_Info.Source.Statement = Data;
                return(true);

            case "SUBJECTKEYWORD":
            case "SUBJECTKEYWORDS":
            case "SUBJECT":
            case "SUBJECTS":
            case "KEYWORDS":
                Package.Bib_Info.Add_Subject(Data, String.Empty);
                return(true);

            case "SUBJECTKEYWORDAUTHORITY":
            case "SUBJECTAUTHORITY":
                if (Package.Bib_Info.Subjects_Count > 0)
                {
                    Package.Bib_Info.Subjects[Package.Bib_Info.Subjects_Count - 1].Authority = Data;
                }
                return(true);

            case "BIBID":
            case "BIB":
            case "BIBLIOGRAHPICID":
            case "BIBLIOGRAPHICIDENTIFIER":
                Package.Bib_Info.BibID = Data.ToUpper();
                return(true);

            case "VID":
                Package.Bib_Info.VID = Data.PadLeft(5, '0');
                return(true);

            case "DATE":
            case "DATECREATION":
                try
                {
                    // first, try converting the string value to a date object
                    Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToDateTime(Data).ToShortDateString();
                }
                catch
                {
                    try
                    {
                        // second, try converting the string value to an integer
                        Package.Bib_Info.Origin_Info.Date_Issued = Convert.ToInt32(Data).ToString();
                    }
                    catch
                    {
                        Package.Bib_Info.Origin_Info.Date_Issued = Data;
                    }
                }
                return(true);

            case "DATEBEGINNING":
                Package.Bib_Info.Origin_Info.MARC_DateIssued_Start = Data;
                return(true);

            case "DATECOMPLETION":
                Package.Bib_Info.Origin_Info.MARC_DateIssued_End = Data;
                return(true);

            case "EDITION":
                Package.Bib_Info.Origin_Info.Edition = Data;
                return(true);

            case "FORMAT":
            case "PHYSICALDESCRIPTION":
            case "EXTENT":
                Package.Bib_Info.Original_Description.Extent = Data;
                return(true);

            case "NOTE":
            case "NOTES":
            case "DESCRIPTION":
                Package.Bib_Info.Add_Note(Data);
                return(true);

            case "PROVENANCE":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.Acquisition);
                return(true);

            case "USAGESTATEMENT":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.CitationReference);
                return(true);

            case "CONTACT":
            case "CONTACTNOTES":
            case "CONTACTINFORMATION":
                Package.Bib_Info.Add_Note(Data, Note_Type_Enum.NONE, "Contact");
                return(true);

            case "RIGHTS":
                Package.Bib_Info.Access_Condition.Text = Data;
                return(true);

            case "BIBSERIESTITLE":
            case "SERIESTITLE":
            case "TITLESERIES":
                Package.Bib_Info.SeriesTitle.Title = Data;
                Package.Behaviors.GroupTitle       = Data;
                return(true);

            case "MATERIALTYPE":
            case "TYPE":
            case "RECORDTYPE":
                string upper_data = Data.ToUpper();
                if (upper_data.IndexOf("NEWSPAPER", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper;
                    return(true);
                }
                if ((upper_data.IndexOf("MONOGRAPH", StringComparison.Ordinal) >= 0) || (upper_data.IndexOf("BOOK", StringComparison.Ordinal) >= 0))
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                    return(true);
                }
                if (upper_data.IndexOf("SERIAL", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Serial;
                    return(true);
                }
                if (upper_data.IndexOf("AERIAL", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Aerial;
                    if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                    {
                        Package.Bib_Info.Original_Description.Extent = "Aerial Photograph";
                    }
                    return(true);
                }
                if (upper_data.IndexOf("PHOTO", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                    return(true);
                }
                if (upper_data.IndexOf("POSTCARD", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                    if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                    {
                        Package.Bib_Info.Original_Description.Extent = "Postcard";
                    }
                    return(true);
                }
                if (upper_data.IndexOf("MAP", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Map;
                    return(true);
                }
                if (upper_data.IndexOf("TEXT", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book;
                    return(true);
                }
                if (upper_data.IndexOf("AUDIO", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Audio;
                    return(true);
                }
                if (upper_data.IndexOf("VIDEO", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Video;
                    return(true);
                }
                if ((upper_data.IndexOf("ARCHIVE", StringComparison.Ordinal) >= 0) || (upper_data.IndexOf("ARCHIVAL", StringComparison.Ordinal) >= 0))
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival;
                    return(true);
                }
                if (upper_data.IndexOf("ARTIFACT", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Artifact;
                    return(true);
                }
                if (upper_data.IndexOf("IMAGE", StringComparison.Ordinal) >= 0)
                {
                    Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph;
                    return(true);
                }

                // if there was no match, set type to "UNDETERMINED"
                Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.UNKNOWN;

                if (Package.Bib_Info.Original_Description.Extent.Length == 0)
                {
                    Package.Bib_Info.Original_Description.Extent = "Undetermined";
                }
                return(true);

            case "BIBUNIFORMTITLE":
            case "UNIFORMTITLE":
                Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Uniform);
                Package.Behaviors.GroupTitle = Data;
                return(true);

            case "VOLUMETITLE":
            case "TITLE":
                if (String.IsNullOrEmpty(Package.Bib_Info.Main_Title.Title))
                {
                    Package.Bib_Info.Main_Title.Title = Data;
                }
                else
                {
                    Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.Alternative);
                }
                return(true);

            case "TITLELANGUAGE":
                Package.Bib_Info.Main_Title.Language = Data;
                return(true);

            case "ALEPH":
                Package.Bib_Info.Add_Identifier(Data, "ALEPH");
                return(true);

            case "OCLC":
                Package.Bib_Info.Add_Identifier(Data, "OCLC");
                return(true);

            case "LCCN":
                Package.Bib_Info.Add_Identifier(Data, "LCCN");
                return(true);

            case "ISBN":
                Package.Bib_Info.Add_Identifier(Data, "ISBN");
                return(true);

            case "ISSN":
                Package.Bib_Info.Add_Identifier(Data, "ISSN");
                return(true);

            case "SUBTITLE":
                Package.Bib_Info.Main_Title.Subtitle = Data;
                return(true);

            case "VOLUME":
                Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                return(true);

            case "ISSUE":
                if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                {
                    Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                }
                else
                {
                    Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                }
                Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                return(true);

            case "SECTION":
                if (Package.Bib_Info.Series_Part_Info.Enum2.Length == 0)
                {
                    if (Package.Bib_Info.Series_Part_Info.Enum1.Length == 0)
                    {
                        Package.Bib_Info.Series_Part_Info.Enum1 = Data;
                    }
                    else
                    {
                        Package.Bib_Info.Series_Part_Info.Enum2 = Data;
                    }
                }
                else
                {
                    Package.Bib_Info.Series_Part_Info.Enum3 = Data;
                }
                Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data);
                // Do nothing for now
                return(true);

            case "YEAR":
                Package.Bib_Info.Series_Part_Info.Year = Data;

                if (Data.Length == 1)
                {
                    year = "0" + Data;
                }
                else
                {
                    year = Data;
                }
                build_date_string(Package);

                return(true);

            case "MONTH":
                Package.Bib_Info.Series_Part_Info.Month = Data;
                month = Data;
                build_date_string(Package);

                return(true);

            case "DAY":
                Package.Bib_Info.Series_Part_Info.Day = Data;
                day = Data;
                build_date_string(Package);

                return(true);

            case "COORDINATES":
                GeoSpatial_Information geoInfo = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                if (geoInfo == null)
                {
                    geoInfo = new GeoSpatial_Information();
                    Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo);
                }
                string[] coordinates = Data.Split(", ;".ToCharArray());
                try
                {
                    if (coordinates.Length == 2)
                    {
                        geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                    }
                    else
                    {
                        coordinates = Data.Split(",;".ToCharArray());
                        if (coordinates.Length == 2)
                        {
                            geoInfo.Add_Point(Convert.ToDouble(coordinates[0]), Convert.ToDouble(coordinates[1]), String.Empty);
                        }
                    }
                }
                catch
                {
                }
                return(true);

            case "LATITUDE":
            case "COORDINATESLATITUDE":
                GeoSpatial_Information geoInfo2 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                if (geoInfo2 == null)
                {
                    geoInfo2 = new GeoSpatial_Information();
                    Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo2);
                }
                try
                {
                    if (geoInfo2.Point_Count == 0)
                    {
                        geoInfo2.Add_Point(Convert.ToDouble(Data), 0, String.Empty);
                    }
                    else
                    {
                        geoInfo2.Points[0].Latitude = Convert.ToDouble(Data);
                    }
                }
                catch
                {
                }
                return(true);

            case "LONGITUDE":
            case "COORDINATESLONGITUDE":
                GeoSpatial_Information geoInfo3 = Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information;
                if (geoInfo3 == null)
                {
                    geoInfo3 = new GeoSpatial_Information();
                    Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo3);
                }
                try
                {
                    if (geoInfo3.Point_Count == 0)
                    {
                        geoInfo3.Add_Point(0, Convert.ToDouble(Data.Replace("°", "")), String.Empty);
                    }
                    else
                    {
                        geoInfo3.Points[0].Longitude = Convert.ToDouble(Data.Replace("°", ""));
                    }
                }
                catch
                {
                }
                return(true);

            case "PROJECTION":
            case "MAPPROJECTION":
                Guarantee_Cartographics(Package).Projection = Data;
                return(true);

            case "SCALE":
            case "MAPSCALE":
                Guarantee_Cartographics(Package).Scale = Data;
                return(true);

            //case Mapped_Fields.Spatial_Coverage:
            //    Package.Bib_Info.Hierarchical_Spatials[0].Area = Data;
            //    return true;

            case "ICON/WORDMARK":
            case "ICON/WORDMARKS":
            case "ICON":
            case "ICONS":
            case "WORDMARK":
            case "WORDMARKS":
                Package.Behaviors.Add_Wordmark(Data);
                return(true);

            case "WEBSKINS":
            case "WEBSKIN":
            case "SKINS":
            case "SKIN":
                Package.Behaviors.Add_Web_Skin(Data);
                return(true);

            case "TEMPORALCOVERAGE":
            case "TEMPORAL":
            case "TIMEPERIOD":
                Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                return(true);

            case "COVERAGE":
                // Was this a number.. likely, a year?
                int possible_year;
                if ((Data.Length >= 4) && (Int32.TryParse(Data.Substring(0, 4), out possible_year)))
                {
                    Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data);
                }
                else
                {
                    Package.Bib_Info.Add_Spatial_Subject(Data);
                }
                return(true);

            case "AFFILIATIONUNIVERSITY":
            case "UNIVERSITY":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].University = Data;
                return(true);

            case "AFFILIATIONCAMPUS":
            case "CAMPUS":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Campus = Data;
                return(true);

            case "AFFILIATIONCOLLEGE":
            case "COLLEGE":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].College = Data;
                return(true);

            case "AFFILIATIONUNIT":
            case "UNIT":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Unit = Data;
                return(true);

            case "AFFILIATIONDEPARTMENT":
            case "DEPARTMENT":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Department = Data;
                return(true);

            case "AFFILIATIONINSTITUTE":
            case "INSTITUTE":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Institute = Data;
                return(true);

            case "AFFILIATIONCENTER":
            case "CENTER":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Center = Data;
                return(true);

            case "AFFILIATIONSECTION":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].Section = Data;
                return(true);

            case "AFFILIATIONSUBSECTION":
                Guarantee_Affiliation_Collection(Package);
                Package.Bib_Info.Affiliations[0].SubSection = Data;
                return(true);

            case "GEOGRAPHYCONTINENT":
            case "CONTINENT":
                Guarantee_Hierarchical_Spatial(Package).Continent = Data;
                return(true);

            case "GEOGRAPHYCOUNTRY":
            case "COUNTRY":
                Guarantee_Hierarchical_Spatial(Package).Country = Data;
                return(true);

            case "GEOGRAPHYPROVINCE":
            case "PROVINCE":
                Guarantee_Hierarchical_Spatial(Package).Province = Data;
                return(true);

            case "GEOGRAPHYREGION":
            case "REGION":
                Guarantee_Hierarchical_Spatial(Package).Region = Data;
                return(true);

            case "GEOGRAPHYSTATE":
            case "STATE":
                Guarantee_Hierarchical_Spatial(Package).State = Data;
                return(true);

            case "GEOGRAPHYTERRITORY":
            case "TERRITORY":
                Guarantee_Hierarchical_Spatial(Package).Territory = Data;
                return(true);

            case "GEOGRAPHYCOUNTY":
            case "COUNTY":
                Guarantee_Hierarchical_Spatial(Package).County = Data;
                return(true);

            case "GEOGRAPHYCITY":
            case "CITY":
                Guarantee_Hierarchical_Spatial(Package).City = Data;
                return(true);

            case "GEOGRAPHYISLAND":
            case "ISLAND":
                Guarantee_Hierarchical_Spatial(Package).Island = Data;
                return(true);

            case "GEOGRAPHYAREA":
            case "AREA":
                Guarantee_Hierarchical_Spatial(Package).Area = Data;
                return(true);

            case "LOCATION":
                Package.Bib_Info.Add_Spatial_Subject(Data);
                return(true);

            case "COPYRIGHTDATE":
            case "COPYRIGHT":
                Package.Bib_Info.Origin_Info.Date_Copyrighted = Data;
                return(true);

            case "EADNAME":
            case "EAD":
                Package.Bib_Info.Location.EAD_Name = Data;
                return(true);

            case "EADURL":
                Package.Bib_Info.Location.EAD_URL = Data;
                return(true);

            case "COMMENTS":
            case "INTERNALCOMMENTS":
            case "INTERNAL":
                Package.Tracking.Internal_Comments = Data;
                return(true);

            case "CONTAINERBOX":
            case "BOX":
                Package.Bib_Info.Add_Container("Box", Data, 1);
                return(true);

            case "CONTAINERDIVIDER":
            case "DIVIDER":
                Package.Bib_Info.Add_Container("Divider", Data, 2);
                return(true);

            case "CONTAINERFOLDER":
            case "FOLDER":
                Package.Bib_Info.Add_Container("Folder", Data, 3);
                return(true);

            case "VIEWERS":
            case "VIEWER":
                Package.Behaviors.Add_View(Data);
                return(true);

            case "VISIBILITY":
                switch (Data.ToUpper())
                {
                case "DARK":
                    Package.Behaviors.Dark_Flag = true;
                    Package.Behaviors.IP_Restriction_Membership = -1;
                    return(true);

                case "PRIVATE":
                    Package.Behaviors.Dark_Flag = false;
                    Package.Behaviors.IP_Restriction_Membership = -1;
                    return(true);

                case "PUBLIC":
                    Package.Behaviors.Dark_Flag = false;
                    Package.Behaviors.IP_Restriction_Membership = 0;
                    return(true);

                case "RESTRICTED":
                    Package.Behaviors.Dark_Flag = false;
                    Package.Behaviors.IP_Restriction_Membership = 1;
                    return(true);
                }
                return(true);

            case "TICKLER":
                Package.Behaviors.Add_Tickler(Data);
                return(true);

            case "TRACKINGBOX":
                Package.Tracking.Tracking_Box = Data;
                return(true);

            case "BORNDIGITAL":
                if (Data.ToUpper().Trim() == "TRUE")
                {
                    Package.Tracking.Born_Digital = true;
                }
                return(true);

            case "MATERIALRECEIVED":
            case "MATERIALRECEIVEDDATE":
            case "MATERIALRECDDATE":
            case "MATERIALRECD":
                DateTime materialReceivedDate;
                if (DateTime.TryParse(Data, out materialReceivedDate))
                {
                    Package.Tracking.Material_Received_Date = materialReceivedDate;
                }
                return(true);

            case "MATERIAL":
            case "MATERIALS":
            case "MATERIALMEDIUM":
                VRACore_Info vraCoreInfo2 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo2 == null)
                {
                    vraCoreInfo2 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo2);
                }
                vraCoreInfo2.Add_Material(Data, "medium");
                return(true);

            case "MATERIALSUPPORT":
                VRACore_Info vraCoreInfo2b = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo2b == null)
                {
                    vraCoreInfo2b = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo2b);
                }
                vraCoreInfo2b.Add_Material(Data, "support");
                return(true);

            case "MEASUREMENT":
            case "MEASUREMENTS":
            case "MEASUREMENTDIMENSIONS":
            case "MEASUREMENTSDIMENSIONS":
            case "DIMENSIONS":
                VRACore_Info vraCoreInfo3 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo3 == null)
                {
                    vraCoreInfo3 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo3);
                }
                if (vraCoreInfo3.Measurement_Count == 0)
                {
                    vraCoreInfo3.Add_Measurement(Data, String.Empty);
                }
                else
                {
                    vraCoreInfo3.Measurements[0].Measurements = Data;
                }
                return(true);

            case "MEASUREMENTFORMAT":
            case "MEASUREMENTUNITS":
            case "MEASUREMENTSFORMAT":
            case "MEASUREMENTSUNITS":
                VRACore_Info vraCoreInfo3b = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo3b == null)
                {
                    vraCoreInfo3b = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo3b);
                }
                if (vraCoreInfo3b.Measurement_Count == 0)
                {
                    vraCoreInfo3b.Add_Measurement(String.Empty, Data);
                }
                else
                {
                    vraCoreInfo3b.Measurements[0].Units = Data;
                }
                return(true);



            case "STATEEDITION":
                VRACore_Info vraCoreInfo4 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo4 == null)
                {
                    vraCoreInfo4 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo4);
                }
                vraCoreInfo4.Add_State_Edition(Data);
                return(true);

            case "STYLE":
            case "PERIOD":
            case "STYLEPERIOD":
                VRACore_Info vraCoreInfo5 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo5 == null)
                {
                    vraCoreInfo5 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo5);
                }
                vraCoreInfo5.Add_Style_Period(Data);
                return(true);

            case "TECHNIQUE":
                VRACore_Info vraCoreInfo6 = Package.Get_Metadata_Module("VRACore") as VRACore_Info;
                if (vraCoreInfo6 == null)
                {
                    vraCoreInfo6 = new VRACore_Info();
                    Package.Add_Metadata_Module("VRACore", vraCoreInfo6);
                }
                vraCoreInfo6.Add_Technique(Data);
                return(true);

            case "TARGETAUDIENCE":
            case "AUDIENCE":
                Package.Bib_Info.Add_Target_Audience(Data);
                return(true);

            default:
                // No mapping exists and this is a non-known no-mapping
                return(false);
            }
        }