/// <summary> Adds a new temporal subject to this object </summary> /// <param name="Start_Year">Start year for the year range</param> /// <param name="End_Year">End year for the year range</param> /// <param name="TimePeriod">Description of the time period (i.e. 'Post-WWII')</param> /// <returns> Temporal_Info object, either the one passed in or one that equals it already in the list </returns> public Temporal_Info Add_Temporal_Subject(int Start_Year, int End_Year, string TimePeriod) { if (temporalSubjects == null) temporalSubjects = new List<Temporal_Info>(); Temporal_Info newTemporal = new Temporal_Info(Start_Year, End_Year, TimePeriod); if (!temporalSubjects.Contains(newTemporal)) { temporalSubjects.Add(newTemporal); return newTemporal; } Temporal_Info returnTemporal = temporalSubjects.Find(newTemporal.Equals); if ((TimePeriod.Length > 0) && (returnTemporal.TimePeriod.Length == 0)) returnTemporal.TimePeriod = TimePeriod; return returnTemporal; }
/// <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) { // Get the related metadata modules here Performing_Arts_Info partInfo = Return_Package.Get_Metadata_Module("PerformingArts") as Performing_Arts_Info; Oral_Interview_Info oralInfo = Return_Package.Get_Metadata_Module("OralInterview") as Oral_Interview_Info; // Was a list for the deprecated download portion of the SobekCM section input? List<Download_Info_DEPRECATED> deprecatedDownloads = null; if (Options != null) { if (Options.ContainsKey("SobekCM_METS_dmdSec_ReaderWriter:Deprecated_Downloads")) { deprecatedDownloads = (List<Download_Info_DEPRECATED>) Options["SobekCM_METS_dmdSec_ReaderWriter:Deprecated_Downloads"]; } } while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && ((Input_XmlReader.Name == "METS:mdWrap") || (Input_XmlReader.Name == "mdWrap"))) return true; if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "embeddedVideo": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { string code = Input_XmlReader.Value; Return_Package.Behaviors.Embedded_Video = Input_XmlReader.Value; } break; case "Collection.Primary": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { string code = Input_XmlReader.Value; Return_Package.Behaviors.Add_Aggregation(code); } break; case "Collection.Alternate": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { string code = Input_XmlReader.Value; Return_Package.Behaviors.Add_Aggregation(code); } break; case "SubCollection": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Behaviors.Add_Aggregation(Input_XmlReader.Value); break; case "Aggregation": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Behaviors.Add_Aggregation(Input_XmlReader.Value); break; case "MainPage": if (Input_XmlReader.MoveToAttribute("pagename")) Return_Package.Behaviors.Main_Page.PageName = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("previous")) { try { Return_Package.Behaviors.Main_Page.Previous_Page_Exists = Convert.ToBoolean(Input_XmlReader.Value); } catch { } } if (Input_XmlReader.MoveToAttribute("next")) { try { Return_Package.Behaviors.Main_Page.Next_Page_Exists = Convert.ToBoolean(Input_XmlReader.Value); } catch { } } Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Behaviors.Main_Page.FileName = Input_XmlReader.Value; break; case "MainThumbnail": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Behaviors.Main_Thumbnail = Input_XmlReader.Value; break; case "EncodingLevel": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Bib_Info.EncodingLevel = Input_XmlReader.Value; break; case "Icon": case "Wordmark": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Behaviors.Add_Wordmark(Input_XmlReader.Value); break; case "Download": Download_Info_DEPRECATED newDownload = new Download_Info_DEPRECATED(); if (Input_XmlReader.MoveToAttribute("label")) newDownload.Label = Input_XmlReader.Value; while (Input_XmlReader.Read()) { if (Input_XmlReader.NodeType == XmlNodeType.Element) break; if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Download")) break; } switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "name": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { newDownload.FileName = Input_XmlReader.Value; if (deprecatedDownloads != null) deprecatedDownloads.Add(newDownload); } break; case "url": if (Input_XmlReader.MoveToAttribute("type")) newDownload.FormatCode = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("size")) { try { newDownload.Size_MB = (float) Convert.ToDouble(Input_XmlReader.Value); } catch { } } Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { newDownload.URL = Input_XmlReader.Value; if (deprecatedDownloads != null) deprecatedDownloads.Add(newDownload); } break; case "fptr": if (Input_XmlReader.MoveToAttribute("FILEID")) { newDownload.File_ID = Input_XmlReader.Value; if (deprecatedDownloads != null) deprecatedDownloads.Add(newDownload); } break; } break; case "URL": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Bib_Info.Location.PURL = Input_XmlReader.Value; break; case "GUID": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Web.GUID = Input_XmlReader.Value; break; case "NotifyEmail": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Behaviors.NotifyEmail = Input_XmlReader.Value; } break; case "Tickler": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Behaviors.Add_Tickler(Input_XmlReader.Value); } break; case "BibID": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Bib_Info.BibID = Input_XmlReader.Value; break; case "VID": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) Return_Package.Bib_Info.VID = Input_XmlReader.Value; break; case "Affiliation": Affiliation_Info newAffiliation = new Affiliation_Info(); if (Input_XmlReader.MoveToAttribute("nameid")) newAffiliation.Name_Reference = Input_XmlReader.Value; while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Affiliation")) { if (newAffiliation.hasData) { Return_Package.Bib_Info.Add_Affiliation(newAffiliation); break; } } if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "AffiliationTerm": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Term = Input_XmlReader.Value; break; case "University": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.University = Input_XmlReader.Value; break; case "Campus": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Campus = Input_XmlReader.Value; break; case "College": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.College = Input_XmlReader.Value; break; case "Unit": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Unit = Input_XmlReader.Value; break; case "Department": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Department = Input_XmlReader.Value; break; case "Institute": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Institute = Input_XmlReader.Value; break; case "Center": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Center = Input_XmlReader.Value; break; case "Section": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.Section = Input_XmlReader.Value; break; case "SubSection": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) newAffiliation.SubSection = Input_XmlReader.Value; break; } } } break; case "Coordinates": read_coordinates_info(Input_XmlReader, Return_Package); break; case "Holding": while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Holding")) break; if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":statement")) { if (Input_XmlReader.MoveToAttribute("code")) Return_Package.Bib_Info.Location.Holding_Code = Input_XmlReader.Value; Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Bib_Info.Location.Holding_Name = Input_XmlReader.Value; break; } } } break; case "Source": while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Source")) break; if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":statement")) { if (Input_XmlReader.MoveToAttribute("code")) Return_Package.Bib_Info.Source.Code = Input_XmlReader.Value; Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Bib_Info.Source.Statement = Input_XmlReader.Value; break; } } } break; case "Temporal": while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Temporal")) { break; } if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":period")) { Temporal_Info newTemporal = new Temporal_Info(); if (Input_XmlReader.MoveToAttribute("start")) { try { newTemporal.Start_Year = Convert.ToInt32(Input_XmlReader.Value); } catch { } } if (Input_XmlReader.MoveToAttribute("end")) { try { newTemporal.End_Year = Convert.ToInt32(Input_XmlReader.Value); } catch { } } Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { newTemporal.TimePeriod = Input_XmlReader.Value; Return_Package.Bib_Info.Add_Temporal_Subject(newTemporal); } } } break; case "Type": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Bib_Info.SobekCM_Type_String = Input_XmlReader.Value.Trim(); } break; case "SortDate": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { try { Return_Package.Bib_Info.SortDate = Convert.ToInt32(Input_XmlReader.Value); } catch { } } break; case "SortTitle": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Return_Package.Bib_Info.SortTitle = Input_XmlReader.Value; } break; case "Manufacturer": Publisher_Info thisManufacturer = null; string manufacturer_id = String.Empty; if (Input_XmlReader.MoveToAttribute("ID")) manufacturer_id = Input_XmlReader.Value; while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Manufacturer")) { if (thisManufacturer != null) { thisManufacturer.ID = manufacturer_id; } break; } if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "Name": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisManufacturer = Return_Package.Bib_Info.Add_Manufacturer(Input_XmlReader.Value); } break; case "PlaceTerm": if (thisManufacturer != null) { if ((Input_XmlReader.MoveToAttribute("type")) && (Input_XmlReader.Value == "code")) { if (Input_XmlReader.MoveToAttribute("authority")) { switch (Input_XmlReader.Value) { case "marccountry": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisManufacturer.Add_Place(String.Empty, Input_XmlReader.Value, String.Empty); } break; case "iso3166": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisManufacturer.Add_Place(String.Empty, String.Empty, Input_XmlReader.Value); } break; } } } else { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisManufacturer.Add_Place(Input_XmlReader.Value); } } } break; } } } break; case "Publisher": Publisher_Info thisPublisher = null; string publisher_id = String.Empty; if (Input_XmlReader.MoveToAttribute("ID")) publisher_id = Input_XmlReader.Value; while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Publisher")) { if (thisPublisher != null) { thisPublisher.ID = publisher_id; } break; } if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "Name": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisPublisher = Return_Package.Bib_Info.Add_Publisher(Input_XmlReader.Value); } break; case "PlaceTerm": if (thisPublisher != null) { if ((Input_XmlReader.MoveToAttribute("type")) && (Input_XmlReader.Value == "code")) { if (Input_XmlReader.MoveToAttribute("authority")) { switch (Input_XmlReader.Value) { case "marccountry": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisPublisher.Add_Place(String.Empty, Input_XmlReader.Value, String.Empty); } break; case "iso3166": Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisPublisher.Add_Place(String.Empty, String.Empty, Input_XmlReader.Value); } break; } } } else { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { thisPublisher.Add_Place(Input_XmlReader.Value); } } } break; } } } break; case "part:performingArts": if (partInfo == null) { partInfo = new Performing_Arts_Info(); Return_Package.Add_Metadata_Module("PerformingArts", partInfo); } while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == "part:performingArts")) break; if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name) { case "part:Performer": string occupation = String.Empty; string lifespan = String.Empty; string title = String.Empty; string sex = String.Empty; if (Input_XmlReader.MoveToAttribute("occupation")) occupation = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("lifespan")) lifespan = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("title")) title = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("sex")) sex = Input_XmlReader.Value; Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { Performer newPerformer = partInfo.Add_Performer(Input_XmlReader.Value); newPerformer.Occupation = occupation; newPerformer.Title = title; newPerformer.Sex = sex; newPerformer.LifeSpan = lifespan; } break; case "part:Performance": if (Input_XmlReader.MoveToAttribute("date")) partInfo.Performance_Date = Input_XmlReader.Value; Input_XmlReader.MoveToElement(); if (!Input_XmlReader.IsEmptyElement) { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { partInfo.Performance = Input_XmlReader.Value; } } break; } } } break; case "SerialHierarchy": int serial_level = -1; int serial_order = -1; string serial_display = String.Empty; if (Input_XmlReader.MoveToAttribute("level")) { try { serial_level = Convert.ToInt32(Input_XmlReader.Value); } catch { } } if (Input_XmlReader.MoveToAttribute("order")) { try { serial_order = Convert.ToInt32(Input_XmlReader.Value); } catch { } } Input_XmlReader.MoveToElement(); if (!Input_XmlReader.IsEmptyElement) { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) serial_display = Input_XmlReader.Value; } if ((serial_display.Length == 0) && (serial_order > 0)) serial_display = serial_order.ToString(); if ((serial_display.Length > 0) && (serial_order > 0)) Return_Package.Behaviors.Serial_Info.Add_Hierarchy(serial_level, serial_order, serial_display); break; case "Container": int container_level = -1; string container_type = String.Empty; string container_name = String.Empty; if (Input_XmlReader.MoveToAttribute("level")) { try { container_level = Convert.ToInt32(Input_XmlReader.Value); } catch { } } if (Input_XmlReader.MoveToAttribute("type")) { container_type = Input_XmlReader.Value; } Input_XmlReader.MoveToElement(); if (!Input_XmlReader.IsEmptyElement) { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { container_name = Input_XmlReader.Value; Return_Package.Bib_Info.Add_Container(container_type, container_name, container_level); } } break; case "oral:Interviewee": if (oralInfo == null) { oralInfo = new Oral_Interview_Info(); Return_Package.Add_Metadata_Module("OralInterview", oralInfo); } Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { oralInfo.Interviewee = Input_XmlReader.Value; } break; case "oral:Interviewer": if (oralInfo == null) { oralInfo = new Oral_Interview_Info(); Return_Package.Add_Metadata_Module("OralInterview", oralInfo); } Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) { oralInfo.Interviewer = Input_XmlReader.Value; } break; } } } // Return false since this read all the way to the end of the steam return false; }
/// <summary> Adds a new temporal subject to this object </summary> /// <param name="New_Temporal"> Temporral subject object to add to this item </param> /// <returns> Temporal_Info object, either the one passed in or one that equals it already in the list </returns> public Temporal_Info Add_Temporal_Subject(Temporal_Info New_Temporal) { if (temporalSubjects == null) temporalSubjects = new List<Temporal_Info>(); if (!temporalSubjects.Contains(New_Temporal)) { temporalSubjects.Add(New_Temporal); return New_Temporal; } Temporal_Info returnTemporal = temporalSubjects.Find(New_Temporal.Equals); if ((New_Temporal.TimePeriod.Length > 0) && (returnTemporal.TimePeriod.Length == 0)) returnTemporal.TimePeriod = New_Temporal.TimePeriod; return returnTemporal; }