/// <summary> Reads the dmdSec at the current position in the XmlTextReader and associates it with /// one subsection/division from the METS structure map </summary> /// <param name="Input_XmlReader"> Open XmlReader from which to read the metadata </param> /// <param name="MetsDivision"> Division from the overall package into which to read the metadata</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 Read_dmdSec(XmlReader Input_XmlReader, abstract_TreeNode MetsDivision, Dictionary<string, object> Options) { // Get the geo-spatial information if it exists or create a new one GeoSpatial_Information geoInfo = MetsDivision.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if (geoInfo == null) { geoInfo = new GeoSpatial_Information(); MetsDivision.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo); } return Read_Metadata_Section(Input_XmlReader, geoInfo, Options); }
/// <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 geo-spatial information if it exists or create a new one GeoSpatial_Information geoInfo = Return_Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if (geoInfo == null) { geoInfo = new GeoSpatial_Information(); Return_Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo); } return Read_Metadata_Section(Input_XmlReader, geoInfo, Options); }
/// <summary> Create a test digital resource item </summary> /// <param name="directory">Directory for the package source directory</param> /// <returns>Fully built test bib package</returns> public static SobekCM_Item Create(string directory) { SobekCM_Item testPackage = new SobekCM_Item(); // Add all the METS header information testPackage.METS_Header.Create_Date = new DateTime(2007, 1, 1); testPackage.METS_Header.Modify_Date = DateTime.Now; testPackage.METS_Header.Creator_Individual = "Mark Sullivan"; testPackage.METS_Header.Add_Creator_Individual_Notes("Programmer of new SobekCM.Resource_Object"); testPackage.METS_Header.Add_Creator_Individual_Notes("Adding coordinates"); testPackage.METS_Header.Creator_Organization = "University of Florida"; testPackage.METS_Header.Creator_Software = "SobekCM Bib Package Test"; testPackage.METS_Header.RecordStatus_Enum = METS_Record_Status.COMPLETE; testPackage.METS_Header.Add_Creator_Org_Notes("This test package was done to test DLCs new METS package"); // Add all the MODS elements Abstract_Info testAbstract = testPackage.Bib_Info.Add_Abstract("This is a sample abstract", "en"); testPackage.Bib_Info.Add_Abstract("Tämä on esimerkki abstrakteja", "fin"); testAbstract.Display_Label = "Summary Abstract"; testAbstract.Type = "summary"; testPackage.Bib_Info.Access_Condition.Text = "All rights are reserved by source institution."; testPackage.Bib_Info.Access_Condition.Language = "en"; testPackage.Bib_Info.Access_Condition.Type = "restrictions on use"; testPackage.Bib_Info.Access_Condition.Display_Label = "Rights"; testPackage.Bib_Info.Add_Identifier("000123234", "OCLC", "Electronic OCLC"); testPackage.Bib_Info.Add_Identifier("182-asdsd-28k", "DOI"); testPackage.Bib_Info.Add_Language("English", String.Empty, "en"); testPackage.Bib_Info.Add_Language("Finnish"); testPackage.Bib_Info.Add_Language(String.Empty, "ita", String.Empty); testPackage.Bib_Info.Location.Holding_Code = "MVS"; testPackage.Bib_Info.Location.Holding_Name = "From the Private Library of Mark Sullivan"; testPackage.Bib_Info.Location.PURL = "http://www.uflib.ufl.edu/ufdc/?b=CA00000000"; testPackage.Bib_Info.Location.Other_URL = "http://www.fnhm.edu"; testPackage.Bib_Info.Location.Other_URL_Display_Label = "Specimen Information"; testPackage.Bib_Info.Location.Other_URL_Note = "Specimen FLAS 125342 Database"; testPackage.Bib_Info.Location.EAD_URL = "http://digital.uflib.ufl.edu/"; testPackage.Bib_Info.Location.EAD_Name = "Digital Library Center Finding Guide"; testPackage.Bib_Info.Main_Entity_Name.Name_Type = Name_Info_Type_Enum.Personal; testPackage.Bib_Info.Main_Entity_Name.Full_Name = "Brown, B.F."; testPackage.Bib_Info.Main_Entity_Name.Terms_Of_Address = "Dr."; testPackage.Bib_Info.Main_Entity_Name.Display_Form = "B.F. Brown"; testPackage.Bib_Info.Main_Entity_Name.Affiliation = "Chemistry Dept., American University"; testPackage.Bib_Info.Main_Entity_Name.Description = "Chemistry Professor Emeritus"; testPackage.Bib_Info.Main_Entity_Name.Add_Role("Author"); Zoological_Taxonomy_Info taxonInfo = new Zoological_Taxonomy_Info(); testPackage.Add_Metadata_Module(GlobalVar.ZOOLOGICAL_TAXONOMY_METADATA_MODULE_KEY, taxonInfo); taxonInfo.Scientific_Name = "Ctenomys sociabilis"; taxonInfo.Higher_Classification = "Animalia; Chordata; Vertebrata; Mammalia; Theria; Eutheria; Rodentia; Hystricognatha; Hystricognathi; Ctenomyidae; Ctenomyini; Ctenomys"; taxonInfo.Kingdom = "Animalia"; taxonInfo.Phylum = "Chordata"; taxonInfo.Class = "Mammalia"; taxonInfo.Order = "Rodentia"; taxonInfo.Family = "Ctenomyidae"; taxonInfo.Genus = "Ctenomys"; taxonInfo.Specific_Epithet = "sociabilis"; taxonInfo.Taxonomic_Rank = "species"; taxonInfo.Common_Name = "Social Tuco-Tuco"; Name_Info name1 = new Name_Info(); name1.Name_Type = Name_Info_Type_Enum.Personal; name1.Given_Name = "John Paul"; name1.Terms_Of_Address = "Pope; II"; name1.Dates = "1920-2002"; name1.User_Submitted = true; testPackage.Bib_Info.Add_Named_Entity(name1); Name_Info name2 = new Name_Info(); name2.Name_Type = Name_Info_Type_Enum.Conference; name2.Full_Name = "Paris Peace Conference (1919-1920)"; name2.Dates = "1919-1920"; testPackage.Bib_Info.Add_Named_Entity(name2); Name_Info name3 = new Name_Info(); name3.Name_Type = Name_Info_Type_Enum.Corporate; name3.Full_Name = "United States -- Court of Appeals (2nd Court)"; testPackage.Bib_Info.Add_Named_Entity(name3); Name_Info name4 = new Name_Info(); name4.Name_Type = Name_Info_Type_Enum.Personal; name4.Full_Name = "Wilson, Mary"; name4.Display_Form = "Mary 'Weels' Wilson"; name4.Given_Name = "Mary"; name4.Family_Name = "Wilson"; name4.ID = "NAM4"; name4.Terms_Of_Address = "2nd"; name4.Add_Role("illustrator"); name4.Add_Role("cartographer"); testPackage.Bib_Info.Add_Named_Entity(name4); Name_Info donor = new Name_Info(); donor.Name_Type = Name_Info_Type_Enum.Personal; donor.Full_Name = "Livingston, Arthur"; donor.Description = "Gift in honor of Arthur Livingston"; donor.Terms_Of_Address = "3rd"; donor.Add_Role("honoree", String.Empty); testPackage.Bib_Info.Donor = donor; testPackage.Bib_Info.Main_Title.NonSort = "The "; testPackage.Bib_Info.Main_Title.Title = "Man Who Would Be King"; testPackage.Bib_Info.Main_Title.Subtitle = "The story of succession in England"; Title_Info title1 = new Title_Info("homme qui voulut être roi", Title_Type_Enum.Translated); title1.NonSort = "L'"; title1.Language = "fr"; testPackage.Bib_Info.Add_Other_Title(title1); Title_Info title2 = new Title_Info(); title2.Title = "Man Who Be King"; title2.Display_Label = "also known as"; title2.NonSort = "The"; title2.Title_Type = Title_Type_Enum.Alternative; testPackage.Bib_Info.Add_Other_Title(title2); Title_Info title3 = new Title_Info(); title3.Title = "Great works of England"; title3.Authority = "naf"; title3.Add_Part_Name("Second Portion"); title3.Add_Part_Number("2nd"); title3.Title_Type = Title_Type_Enum.Uniform; title3.User_Submitted = true; testPackage.Bib_Info.Add_Other_Title(title3); testPackage.Bib_Info.Add_Note("Funded by the NEH", Note_Type_Enum.Funding); testPackage.Bib_Info.Add_Note("Based on a play which originally appeared in France as \"Un peu plus tard, un peu plus tôt\"").User_Submitted = true; testPackage.Bib_Info.Add_Note("Anne Baxter (Louise), Maria Perschy (Angela), Gustavo Rojo (Bill), Reginald Gilliam (Mr. Johnson), [Catherine Elliot?] (Aunt Sallie), Ben Tatar (waiter)", Note_Type_Enum.Performers, "Performed By"); testPackage.Bib_Info.Origin_Info.Add_Place("New York", "nyu", "usa"); testPackage.Bib_Info.Origin_Info.Date_Issued = "1992"; testPackage.Bib_Info.Origin_Info.MARC_DateIssued_Start = "1992"; testPackage.Bib_Info.Origin_Info.MARC_DateIssued_End = "1993"; testPackage.Bib_Info.Origin_Info.Date_Copyrighted = "1999"; testPackage.Bib_Info.Origin_Info.Edition = "2nd"; Publisher_Info newPub = testPackage.Bib_Info.Add_Publisher("Published for the American Vacuum Society by the American Institute of Physics"); newPub.Add_Place("New York, New York"); newPub.User_Submitted = true; testPackage.Bib_Info.Add_Publisher("University of Florida Press House").Add_Place("Gainesville, FL"); testPackage.Bib_Info.Add_Manufacturer("Addison Randly Publishing House"); testPackage.Bib_Info.Original_Description.Extent = "1 sound disc (56 min.) : digital ; 3/4 in."; testPackage.Bib_Info.Original_Description.Add_Note("The sleeve of this sound disc was damaged in a fire"); testPackage.Bib_Info.Original_Description.Add_Note("The disc has a moderate amount of scratches, but still plays"); testPackage.Bib_Info.Series_Part_Info.Day = "18"; testPackage.Bib_Info.Series_Part_Info.Day_Index = 18; testPackage.Bib_Info.Series_Part_Info.Month = "Syyskuu"; testPackage.Bib_Info.Series_Part_Info.Month_Index = 9; testPackage.Bib_Info.Series_Part_Info.Year = "1992"; testPackage.Bib_Info.Series_Part_Info.Year_Index = 1992; testPackage.Bib_Info.Series_Part_Info.Enum1 = "Volume 12"; testPackage.Bib_Info.Series_Part_Info.Enum1_Index = 12; testPackage.Bib_Info.Series_Part_Info.Enum2 = "Issue 3"; testPackage.Bib_Info.Series_Part_Info.Enum2_Index = 3; testPackage.Bib_Info.Series_Part_Info.Enum3 = "Part 1"; testPackage.Bib_Info.Series_Part_Info.Enum3_Index = 1; testPackage.Behaviors.Serial_Info.Add_Hierarchy(1, 1992, "1992"); testPackage.Behaviors.Serial_Info.Add_Hierarchy(2, 9, "Syyskuu"); testPackage.Behaviors.Serial_Info.Add_Hierarchy(3, 18, "18"); testPackage.Bib_Info.SeriesTitle.Title = "Shakespeare's most famous musicals"; testPackage.Bib_Info.Add_Target_Audience("young adults"); testPackage.Bib_Info.Add_Target_Audience("adolescent", "marctarget"); testPackage.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper; // Add cartographic subject Subject_Info_Cartographics newCartographics = testPackage.Bib_Info.Add_Cartographics_Subject(); newCartographics.Scale = "1:2000"; newCartographics.Projection = "Conical Projection"; newCartographics.Coordinates = "E 72°--E 148°/N 13°--N 18°"; // Add hierarchical geographic subject Subject_Info_HierarchicalGeographic hierarchical = testPackage.Bib_Info.Add_Hierarchical_Geographic_Subject(); hierarchical.Continent = "North America"; hierarchical.Country = "United States of America"; hierarchical.State = "Kansas"; hierarchical.County = "Butler"; hierarchical.City = "Augusta"; // Add hierarchical geographic subject Subject_Info_HierarchicalGeographic hierarchical2 = testPackage.Bib_Info.Add_Hierarchical_Geographic_Subject(); hierarchical2.Region = "Arctic Ocean"; // Add hierarchical geographic subject Subject_Info_HierarchicalGeographic hierarchical3 = testPackage.Bib_Info.Add_Hierarchical_Geographic_Subject(); hierarchical3.Island = "Puerto Rico"; hierarchical3.Language = "English"; hierarchical3.Province = "Provincial"; hierarchical3.Territory = "Puerto Rico"; hierarchical3.Area = "Intercontinental areas (Western Hemisphere)"; // Add a name subject Subject_Info_Name subjname1 = testPackage.Bib_Info.Add_Name_Subject(); subjname1.Authority = "lcsh"; subjname1.Full_Name = "Garcia Lorca, Federico"; subjname1.Dates = "1898-1936"; subjname1.Add_Geographic("Russia"); subjname1.Add_Geographic("Moscow"); subjname1.Add_Genre("maps"); subjname1.User_Submitted = true; // Add a title information subject Subject_Info_TitleInfo subjtitle1 = testPackage.Bib_Info.Add_Title_Subject(); subjtitle1.Title_Type = Title_Type_Enum.Uniform; subjtitle1.Authority = "naf"; subjtitle1.Title = "Missale Carnotense"; // Add a standard subject Subject_Info_Standard subject1 = testPackage.Bib_Info.Add_Subject(); subject1.Authority = "lcsh"; subject1.Add_Topic("Real property"); subject1.Add_Geographic("Mississippi"); subject1.Add_Geographic("Tippah County"); subject1.Add_Genre("Maps"); // Add a standard subject Subject_Info_Standard subject2 = testPackage.Bib_Info.Add_Subject(); subject2.Add_Occupation("Migrant laborers"); subject2.Add_Genre("School district case files"); // Add a standard subject Subject_Info_Standard subject3 = testPackage.Bib_Info.Add_Subject(); subject3.Authority = "lctgm"; subject3.Add_Topic("Educational buildings"); subject3.Add_Geographic("Washington (D.C.)"); subject3.Add_Temporal("1890-1910"); // Add a standard subject Subject_Info_Standard subject4 = testPackage.Bib_Info.Add_Subject(); subject4.Authority = "rvm"; subject4.Language = "french"; subject4.Add_Topic("Église catholique"); subject4.Add_Topic("Histoire"); subject4.Add_Temporal("20e siècle"); // Add record information testPackage.Bib_Info.Record.Add_Catalog_Language(new Language_Info("English", "eng", "en")); testPackage.Bib_Info.Record.Add_Catalog_Language(new Language_Info("French", "fre", "fr")); testPackage.Bib_Info.Record.MARC_Creation_Date = "080303"; testPackage.Bib_Info.Record.Add_MARC_Record_Content_Sources("FUG"); testPackage.Bib_Info.Record.Record_Origin = "Imported from (OCLC)001213124"; // Test the items which are in the non-MODS portion of the Bib_Info object testPackage.BibID = "MVS0000001"; testPackage.VID = "00001"; testPackage.Bib_Info.SortDate = 1234; testPackage.Bib_Info.SortTitle = "MAN WHO WOULD BE KING"; testPackage.Bib_Info.Add_Temporal_Subject(1990, 2002, "Recent history"); testPackage.Bib_Info.Add_Temporal_Subject(1990, 2002, "Lähihistoria"); testPackage.Bib_Info.Source.Code = "UF"; testPackage.Bib_Info.Source.Statement = "University of Florida"; // Add an affiliation Affiliation_Info affiliation1 = new Affiliation_Info(); affiliation1.University = "University of Florida"; affiliation1.Campus = "Gainesville Campus"; affiliation1.College = "College of Engineering"; affiliation1.Department = "Computer Engineering Department"; affiliation1.Unit = "Robotics"; affiliation1.Name_Reference = "NAM4"; testPackage.Bib_Info.Add_Affiliation(affiliation1); // Add a related item Related_Item_Info relatedItem1 = new Related_Item_Info(); relatedItem1.SobekCM_ID = "UF00001234"; relatedItem1.Relationship = Related_Item_Type_Enum.Preceding; relatedItem1.Publisher = "Gainesville Sun Publishing House"; relatedItem1.Add_Note(new Note_Info("Digitized with funding from NEH", Note_Type_Enum.Funding)); relatedItem1.Add_Note(new Note_Info("Gainesville Bee was the precursor to this item")); relatedItem1.Main_Title.NonSort = "The"; relatedItem1.Main_Title.Title = "Gainesville Bee"; relatedItem1.Add_Identifier("01234353", "oclc"); relatedItem1.Add_Identifier("002232311", "aleph"); Name_Info ri_name = new Name_Info(); ri_name.Full_Name = "Hills, Bryan"; ri_name.Terms_Of_Address = "Mr."; ri_name.Name_Type = Name_Info_Type_Enum.Personal; ri_name.Add_Role("author"); relatedItem1.Add_Name(ri_name); relatedItem1.URL = @"http://www.uflib.ufl.edu/ufdc/?b=UF00001234"; relatedItem1.URL_Display_Label = "Full Text"; testPackage.Bib_Info.Add_Related_Item(relatedItem1); // Add another related item Related_Item_Info relatedItem2 = new Related_Item_Info(); relatedItem2.Relationship = Related_Item_Type_Enum.Succeeding; relatedItem2.SobekCM_ID = "UF00009999"; relatedItem2.Main_Title.NonSort = "The"; relatedItem2.Main_Title.Title = "Daily Sun"; relatedItem2.Add_Identifier("0125437", "oclc"); relatedItem2.Add_Note("Name change occured in Fall 1933"); relatedItem2.Start_Date = "Fall 1933"; relatedItem2.End_Date = "December 31, 1945"; testPackage.Bib_Info.Add_Related_Item(relatedItem2); // Add some processing parameters testPackage.Behaviors.Add_Aggregation("JUV"); testPackage.Behaviors.Add_Aggregation("DLOC"); testPackage.Behaviors.Add_Aggregation("DLOSA1"); testPackage.Behaviors.Add_Aggregation("ALICE"); testPackage.Behaviors.Add_Aggregation("ARTE"); testPackage.Web.GUID = "GUID!"; testPackage.Behaviors.Add_Wordmark("DLOC"); testPackage.Behaviors.Add_Wordmark("UFSPEC"); testPackage.Behaviors.Main_Thumbnail = "00001thm.jpg"; // Add some downloads testPackage.Divisions.Download_Tree.Add_File("MVS_Complete.PDF"); testPackage.Divisions.Download_Tree.Add_File("MVS_Complete.MP2"); testPackage.Divisions.Download_Tree.Add_File("MVS_Part1.MP2"); testPackage.Divisions.Download_Tree.Add_File("MVS_Part1.PDF"); // Add some coordinate information GeoSpatial_Information geoSpatial = new GeoSpatial_Information(); testPackage.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoSpatial); geoSpatial.Add_Point(29.530151, -82.301459, "Lake Wauberg"); geoSpatial.Add_Point(29.634352, -82.350640, "Veterinary School"); Coordinate_Polygon polygon = new Coordinate_Polygon(); polygon.Label = "University of Florida Campus"; polygon.Add_Edge_Point(new Coordinate_Point(29.651435, -82.339869, String.Empty)); polygon.Add_Edge_Point(new Coordinate_Point(29.641216, -82.340298, String.Empty)); polygon.Add_Edge_Point(new Coordinate_Point(29.629503, -82.371969, String.Empty)); polygon.Add_Edge_Point(new Coordinate_Point(29.649645, -82.371712, String.Empty)); polygon.Add_Inner_Point(29.649794, -82.351971, "Stadium"); polygon.Add_Inner_Point(29.650988, -82.341156, "Library"); geoSpatial.Add_Polygon(polygon); Coordinate_Line line = new Coordinate_Line(); line.Label = "Waldo Road"; line.Add_Point(29.652852, -82.310944, "Gainesville"); line.Add_Point(29.716681, -82.268372, String.Empty); line.Add_Point(29.791494, -82.167778, "Waldo"); geoSpatial.Add_Line(line); // Add some performing arts information Performing_Arts_Info partInfo = new Performing_Arts_Info(); testPackage.Add_Metadata_Module("PerformingArts", partInfo); partInfo.Performance = "Hamlet"; partInfo.Performance_Date = "August 12, 1923"; Performer performer1 = partInfo.Add_Performer("Sullivan, Mark"); performer1.Sex = "M"; performer1.LifeSpan = "1873-"; performer1.Occupation = "actor"; performer1.Title = "Mr."; Performer performer2 = partInfo.Add_Performer("Waldbart, Julia"); performer2.Sex = "F"; performer2.LifeSpan = "1876-"; performer2.Occupation = "actress"; performer2.Title = "Mrs."; // Add some oral history information Oral_Interview_Info oralInfo = new Oral_Interview_Info(); testPackage.Add_Metadata_Module( "OralInterview", oralInfo); oralInfo.Interviewee = "Edwards, Herm"; oralInfo.Interviewer = "Proctor, Samual"; // Add some learning object resource information LearningObjectMetadata lomInfo = new LearningObjectMetadata(); testPackage.Add_Metadata_Module( GlobalVar.IEEE_LOM_METADATA_MODULE_KEY, lomInfo ); lomInfo.AggregationLevel = AggregationLevelEnum.level3; lomInfo.Status = StatusEnum.draft; LOM_System_Requirements lomReq1 = new LOM_System_Requirements(); lomReq1.RequirementType = RequirementTypeEnum.operating_system; lomReq1.Name.Value = "Windows"; lomReq1.MinimumVersion = "Windows XP"; lomReq1.MaximumVersion = "Windows 7"; lomInfo.Add_SystemRequirements(lomReq1); LOM_System_Requirements lomReq2 = new LOM_System_Requirements(); lomReq2.RequirementType = RequirementTypeEnum.software; lomReq2.Name.Value = "Java SDK"; lomReq2.MinimumVersion = "1.7.1"; lomReq2.MaximumVersion = "2.09"; lomInfo.Add_SystemRequirements(lomReq2); lomInfo.InteractivityType = InteractivityTypeEnum.mixed; lomInfo.Add_LearningResourceType("exercise"); lomInfo.Add_LearningResourceType("Tutorials", "encdlwebpedagogicaltype"); lomInfo.InteractivityLevel = InteractivityLevelEnum.high; lomInfo.Add_IntendedEndUserRole(IntendedEndUserRoleEnum.learner); lomInfo.Add_Context("Undergraduate lower division", "enclearningcontext"); lomInfo.Add_Context("15", "grade"); lomInfo.Add_Context("16", "grade"); lomInfo.Add_Context("5", "group"); lomInfo.Add_TypicalAgeRange("suitable for children over 7", "en"); lomInfo.Add_TypicalAgeRange("2-8"); lomInfo.DifficultyLevel = DifficultyLevelEnum.medium; lomInfo.TypicalLearningTime = "PT45M"; LOM_Classification lomClassification1 = new LOM_Classification(); lomInfo.Add_Classification(lomClassification1); lomClassification1.Purpose.Value = "Discipline"; LOM_TaxonPath lomTaxonPath1 = new LOM_TaxonPath(); lomClassification1.Add_TaxonPath(lomTaxonPath1); lomTaxonPath1.Add_SourceName("ARIADNE"); LOM_Taxon lomTaxon1 = new LOM_Taxon(); lomTaxonPath1.Add_Taxon(lomTaxon1); lomTaxon1.ID = "BF120"; lomTaxon1.Add_Entry("Work_History", "en"); lomTaxon1.Add_Entry("Historie", "nl"); LOM_Taxon lomTaxon2 = new LOM_Taxon(); lomTaxonPath1.Add_Taxon(lomTaxon2); lomTaxon2.ID = "BF120.1"; lomTaxon2.Add_Entry("American Work_History", "en"); LOM_Taxon lomTaxon3 = new LOM_Taxon(); lomTaxonPath1.Add_Taxon(lomTaxon3); lomTaxon3.ID = "BF120.1.4"; lomTaxon3.Add_Entry("American Civil War", "en"); LOM_Classification lomClassification2 = new LOM_Classification(); lomInfo.Add_Classification(lomClassification2); lomClassification2.Purpose.Value = "Educational Objective"; LOM_TaxonPath lomTaxonPath2 = new LOM_TaxonPath(); lomClassification2.Add_TaxonPath(lomTaxonPath2); lomTaxonPath2.Add_SourceName("Common Core Standards", "en"); LOM_Taxon lomTaxon4 = new LOM_Taxon(); lomTaxonPath2.Add_Taxon(lomTaxon4); lomTaxon4.ID = "CCS.Math.Content"; LOM_Taxon lomTaxon5 = new LOM_Taxon(); lomTaxonPath2.Add_Taxon(lomTaxon5); lomTaxon5.ID = "3"; lomTaxon5.Add_Entry("Grade 3", "en"); LOM_Taxon lomTaxon6 = new LOM_Taxon(); lomTaxonPath2.Add_Taxon(lomTaxon6); lomTaxon6.ID = "OA"; lomTaxon6.Add_Entry("Operations and Algebraic Thinking", "en"); LOM_Taxon lomTaxon7 = new LOM_Taxon(); lomTaxonPath2.Add_Taxon(lomTaxon7); lomTaxon7.ID = "A"; lomTaxon7.Add_Entry("Represent and solve problems involving multiplication and division.", "en"); LOM_Taxon lomTaxon8 = new LOM_Taxon(); lomTaxonPath2.Add_Taxon(lomTaxon8); lomTaxon8.ID = "3"; lomTaxon8.Add_Entry("Use multiplication and division within 100 to solve word problems in situations involving equal groups, arrays, and measurement quantities, e.g., by using drawings and equations with a symbol for the unknown number to represent the problem.", "en"); LOM_TaxonPath lomTaxonPath3 = new LOM_TaxonPath(); lomClassification2.Add_TaxonPath(lomTaxonPath3); lomTaxonPath3.Add_SourceName("Common Core Standards", "en"); LOM_Taxon lomTaxon14 = new LOM_Taxon(); lomTaxonPath3.Add_Taxon(lomTaxon14); lomTaxon14.ID = "CCS.Math.Content"; LOM_Taxon lomTaxon15 = new LOM_Taxon(); lomTaxonPath3.Add_Taxon(lomTaxon15); lomTaxon15.ID = "3"; lomTaxon15.Add_Entry("Grade 3", "en"); LOM_Taxon lomTaxon16 = new LOM_Taxon(); lomTaxonPath3.Add_Taxon(lomTaxon16); lomTaxon16.ID = "OA"; lomTaxon16.Add_Entry("Operations and Algebraic Thinking", "en"); LOM_Taxon lomTaxon17 = new LOM_Taxon(); lomTaxonPath3.Add_Taxon(lomTaxon17); lomTaxon17.ID = "A"; lomTaxon17.Add_Entry("Represent and solve problems involving multiplication and division.", "en"); LOM_Taxon lomTaxon18 = new LOM_Taxon(); lomTaxonPath3.Add_Taxon(lomTaxon18); lomTaxon18.ID = "4"; lomTaxon18.Add_Entry("Determine the unknown whole number in a multiplication or division equation relating three whole numbers. For example, determine the unknown number that makes the equation true in each of the equations 8 × ? = 48, 5 = _ ÷ 3, 6 × 6 = ?", "en"); // Add some views and interfaces testPackage.Behaviors.Clear_Web_Skins(); testPackage.Behaviors.Add_Web_Skin("dLOC"); testPackage.Behaviors.Add_Web_Skin("UFDC"); testPackage.Behaviors.Add_View(View_Enum.JPEG2000); testPackage.Behaviors.Add_View(View_Enum.JPEG); testPackage.Behaviors.Add_View(View_Enum.RELATED_IMAGES); testPackage.Behaviors.Add_View(View_Enum.HTML, "Full Document", "MVS001214.html"); // Create the chapters and pages and link them Division_TreeNode chapter1 = new Division_TreeNode("Chapter", "First Chapter"); Page_TreeNode page1 = new Page_TreeNode("First Page"); Page_TreeNode page2 = new Page_TreeNode("Page 2"); chapter1.Nodes.Add(page1); chapter1.Nodes.Add(page2); Division_TreeNode chapter2 = new Division_TreeNode("Chapter", "Last Chapter"); Page_TreeNode page3 = new Page_TreeNode("Page 3"); Page_TreeNode page4 = new Page_TreeNode("Last Page"); chapter2.Nodes.Add(page3); chapter2.Nodes.Add(page4); testPackage.Divisions.Physical_Tree.Roots.Add(chapter1); testPackage.Divisions.Physical_Tree.Roots.Add(chapter2); // Create the files SobekCM_File_Info file1_1 = new SobekCM_File_Info("2000626_0001.jp2", 2120, 1100); SobekCM_File_Info file1_2 = new SobekCM_File_Info("2000626_0001.jpg", 630, 330); SobekCM_File_Info file1_3 = new SobekCM_File_Info("2000626_0001.tif"); SobekCM_File_Info file2_1 = new SobekCM_File_Info("2000626_0002.jp2", 1754, 2453); SobekCM_File_Info file2_2 = new SobekCM_File_Info("2000626_0002.jpg", 630, 832); SobekCM_File_Info file2_3 = new SobekCM_File_Info("2000626_0002.tif"); SobekCM_File_Info file3_1 = new SobekCM_File_Info("2000626_0003.jp2", 2321, 1232); SobekCM_File_Info file3_2 = new SobekCM_File_Info("2000626_0003.jpg", 630, 342); SobekCM_File_Info file3_3 = new SobekCM_File_Info("2000626_0003.tif"); SobekCM_File_Info file4_1 = new SobekCM_File_Info("2000626_0004.jp2", 2145, 1024); SobekCM_File_Info file4_2 = new SobekCM_File_Info("2000626_0004.jpg", 630, 326); SobekCM_File_Info file4_3 = new SobekCM_File_Info("2000626_0004.tif"); // Link the files to the pages page1.Files.Add(file1_1); page1.Files.Add(file1_2); page1.Files.Add(file1_3); page2.Files.Add(file2_1); page2.Files.Add(file2_2); page2.Files.Add(file2_3); page3.Files.Add(file3_1); page3.Files.Add(file3_2); page3.Files.Add(file3_3); page4.Files.Add(file4_1); page4.Files.Add(file4_2); page4.Files.Add(file4_3); // Add the DAITSS information DAITSS_Info daitssInfo = new DAITSS_Info(); daitssInfo.Account = "FTU"; daitssInfo.SubAccount = "CLAS"; daitssInfo.Project = "UFDC"; daitssInfo.toArchive = true; testPackage.Add_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY, daitssInfo); // Save this package testPackage.Source_Directory = directory; return testPackage; }
private void read_coordinates_info(XmlReader Input_XmlReader, SobekCM_Item Return_Package) { GeoSpatial_Information geoInfo = Return_Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if (geoInfo == null) { geoInfo = new GeoSpatial_Information(); Return_Package.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo); } while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Coordinates")) { return; } if (Input_XmlReader.NodeType == XmlNodeType.Element) { switch (Input_XmlReader.Name.Replace(sobekcm_namespace + ":", "")) { case "KML": if (!Input_XmlReader.IsEmptyElement) { Input_XmlReader.Read(); if (Input_XmlReader.NodeType == XmlNodeType.Text) geoInfo.KML_Reference = Input_XmlReader.Value; } break; case "Point": geoInfo.Add_Point(read_point(Input_XmlReader)); break; case "Line": Coordinate_Line newLine = new Coordinate_Line(); if (Input_XmlReader.MoveToAttribute("label")) newLine.Label = Input_XmlReader.Value; while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Line")) { geoInfo.Add_Line(newLine); break; } if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":Point")) { newLine.Add_Point(read_point(Input_XmlReader)); } } break; case "Polygon": Coordinate_Polygon newPolygon = new Coordinate_Polygon(); if (Input_XmlReader.MoveToAttribute("label")) newPolygon.Label = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("ID")) newPolygon.ID = Input_XmlReader.Value; if (Input_XmlReader.MoveToAttribute("pageSeq")) { try { newPolygon.Page_Sequence = Convert.ToUInt16(Input_XmlReader.Value); } catch { } } while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Polygon")) { geoInfo.Add_Polygon(newPolygon); break; } if (Input_XmlReader.NodeType == XmlNodeType.Element) { if (Input_XmlReader.Name == sobekcm_namespace + ":Edge") { while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Edge")) { break; } if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":Point")) { newPolygon.Add_Edge_Point(read_point(Input_XmlReader)); } } } if (Input_XmlReader.Name == sobekcm_namespace + ":Internal") { while (Input_XmlReader.Read()) { if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == sobekcm_namespace + ":Internal")) { break; } if ((Input_XmlReader.NodeType == XmlNodeType.Element) && (Input_XmlReader.Name == sobekcm_namespace + ":Point")) { newPolygon.Add_Inner_Point(read_point(Input_XmlReader)); } } } } } break; } } } }
/// <summary> Reads the MARC Core-compliant section of XML and stores the data in the provided digital resource </summary> /// <param name="r"> XmlTextReader from which to read the marc data </param> /// <param name="thisBibInfo">Bibliographic object into which most the values are read</param> /// <param name="package"> Digital resource object to save the data to if this is reading the top-level bibDesc (OPTIONAL)</param> /// <param name="Importing_Record"> Importing record flag is used to determine if special treatment should be applied to the 001 identifier. If this is reading MarcXML from a dmdSec, this is set to false </param> /// <param name="Options"> Dictionary of any options which this metadata reader/writer may utilize </param> public static void Read_MarcXML_Info(XmlReader r, Bibliographic_Info thisBibInfo, SobekCM_Item package, bool Importing_Record, Dictionary<string, object> Options ) { // Create the MARC_XML_Reader to load everything into first MARC_Record record = new MARC_Record(); // Read from the file record.Read_MARC_Info(r); // Handle optional mapping first for retaining the 856 as a related link if ((Options != null) && (Options.ContainsKey("MarcXML_File_ReaderWriter.Retain_856_As_Related_Link"))) { if (Options["MarcXML_File_ReaderWriter.Retain_856_As_Related_Link"].ToString().ToUpper() == "TRUE") { if ((record.Get_Data_Subfield(856, 'u').Length > 0) && (record.Get_Data_Subfield(856, 'y').Length > 0)) { string url856 = record.Get_Data_Subfield(856, 'u'); string label856 = record.Get_Data_Subfield(856, 'y'); thisBibInfo.Location.Other_URL = url856; thisBibInfo.Location.Other_URL_Note = label856; } } } // Now, load values into the bib package // Load the date ( 260 |c ) thisBibInfo.Origin_Info.MARC_DateIssued = Remove_Trailing_Punctuation(record.Get_Data_Subfield(260, 'c')); // Load the descriptions and notes about this item Add_Descriptions(thisBibInfo, record); // Look for the 786 with special identifiers to map back into the source notes foreach (MARC_Field thisRecord in record[786]) { if ((thisRecord.Indicators == "0 ") && (thisRecord.Subfield_Count == 1) && (thisRecord.has_Subfield('n'))) thisBibInfo.Add_Note(thisRecord.Subfields[0].Data, Note_Type_Enum.Source); } // Add the contents (505) if (record.Get_Data_Subfield(505, 'a').Length > 2) { thisBibInfo.Add_TableOfContents(record.Get_Data_Subfield(505, 'a')); } // Get the scale information (034) if (record.Get_Data_Subfield(034, 'b').Length > 2) { thisBibInfo.Add_Scale(record.Get_Data_Subfield(034, 'b'), "SUBJ034"); } // Get the scale information (255) if ((record.Get_Data_Subfield(255, 'a').Length > 2) || (record.Get_Data_Subfield(255, 'b').Length > 2) || (record.Get_Data_Subfield(255, 'c').Length > 2)) { thisBibInfo.Add_Scale(record.Get_Data_Subfield(255, 'a'), record.Get_Data_Subfield(255, 'b'), record.Get_Data_Subfield(255, 'c'), "SUBJ255"); } // Get the coordinate information (034) if ((record.Get_Data_Subfield(034, 'd').Length > 0) && (record.Get_Data_Subfield(034, 'e').Length > 0) && (record.Get_Data_Subfield(034, 'f').Length > 0) && (record.Get_Data_Subfield(034, 'g').Length > 0)) { // This is an extra metadata component 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); } if (geoInfo.Polygon_Count == 0) { try { string d_field = record.Get_Data_Subfield(034, 'd').Replace("O", "0"); string e_field = record.Get_Data_Subfield(034, 'e').Replace("O", "0"); string f_field = record.Get_Data_Subfield(034, 'f').Replace("O", "0"); string g_field = record.Get_Data_Subfield(034, 'g').Replace("O", "0"); double d_value = 1; double e_value = 1; double f_value = 1; double g_value = 1; if (d_field.Contains(".")) { if (d_field.Contains("W")) { d_value = -1*Convert.ToDouble(d_field.Replace("W", "")); } else { d_value = Convert.ToDouble(d_field.Replace("E", "")); } } else { d_value = Convert.ToDouble(d_field.Substring(1, 3)) + (Convert.ToDouble(d_field.Substring(4, 2))/60); if ((d_field[0] == '-') || (d_field[0] == 'W')) { d_value = -1*d_value; } } if (d_value < -180) d_value = d_value + 360; if (e_field.Contains(".")) { if (e_field.Contains("W")) { e_value = -1*Convert.ToDouble(e_field.Replace("W", "")); } else { e_value = Convert.ToDouble(e_field.Replace("E", "")); } } else { e_value = Convert.ToDouble(e_field.Substring(1, 3)) + (Convert.ToDouble(e_field.Substring(4, 2))/60); if ((e_field[0] == '-') || (e_field[0] == 'W')) { e_value = -1*e_value; } } if (e_value < -180) e_value = e_value + 360; if (f_field.Contains(".")) { if (f_field.Contains("S")) { f_value = -1*Convert.ToDouble(f_field.Replace("S", "")); } else { f_value = Convert.ToDouble(f_field.Replace("N", "")); } } else { f_value = Convert.ToDouble(f_field.Substring(1, 3)) + (Convert.ToDouble(f_field.Substring(4, 2))/60); if ((f_field[0] == '-') || (f_field[0] == 'S')) { f_value = -1*f_value; } } if (g_field.Contains(".")) { if (g_field.Contains("S")) { g_value = -1*Convert.ToDouble(g_field.Replace("S", "")); } else { g_value = Convert.ToDouble(g_field.Replace("N", "")); } } else { g_value = Convert.ToDouble(g_field.Substring(1, 3)) + (Convert.ToDouble(g_field.Substring(4, 2))/60); if ((g_field[0] == '-') || (g_field[0] == 'S')) { g_value = -1*g_value; } } Coordinate_Polygon polygon = new Coordinate_Polygon(); polygon.Add_Edge_Point(f_value, d_value); polygon.Add_Edge_Point(g_value, d_value); polygon.Add_Edge_Point(g_value, e_value); polygon.Add_Edge_Point(f_value, e_value); polygon.Label = "Map Coverage"; geoInfo.Add_Polygon(polygon); } catch { } } } // Add the abstract ( 520 |a ) foreach (MARC_Field thisRecord in record[520]) { if (thisRecord.has_Subfield('a')) { Abstract_Info newAbstract = new Abstract_Info(); switch (thisRecord.Indicator1) { case ' ': newAbstract.Type = "summary"; newAbstract.Display_Label = "Summary"; break; case '0': newAbstract.Type = "subject"; newAbstract.Display_Label = "Subject"; break; case '1': newAbstract.Type = "review"; newAbstract.Display_Label = "Review"; break; case '2': newAbstract.Type = "scope and content"; newAbstract.Display_Label = "Scope and Content"; break; case '4': newAbstract.Type = "content advice"; newAbstract.Display_Label = "Content Advice"; break; default: newAbstract.Display_Label = "Abstract"; break; } if (thisRecord.has_Subfield('b')) { newAbstract.Abstract_Text = thisRecord['a'] + " " + thisRecord['b']; } else { newAbstract.Abstract_Text = thisRecord['a']; } thisBibInfo.Add_Abstract(newAbstract); } } // Load the format ( 300 ) if (record.has_Field(300)) { StringBuilder builder300 = new StringBuilder(); if (record.Get_Data_Subfield(300, 'a').Length > 0) { builder300.Append(record.Get_Data_Subfield(300, 'a').Replace(":", "").Replace(";", "").Trim()); } builder300.Append(" : "); if (record.Get_Data_Subfield(300, 'b').Length > 0) { builder300.Append(record.Get_Data_Subfield(300, 'b').Replace(";", "").Trim()); } builder300.Append(" ; "); if (record.Get_Data_Subfield(300, 'c').Length > 0) { builder300.Append(record.Get_Data_Subfield(300, 'c')); } thisBibInfo.Original_Description.Extent = builder300.ToString().Trim(); if (thisBibInfo.Original_Description.Extent.Replace(" ", "").Replace(":", "").Replace(";", "") == "v.") thisBibInfo.Original_Description.Extent = String.Empty; } // Load the current frequency (310) foreach (MARC_Field thisRecord in record[310]) { if (thisRecord.has_Subfield('a')) { if (thisRecord.has_Subfield('b')) { thisBibInfo.Origin_Info.Add_Frequency(Remove_Trailing_Punctuation(thisRecord['a']).Replace("[", "(").Replace("]", ")") + "[" + thisRecord['b'].Replace("[", "(").Replace("]", ")") + "]"); } else { thisBibInfo.Origin_Info.Add_Frequency(Remove_Trailing_Punctuation(thisRecord['a']).Replace("[", "(").Replace("]", ")")); } } } // Load the previous frequency (321) foreach (MARC_Field thisRecord in record[321]) { if (thisRecord.has_Subfield('a')) { if (thisRecord.has_Subfield('b')) { thisBibInfo.Origin_Info.Add_Frequency(Remove_Trailing_Punctuation(thisRecord['a']).Replace("[", "(").Replace("]", ")") + "[ FORMER " + thisRecord['b'].Replace("[", "(").Replace("]", ")") + "]"); } else { thisBibInfo.Origin_Info.Add_Frequency(Remove_Trailing_Punctuation(thisRecord['a']).Replace("[", "(").Replace("]", ")") + "[ FORMER ]"); } } } // Load the edition ( 250 ) if (record.has_Field(250)) { if (record.Get_Data_Subfield(250, 'b').Length > 0) { thisBibInfo.Origin_Info.Edition = record.Get_Data_Subfield(250, 'a').Replace("/", "").Replace("=", "").Trim() + " -- " + record.Get_Data_Subfield(250, 'b'); } else { thisBibInfo.Origin_Info.Edition = record.Get_Data_Subfield(250, 'a'); } } // Load the language ( 008 ) if (record.has_Field(8)) { string field_08 = record[8][0].Control_Field_Value; if (field_08.Length > 5) { // Get the language code string languageCode = field_08.Substring(field_08.Length - 5, 3); // Add as the language of the item Language_Info thisLanguage = thisBibInfo.Add_Language(String.Empty, languageCode, String.Empty); // Add as the language of the cataloging thisBibInfo.Record.Add_Catalog_Language(new Language_Info(thisLanguage.Language_Text, thisLanguage.Language_ISO_Code, String.Empty)); } } // Load any additional languages (041) foreach (MARC_Field thisRecord in record[041]) { foreach (MARC_Subfield thisSubfield in thisRecord.Subfields) { if ((thisSubfield.Subfield_Code == 'a') || (thisSubfield.Subfield_Code == 'b') || (thisSubfield.Subfield_Code == 'd') || (thisSubfield.Subfield_Code == 'e') || (thisSubfield.Subfield_Code == 'f') || (thisSubfield.Subfield_Code == 'g') || (thisSubfield.Subfield_Code == 'h')) { thisBibInfo.Add_Language(thisSubfield.Data); } } } // Load the publisher ( 260 |b ) if (record.has_Field(260)) { string[] special_260_splitter = record[260][0].Control_Field_Value.Split("|".ToCharArray()); Publisher_Info thisInfo = new Publisher_Info(); foreach (string thisSplitter in special_260_splitter) { if (thisSplitter.Length > 2) { if (thisSplitter[0] == 'a') { thisInfo.Add_Place(Remove_Trailing_Punctuation(thisSplitter.Substring(2).Replace(" :", "").Trim())); thisInfo.Name = "[s.n.]"; thisBibInfo.Add_Publisher(thisInfo); } if (thisSplitter[0] == 'b') { string pubname = thisSplitter.Substring(2).Replace(";", "").Trim(); if ((pubname.Length > 1) && (pubname[pubname.Length - 1] == ',')) { pubname = pubname.Substring(0, pubname.Length - 1); } thisInfo.Name = pubname; thisBibInfo.Add_Publisher(thisInfo); thisInfo = new Publisher_Info(); } if (thisSplitter[0] == 'e') { thisInfo.Add_Place(thisSplitter.Substring(2).Replace("(", "").Replace(" :", "").Trim()); } if (thisSplitter[0] == 'f') { string manname = thisSplitter.Substring(2).Replace(")", "").Trim(); if ((manname.Length > 1) && (manname[manname.Length - 1] == ',')) { manname = manname.Substring(0, manname.Length - 1); } thisInfo.Name = manname; thisBibInfo.Add_Manufacturer(thisInfo); thisInfo = new Publisher_Info(); } } } } // Load the dates from the 008 string field_008 = String.Empty; if (record.has_Field(008)) { field_008 = record[8][0].Control_Field_Value; if (field_008.Length > 14) { // Save the two date points thisBibInfo.Origin_Info.MARC_DateIssued_Start = field_008.Substring(7, 4).Trim(); thisBibInfo.Origin_Info.MARC_DateIssued_End = field_008.Substring(11, 4).Trim(); // See what type of dates they are (if they are special) char date_type = field_008[6]; switch (date_type) { case 'r': thisBibInfo.Origin_Info.Date_Reprinted = thisBibInfo.Origin_Info.MARC_DateIssued_Start; break; case 't': thisBibInfo.Origin_Info.Date_Copyrighted = thisBibInfo.Origin_Info.MARC_DateIssued_End; break; } } if (field_008.Length > 5) { thisBibInfo.Record.MARC_Creation_Date = field_008.Substring(0, 6); } } // Load the location from the 008 if (field_008.Length > 17) { thisBibInfo.Origin_Info.Add_Place(String.Empty, field_008.Substring(15, 3), String.Empty); } // Load the main record number ( 001 ) string idValue; string oclc = String.Empty; if (record.has_Field(1)) { idValue = record[1][0].Control_Field_Value.Trim(); if (idValue.Length > 0) { thisBibInfo.Record.Main_Record_Identifier.Identifier = idValue; if (Importing_Record) { if (Char.IsNumber(idValue[0])) { // Add this ALEPH number if (thisBibInfo.ALEPH_Record != idValue) { thisBibInfo.Add_Identifier(idValue, "ALEPH"); } thisBibInfo.Record.Record_Origin = "Imported from (ALEPH)" + idValue; } else { if (idValue.Length >= 7) { if ((idValue.IndexOf("ocm") == 0) || (idValue.IndexOf("ocn") == 0)) { oclc = idValue.Replace("ocn", "").Replace("ocm", ""); if (thisBibInfo.OCLC_Record != oclc) { thisBibInfo.Add_Identifier(oclc, "OCLC"); } thisBibInfo.Record.Record_Origin = "Imported from (OCLC)" + oclc; } else { thisBibInfo.Add_Identifier(idValue.Substring(0, 7), "NOTIS"); thisBibInfo.Record.Record_Origin = "Imported from (NOTIS)" + idValue.Substring(0, 7); } } } } } } // If this was OCLC record (non-local) look for a 599 added during time of export if (oclc.Length > 0) { if (record.has_Field(599)) { // Tracking box number will be in the |a field if ((package != null) && (record[599][0].has_Subfield('a'))) { package.Tracking.Tracking_Box = record[599][0]['a']; } // Disposition advice will be in the |b field if ((package != null) && (record[599][0].has_Subfield('b'))) { package.Tracking.Disposition_Advice_Notes = record[599][0]['b']; string advice_notes_as_caps = package.Tracking.Disposition_Advice_Notes.ToUpper(); if ((advice_notes_as_caps.IndexOf("RETURN") >= 0) || (advice_notes_as_caps.IndexOf("RETAIN") >= 0)) { package.Tracking.Disposition_Advice = 1; } else { if (advice_notes_as_caps.IndexOf("WITHDRAW") >= 0) { package.Tracking.Disposition_Advice = 2; } else if (advice_notes_as_caps.IndexOf("DISCARD") >= 0) { package.Tracking.Disposition_Advice = 3; } } } // Do not overlay record in the future will be in the |c field if (record[599][0].has_Subfield('c')) { string record_overlay_notes = record[599][0]['c'].Trim(); if (record_overlay_notes.Length > 0) { if (package != null) { package.Tracking.Never_Overlay_Record = true; package.Tracking.Internal_Comments = record_overlay_notes; } thisBibInfo.Record.Record_Content_Source = thisBibInfo.Record.Record_Content_Source + " (" + record_overlay_notes + ")"; } } } } // Step through all of the identifiers foreach (MARC_Field thisRecord in record[35]) { // Only continue if there is an id in this record if (thisRecord.has_Subfield('a')) { // Was this the old NOTIS number? if (thisRecord.Indicators == "9 ") { thisBibInfo.Add_Identifier(thisRecord['a'], "NOTIS"); } // Was this the OCLC number? if ((oclc.Length == 0) && (thisRecord['a'].ToUpper().IndexOf("OCOLC") >= 0)) { thisBibInfo.Add_Identifier(thisRecord['a'].ToUpper().Replace("(OCOLC)", "").Trim(), "OCLC"); } // Was this the BIB ID? if ((package != null) && (thisRecord['a'].ToUpper().IndexOf("IID") >= 0)) { package.BibID = thisRecord['a'].ToUpper().Replace("(IID)", "").Trim(); } } } // Also, look for the old original OCLC in the 776 10 |w if (thisBibInfo.OCLC_Record.Length == 0) { foreach (MARC_Field thisRecord in record[776]) { if ((thisRecord.Indicators == "1 ") && (thisRecord.has_Subfield('w')) && (thisRecord['w'].ToUpper().IndexOf("OCOLC") >= 0)) { thisBibInfo.Add_Identifier(thisRecord['w'].ToUpper().Replace("(OCOLC)", "").Trim(), "OCLC"); } } } // Look for the LCCN in field 10 if (record.Get_Data_Subfield(10, 'a').Length > 0) thisBibInfo.Add_Identifier(record.Get_Data_Subfield(10, 'a'), "LCCN"); // Look for ISBN in field 20 if (record.Get_Data_Subfield(20, 'a').Length > 0) thisBibInfo.Add_Identifier(record.Get_Data_Subfield(20, 'a'), "ISBN"); // Look for ISSN in field 22 if (record.Get_Data_Subfield(22, 'a').Length > 0) thisBibInfo.Add_Identifier(record.Get_Data_Subfield(22, 'a'), "ISSN"); // Look for classification ( LCC ) in field 50 if (record.Get_Data_Subfield(50, 'a').Length > 0) { string subfield_3 = String.Empty; if (record.Get_Data_Subfield(50, '3').Length > 0) { subfield_3 = record.Get_Data_Subfield(50, '3'); } if (record.Get_Data_Subfield(50, 'b').Length > 0) thisBibInfo.Add_Classification(record.Get_Data_Subfield(50, 'a') + " " + record.Get_Data_Subfield(50, 'b'), "lcc").Display_Label = subfield_3; else thisBibInfo.Add_Classification(record.Get_Data_Subfield(50, 'a'), "lcc").Display_Label = subfield_3; } // Look for classification ( DDC ) in field 82 if (record.Get_Data_Subfield(82, 'a').Length > 0) { string subfield_2 = String.Empty; if (record.Get_Data_Subfield(82, '2').Length > 0) { subfield_2 = record.Get_Data_Subfield(82, '2'); } if (record.Get_Data_Subfield(82, 'b').Length > 0) thisBibInfo.Add_Classification(record.Get_Data_Subfield(82, 'a') + " " + record.Get_Data_Subfield(82, 'b'), "ddc").Edition = subfield_2; else thisBibInfo.Add_Classification(record.Get_Data_Subfield(82, 'a'), "ddc").Edition = subfield_2; } // Look for classification ( UDC ) in field 80 if (record.Get_Data_Subfield(80, 'a').Length > 0) { StringBuilder builder = new StringBuilder(); builder.Append(record.Get_Data_Subfield(80, 'a')); if (record.Get_Data_Subfield(80, 'b').Length > 0) builder.Append(" " + record.Get_Data_Subfield(80, 'b')); if (record.Get_Data_Subfield(80, 'x').Length > 0) builder.Append(" " + record.Get_Data_Subfield(80, 'x')); thisBibInfo.Add_Classification(builder.ToString(), "udc"); } // Look for classification ( NLM ) in field 60 if (record.Get_Data_Subfield(60, 'a').Length > 0) { if (record.Get_Data_Subfield(60, 'b').Length > 0) thisBibInfo.Add_Classification(record.Get_Data_Subfield(60, 'a') + " " + record.Get_Data_Subfield(60, 'b'), "nlm"); else thisBibInfo.Add_Classification(record.Get_Data_Subfield(60, 'a'), "nlm"); } // Look for classification ( SUDOCS or CANDOCS ) in field 86 foreach (MARC_Field thisRecord in record[84]) { string authority = String.Empty; switch (thisRecord.Indicator1) { case '0': authority = "sudocs"; break; case '1': authority = "candocs"; break; default: if (thisRecord.has_Subfield('2')) authority = thisRecord['2']; break; } if (thisRecord.has_Subfield('a')) thisBibInfo.Add_Classification(thisRecord['a'], authority); } // Look for other classifications in field 084 foreach (MARC_Field thisRecord in record[84]) { if (thisRecord.has_Subfield('a')) { string subfield_2 = String.Empty; if (thisRecord.has_Subfield('2')) { subfield_2 = thisRecord['2']; } if (thisRecord.has_Subfield('b')) thisBibInfo.Add_Classification(thisRecord['a'] + " " + thisRecord['b'], subfield_2); else thisBibInfo.Add_Classification(thisRecord['a'], subfield_2); } } // Look for any other identifiers in field 24 foreach (MARC_Field thisRecord in record[24]) { string identifier_source = String.Empty; switch (thisRecord.Indicator1) { case '0': identifier_source = "isrc"; break; case '1': identifier_source = "upc"; break; case '2': identifier_source = "ismn"; break; case '3': identifier_source = "ian"; break; case '4': identifier_source = "sici"; break; case '7': identifier_source = thisRecord['2']; break; } if (thisRecord.has_Subfield('d')) { thisBibInfo.Add_Identifier(thisRecord['a'] + " (" + thisRecord['d'] + ")", identifier_source); } else { thisBibInfo.Add_Identifier(thisRecord['a'], identifier_source); } } // Look for the ISSN in the 440 and 490 |x and LCCN in the 490 |l foreach (MARC_Field thisRecord in record[440]) { if (thisRecord.has_Subfield('x')) { thisBibInfo.Add_Identifier(thisRecord['x'], "ISSN"); } } foreach (MARC_Field thisRecord in record[490]) { if (thisRecord.has_Subfield('x')) { thisBibInfo.Add_Identifier(thisRecord['x'], "ISSN"); } if (thisRecord.has_Subfield('l')) { thisBibInfo.Add_Identifier(thisRecord['l'], "LCCN"); } } // Load all the MARC Content Sources (040) if (record.has_Field(40)) { if (record.Get_Data_Subfield(40, 'a').Length > 0) { thisBibInfo.Record.Add_MARC_Record_Content_Sources(record.Get_Data_Subfield(40, 'a')); } if (record.Get_Data_Subfield(40, 'b').Length > 0) { thisBibInfo.Record.Add_MARC_Record_Content_Sources(record.Get_Data_Subfield(40, 'b')); } if (record.Get_Data_Subfield(40, 'c').Length > 0) { thisBibInfo.Record.Add_MARC_Record_Content_Sources(record.Get_Data_Subfield(40, 'c')); } string modifying = record.Get_Data_Subfield(40, 'd'); if (modifying.Length > 0) { string[] modSplitter = modifying.Split("|".ToCharArray()); foreach (string split in modSplitter) { thisBibInfo.Record.Add_MARC_Record_Content_Sources(split.Trim()); } } if (record.Get_Data_Subfield(40, 'e').Length > 0) { thisBibInfo.Record.Description_Standard = record.Get_Data_Subfield(40, 'e'); } } // Add the spatial information ( 752, 662 ) Add_Hierarchical_Subject(thisBibInfo, record, 752); Add_Hierarchical_Subject(thisBibInfo, record, 662); // Add all the subjects ( 600... 658, excluding 655 ) Add_Personal_Name(thisBibInfo, record, 600, 4); Add_Corporate_Name(thisBibInfo, record, 610, 4); Add_Conference_Name(thisBibInfo, record, 611, 4); Add_Main_Title(thisBibInfo, record, 630, Title_Type_Enum.UNSPECIFIED, 1, 4); // Add all additional subjects // Letters indicate which fields are: TOPICAL, GEOGRAPHIC, TEMPORAL, GENRE, OCCUPATION Add_Subject(thisBibInfo, record, 648, "x", "z", "ay", "v", ""); Add_Subject(thisBibInfo, record, 650, "ax", "z", "y", "v", ""); Add_Subject(thisBibInfo, record, 651, "x", "az", "y", "v", ""); Add_Subject(thisBibInfo, record, 653, "a", "", "", "", ""); Add_Subject(thisBibInfo, record, 654, "av", "y", "z", "", ""); Add_Subject(thisBibInfo, record, 655, "x", "z", "y", "av", ""); Add_Subject(thisBibInfo, record, 656, "x", "z", "y", "v", "a"); Add_Subject(thisBibInfo, record, 657, "ax", "z", "y", "v", ""); Add_Subject(thisBibInfo, record, 690, "ax", "z", "y", "v", ""); Add_Subject(thisBibInfo, record, 691, "x", "az", "y", "v", ""); // Add the genres (655 -- again) foreach (MARC_Field thisRecord in record[655]) { if (thisRecord.has_Subfield('a')) { if (thisRecord.has_Subfield('2')) thisBibInfo.Add_Genre(thisRecord['a'], thisRecord['2']); else thisBibInfo.Add_Genre(thisRecord['a']); } } // Add the abbreviated title (210) foreach (MARC_Field thisRecord in record[210]) { if (thisRecord.has_Subfield('a')) { Title_Info abbrTitle = new Title_Info(thisRecord['a'], Title_Type_Enum.Abbreviated); if (thisRecord.has_Subfield('b')) abbrTitle.Subtitle = thisRecord['b']; thisBibInfo.Add_Other_Title(abbrTitle); } } // Add the title ( 245 |a, |b ) Add_Main_Title(thisBibInfo, record, 245, Title_Type_Enum.UNSPECIFIED, 2, 1); // Add the translated titles ( 242 ) Add_Main_Title(thisBibInfo, record, 242, Title_Type_Enum.Translated, 2, 2); // Add the alternative titles ( 246, 740 ) Add_Main_Title(thisBibInfo, record, 246, Title_Type_Enum.Alternative, 0, 2); Add_Main_Title(thisBibInfo, record, 740, Title_Type_Enum.Alternative, 1, 2); // Add the uniform titles (130, 240, 730 ) Add_Main_Title(thisBibInfo, record, 130, Title_Type_Enum.Uniform, 1, 2); Add_Main_Title(thisBibInfo, record, 240, Title_Type_Enum.Uniform, 2, 2); Add_Main_Title(thisBibInfo, record, 730, Title_Type_Enum.Uniform, 1, 2); // Add the series titles ( 440, 490 ) Add_Main_Title(thisBibInfo, record, 440, Title_Type_Enum.UNSPECIFIED, 2, 3); Add_Main_Title(thisBibInfo, record, 490, Title_Type_Enum.UNSPECIFIED, 0, 3); // Add the creators and contributors ( 100, 110 , 111, 700, 710, 711, 720, 796, 797 ) Add_Personal_Name(thisBibInfo, record, 100, 1); Add_Personal_Name(thisBibInfo, record, 700, 2); Add_Personal_Name(thisBibInfo, record, 796, 3); Add_Corporate_Name(thisBibInfo, record, 110, 1); Add_Corporate_Name(thisBibInfo, record, 710, 2); Add_Corporate_Name(thisBibInfo, record, 797, 3); Add_Conference_Name(thisBibInfo, record, 111, 1); Add_Conference_Name(thisBibInfo, record, 711, 2); // Add the Other Edition Value (775) foreach (MARC_Field thisRecord in record[775]) { Related_Item_Info otherEditionItem = new Related_Item_Info(); otherEditionItem.Relationship = Related_Item_Type_Enum.OtherVersion; if (thisRecord.has_Subfield('t')) otherEditionItem.Main_Title.Title = thisRecord['t']; if (thisRecord.has_Subfield('x')) otherEditionItem.Add_Identifier(thisRecord['x'], "issn"); if (thisRecord.has_Subfield('z')) otherEditionItem.Add_Identifier(thisRecord['z'], "isbn"); if (thisRecord.has_Subfield('w')) { string[] splitter = thisRecord['w'].Split("|".ToCharArray()); foreach (string thisSplitter in splitter) { if (thisSplitter.IndexOf("(DLC)sn") >= 0) { otherEditionItem.Add_Identifier(thisSplitter.Replace("(DLC)sn", "").Trim(), "lccn"); } if (thisSplitter.IndexOf("(OCoLC)") >= 0) { otherEditionItem.Add_Identifier(thisSplitter.Replace("(OCoLC)", "").Trim(), "oclc"); } } } thisBibInfo.Add_Related_Item(otherEditionItem); } // Add the Preceding Entry (780) foreach (MARC_Field thisRecord in record[780]) { Related_Item_Info precedingItem = new Related_Item_Info(); precedingItem.Relationship = Related_Item_Type_Enum.Preceding; if (thisRecord.has_Subfield('t')) precedingItem.Main_Title.Title = thisRecord['t']; if (thisRecord.has_Subfield('x')) precedingItem.Add_Identifier(thisRecord['x'], "issn"); if (thisRecord.has_Subfield('z')) precedingItem.Add_Identifier(thisRecord['z'], "isbn"); if (thisRecord.has_Subfield('w')) { string[] splitter = thisRecord['w'].Split("|".ToCharArray()); foreach (string thisSplitter in splitter) { if ((thisSplitter.IndexOf("(DLC)sn") >= 0) || (thisSplitter.IndexOf("(OCoLC)") >= 0)) { if (thisSplitter.IndexOf("(DLC)sn") >= 0) { precedingItem.Add_Identifier(thisSplitter.Replace("(DLC)sn", "").Trim(), "lccn"); } if (thisSplitter.IndexOf("(OCoLC)") >= 0) { precedingItem.Add_Identifier(thisSplitter.Replace("(OCoLC)", "").Trim(), "oclc"); } } else { precedingItem.Add_Identifier(thisSplitter.Trim(), String.Empty); } } if (thisRecord.has_Subfield('o')) { if (thisRecord['o'].IndexOf("(SobekCM)") >= 0) precedingItem.SobekCM_ID = thisRecord['o'].Replace("(SobekCM)", "").Trim(); } } thisBibInfo.Add_Related_Item(precedingItem); } // Add the Suceeding Entry (785) foreach (MARC_Field thisRecord in record[785]) { Related_Item_Info succeedingItem = new Related_Item_Info(); succeedingItem.Relationship = Related_Item_Type_Enum.Succeeding; if (thisRecord.has_Subfield('t')) succeedingItem.Main_Title.Title = thisRecord['t']; if (thisRecord.has_Subfield('x')) succeedingItem.Add_Identifier(thisRecord['x'], "issn"); if (thisRecord.has_Subfield('z')) succeedingItem.Add_Identifier(thisRecord['z'], "isbn"); if (thisRecord.has_Subfield('w')) { string[] splitter = thisRecord['w'].Split("|".ToCharArray()); foreach (string thisSplitter in splitter) { if ((thisSplitter.IndexOf("(DLC)sn") >= 0) || (thisSplitter.IndexOf("(OCoLC)") >= 0)) { if (thisSplitter.IndexOf("(DLC)sn") >= 0) { succeedingItem.Add_Identifier(thisSplitter.Replace("(DLC)sn", "").Trim(), "lccn"); } if (thisSplitter.IndexOf("(OCoLC)") >= 0) { succeedingItem.Add_Identifier(thisSplitter.Replace("(OCoLC)", "").Trim(), "oclc"); } } else { succeedingItem.Add_Identifier(thisSplitter.Trim(), String.Empty); } } } if (thisRecord.has_Subfield('o')) { if (thisRecord['o'].IndexOf("(SobekCM)") >= 0) succeedingItem.SobekCM_ID = thisRecord['o'].Replace("(SobekCM)", "").Trim(); } thisBibInfo.Add_Related_Item(succeedingItem); } // Add the Other Relationship Entry (787) foreach (MARC_Field thisRecord in record[787]) { Related_Item_Info otherRelationItem = new Related_Item_Info(); otherRelationItem.Relationship = Related_Item_Type_Enum.UNKNOWN; if (thisRecord.has_Subfield('t')) otherRelationItem.Main_Title.Title = thisRecord['t']; if (thisRecord.has_Subfield('x')) otherRelationItem.Add_Identifier(thisRecord['x'], "issn"); if (thisRecord.has_Subfield('z')) otherRelationItem.Add_Identifier(thisRecord['z'], "isbn"); if (thisRecord.has_Subfield('w')) { string[] splitter = thisRecord['w'].Split("|".ToCharArray()); foreach (string thisSplitter in splitter) { if ((thisSplitter.IndexOf("(DLC)sn") >= 0) || (thisSplitter.IndexOf("(OCoLC)") >= 0)) { if (thisSplitter.IndexOf("(DLC)sn") >= 0) { otherRelationItem.Add_Identifier(thisSplitter.Replace("(DLC)sn", "").Trim(), "lccn"); } if (thisSplitter.IndexOf("(OCoLC)") >= 0) { otherRelationItem.Add_Identifier(thisSplitter.Replace("(OCoLC)", "").Trim(), "oclc"); } } else { otherRelationItem.Add_Identifier(thisSplitter.Trim(), String.Empty); } } } if (thisRecord.has_Subfield('o')) { if (thisRecord['o'].IndexOf("(SobekCM)") >= 0) otherRelationItem.SobekCM_ID = thisRecord['o'].Replace("(SobekCM)", "").Trim(); } thisBibInfo.Add_Related_Item(otherRelationItem); } // Get the type of resource ( Leader/006, Leader/007, Serial 008/021 ) string marc_type = String.Empty; switch (record.Leader[6]) { case 'a': case 't': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book; marc_type = "BKS"; break; case 'e': case 'f': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Map; marc_type = "MAP"; break; case 'c': case 'd': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book; marc_type = "BKS"; break; case 'i': case 'j': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Audio; marc_type = "REC"; break; case 'k': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph; marc_type = "VIS"; break; case 'g': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Video; marc_type = "VIS"; break; case 'r': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Artifact; marc_type = "VIS"; break; case 'm': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival; marc_type = "COM"; break; case 'p': thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival; marc_type = "MIX"; break; case 'o': marc_type = "VIS"; thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival; break; } if (record.Leader[7] == 'c') thisBibInfo.Type.Collection = true; if (record.Leader[7] == 's') { thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Serial; if (field_008.Length > 22) { if (field_008[21] == 'n') thisBibInfo.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper; } marc_type = "CNR"; } thisBibInfo.EncodingLevel = record.Leader[17].ToString().Replace("^", "#").Replace(" ", "#"); if (field_008.Length > 35) { if ((marc_type == "BKS") || (marc_type == "CNR") || (marc_type == "MAP") || (marc_type == "COM") || (marc_type == "VIS")) { switch (field_008[28]) { case 'c': thisBibInfo.Add_Genre("multilocal government publication", "marcgt"); break; case 'f': thisBibInfo.Add_Genre("federal government publication", "marcgt"); break; case 'i': thisBibInfo.Add_Genre("international intergovernmental publication", "marcgt"); break; case 'l': thisBibInfo.Add_Genre("local government publication", "marcgt"); break; case 'm': thisBibInfo.Add_Genre("multistate government publication", "marcgt"); break; case 'o': thisBibInfo.Add_Genre("government publication", "marcgt"); break; case 's': thisBibInfo.Add_Genre("government publication (state, provincial, terriorial, dependent)", "marcgt"); break; case 'a': thisBibInfo.Add_Genre("government publication (autonomous or semiautonomous component)", "marcgt"); break; } } if ((marc_type == "BKS") || (marc_type == "CNR")) { string nature_of_contents = field_008.Substring(24, 4); if (nature_of_contents.IndexOf("a") >= 0) thisBibInfo.Add_Genre("abstract or summary", "marcgt"); if (nature_of_contents.IndexOf("b") >= 0) thisBibInfo.Add_Genre("bibliography", "marcgt"); if (nature_of_contents.IndexOf("c") >= 0) thisBibInfo.Add_Genre("catalog", "marcgt"); if (nature_of_contents.IndexOf("d") >= 0) thisBibInfo.Add_Genre("dictionary", "marcgt"); if (nature_of_contents.IndexOf("r") >= 0) thisBibInfo.Add_Genre("directory", "marcgt"); if (nature_of_contents.IndexOf("k") >= 0) thisBibInfo.Add_Genre("discography", "marcgt"); if (nature_of_contents.IndexOf("e") >= 0) thisBibInfo.Add_Genre("encyclopedia", "marcgt"); if (nature_of_contents.IndexOf("q") >= 0) thisBibInfo.Add_Genre("filmography", "marcgt"); if (nature_of_contents.IndexOf("f") >= 0) thisBibInfo.Add_Genre("handbook", "marcgt"); if (nature_of_contents.IndexOf("i") >= 0) thisBibInfo.Add_Genre("index", "marcgt"); if (nature_of_contents.IndexOf("w") >= 0) thisBibInfo.Add_Genre("law report or digest", "marcgt"); if (nature_of_contents.IndexOf("g") >= 0) thisBibInfo.Add_Genre("legal article", "marcgt"); if (nature_of_contents.IndexOf("v") >= 0) thisBibInfo.Add_Genre("legal case and case notes", "marcgt"); if (nature_of_contents.IndexOf("l") >= 0) thisBibInfo.Add_Genre("legislation", "marcgt"); if (nature_of_contents.IndexOf("j") >= 0) thisBibInfo.Add_Genre("patent", "marcgt"); if (nature_of_contents.IndexOf("p") >= 0) thisBibInfo.Add_Genre("programmed text", "marcgt"); if (nature_of_contents.IndexOf("o") >= 0) thisBibInfo.Add_Genre("review", "marcgt"); if (nature_of_contents.IndexOf("s") >= 0) thisBibInfo.Add_Genre("statistics", "marcgt"); if (nature_of_contents.IndexOf("n") >= 0) thisBibInfo.Add_Genre("survey of literature", "marcgt"); if (nature_of_contents.IndexOf("t") >= 0) thisBibInfo.Add_Genre("technical report", "marcgt"); if (nature_of_contents.IndexOf("m") >= 0) thisBibInfo.Add_Genre("theses", "marcgt"); if (nature_of_contents.IndexOf("z") >= 0) thisBibInfo.Add_Genre("treaty", "marcgt"); if (nature_of_contents.IndexOf("2") >= 0) thisBibInfo.Add_Genre("offprint", "marcgt"); if (nature_of_contents.IndexOf("y") >= 0) thisBibInfo.Add_Genre("yearbook", "marcgt"); if (nature_of_contents.IndexOf("5") >= 0) thisBibInfo.Add_Genre("calendar", "marcgt"); if (nature_of_contents.IndexOf("6") >= 0) thisBibInfo.Add_Genre("comic/graphic novel", "marcgt"); if (field_008[29] == '1') thisBibInfo.Add_Genre("conference publication", "marcgt"); } if (marc_type == "CNR") { if (field_008[21] == 'd') thisBibInfo.Add_Genre("database", "marcgt"); if (field_008[21] == 'l') thisBibInfo.Add_Genre("loose-leaf", "marcgt"); if (field_008[21] == 'n') thisBibInfo.Add_Genre("newspaper", "marcgt"); if (field_008[21] == 'p') thisBibInfo.Add_Genre("periodical", "marcgt"); if (field_008[21] == 's') thisBibInfo.Add_Genre("series", "marcgt"); if (field_008[21] == 'w') thisBibInfo.Add_Genre("web site", "marcgt"); // Get the frequency switch (field_008[18]) { case 'a': thisBibInfo.Origin_Info.Add_Frequency("annual", "marcfrequency"); break; case 'b': thisBibInfo.Origin_Info.Add_Frequency("bimonthly", "marcfrequency"); break; case 'c': thisBibInfo.Origin_Info.Add_Frequency("semiweekly", "marcfrequency"); break; case 'd': thisBibInfo.Origin_Info.Add_Frequency("daily", "marcfrequency"); break; case 'e': thisBibInfo.Origin_Info.Add_Frequency("biweekly", "marcfrequency"); break; case 'f': thisBibInfo.Origin_Info.Add_Frequency("semiannual", "marcfrequency"); break; case 'g': thisBibInfo.Origin_Info.Add_Frequency("biennial", "marcfrequency"); break; case 'h': thisBibInfo.Origin_Info.Add_Frequency("triennial", "marcfrequency"); break; case 'i': thisBibInfo.Origin_Info.Add_Frequency("three times a week", "marcfrequency"); break; case 'j': thisBibInfo.Origin_Info.Add_Frequency("three times a month", "marcfrequency"); break; case 'k': thisBibInfo.Origin_Info.Add_Frequency("continuously updated", "marcfrequency"); break; case 'm': thisBibInfo.Origin_Info.Add_Frequency("monthly", "marcfrequency"); break; case 'q': thisBibInfo.Origin_Info.Add_Frequency("quarterly", "marcfrequency"); break; case 's': thisBibInfo.Origin_Info.Add_Frequency("semimonthly", "marcfrequency"); break; case 't': thisBibInfo.Origin_Info.Add_Frequency("three times a year", "marcfrequency"); break; case 'w': thisBibInfo.Origin_Info.Add_Frequency("weekly", "marcfrequency"); break; case 'z': thisBibInfo.Origin_Info.Add_Frequency("other", "marcfrequency"); break; } // Get the regularity switch (field_008[19]) { case 'n': thisBibInfo.Origin_Info.Add_Frequency("normalized irregular", "marcfrequency"); break; case 'r': thisBibInfo.Origin_Info.Add_Frequency("regular", "marcfrequency"); break; case 'x': thisBibInfo.Origin_Info.Add_Frequency("completely irregular", "marcfrequency"); break; } } if (marc_type == "MAP") { // Get the form of item if (field_008[25] == 'e') thisBibInfo.Add_Genre("atlas", "marcgt"); if (field_008[25] == 'd') thisBibInfo.Add_Genre("globe", "marcgt"); if (field_008[25] == 'a') thisBibInfo.Add_Genre("single map", "marcgt"); if (field_008[25] == 'b') thisBibInfo.Add_Genre("map series", "marcgt"); if (field_008[25] == 'c') thisBibInfo.Add_Genre("map serial", "marcgt"); // Get the projection, if there is one if ((field_008.Substring(22, 2) != " ") && (field_008.Substring(22, 2) != "||") && (field_008.Substring(22, 2) != "^^") && (field_008.Substring(22, 2) != "||")) { Subject_Info_Cartographics cartographicsSubject = new Subject_Info_Cartographics(); cartographicsSubject.ID = "SUBJ008"; cartographicsSubject.Projection = field_008.Substring(22, 2); thisBibInfo.Add_Subject(cartographicsSubject); } // Get whether this is indexed if (field_008[31] == '1') { thisBibInfo.Add_Genre("indexed", "marcgt"); } } if (marc_type == "REC") { string nature_of_recording = field_008.Substring(30, 2); if (nature_of_recording.IndexOf("a") >= 0) thisBibInfo.Add_Genre("autobiography", "marcgt"); if (nature_of_recording.IndexOf("b") >= 0) thisBibInfo.Add_Genre("biography", "marcgt"); if (nature_of_recording.IndexOf("c") >= 0) thisBibInfo.Add_Genre("conference publication", "marcgt"); if (nature_of_recording.IndexOf("d") >= 0) thisBibInfo.Add_Genre("drama", "marcgt"); if (nature_of_recording.IndexOf("e") >= 0) thisBibInfo.Add_Genre("essay", "marcgt"); if (nature_of_recording.IndexOf("f") >= 0) thisBibInfo.Add_Genre("fiction", "marcgt"); if (nature_of_recording.IndexOf("o") >= 0) thisBibInfo.Add_Genre("folktale", "marcgt"); if (nature_of_recording.IndexOf("k") >= 0) thisBibInfo.Add_Genre("humor, satire", "marcgt"); if (nature_of_recording.IndexOf("i") >= 0) thisBibInfo.Add_Genre("instruction", "marcgt"); if (nature_of_recording.IndexOf("t") >= 0) thisBibInfo.Add_Genre("interview", "marcgt"); if (nature_of_recording.IndexOf("j") >= 0) thisBibInfo.Add_Genre("language instruction", "marcgt"); if (nature_of_recording.IndexOf("m") >= 0) thisBibInfo.Add_Genre("memoir", "marcgt"); if (nature_of_recording.IndexOf("p") >= 0) thisBibInfo.Add_Genre("poetry", "marcgt"); if (nature_of_recording.IndexOf("r") >= 0) thisBibInfo.Add_Genre("rehearsal", "marcgt"); if (nature_of_recording.IndexOf("g") >= 0) thisBibInfo.Add_Genre("reporting", "marcgt"); if (nature_of_recording.IndexOf("s") >= 0) thisBibInfo.Add_Genre("sound", "marcgt"); if (nature_of_recording.IndexOf("l") >= 0) thisBibInfo.Add_Genre("speech", "marcgt"); } if (marc_type == "COM") { switch (field_008[26]) { case 'e': thisBibInfo.Add_Genre("database", "marcgt"); break; case 'f': thisBibInfo.Add_Genre("font", "marcgt"); break; case 'g': thisBibInfo.Add_Genre("game", "marcgt"); break; case 'a': thisBibInfo.Add_Genre("numeric data", "marcgt"); break; case 'h': thisBibInfo.Add_Genre("sound", "marcgt"); break; } } if (marc_type == "VIS") { switch (field_008[33]) { case 'a': thisBibInfo.Add_Genre("art original", "marcgt"); break; case 'c': thisBibInfo.Add_Genre("art reproduction", "marcgt"); break; case 'n': thisBibInfo.Add_Genre("chart", "marcgt"); break; case 'd': thisBibInfo.Add_Genre("diorama", "marcgt"); break; case 'f': thisBibInfo.Add_Genre("filmstrip", "marcgt"); break; case 'o': thisBibInfo.Add_Genre("flash card", "marcgt"); break; case 'k': thisBibInfo.Add_Genre("graphic", "marcgt"); break; case 'b': thisBibInfo.Add_Genre("kit", "marcgt"); break; case 'p': thisBibInfo.Add_Genre("microscope slide", "marcgt"); break; case 'q': thisBibInfo.Add_Genre("model", "marcgt"); break; case 'm': thisBibInfo.Add_Genre("motion picture", "marcgt"); break; case 'i': thisBibInfo.Add_Genre("picture", "marcgt"); break; case 'r': thisBibInfo.Add_Genre("realia", "marcgt"); break; case 's': thisBibInfo.Add_Genre("slide", "marcgt"); break; case 'l': thisBibInfo.Add_Genre("technical drawing", "marcgt"); break; case 'w': thisBibInfo.Add_Genre("toy", "marcgt"); break; case 't': thisBibInfo.Add_Genre("transparency", "marcgt"); break; case 'v': thisBibInfo.Add_Genre("video recording", "marcgt"); break; } } if (marc_type == "BKS") { switch (field_008[34]) { case 'a': thisBibInfo.Add_Genre("autobiography", "marcgt"); break; case 'b': thisBibInfo.Add_Genre("individual biography", "marcgt"); break; case 'c': thisBibInfo.Add_Genre("collective biography", "marcgt"); break; } switch (field_008[33]) { case 'a': thisBibInfo.Add_Genre("comic strip", "marcgt"); break; case 'd': thisBibInfo.Add_Genre("drama", "marcgt"); break; case 'e': thisBibInfo.Add_Genre("essay", "marcgt"); break; case 'h': thisBibInfo.Add_Genre("humor, satire", "marcgt"); break; case 'i': thisBibInfo.Add_Genre("letter", "marcgt"); break; case 'p': thisBibInfo.Add_Genre("poetry", "marcgt"); break; case 'f': thisBibInfo.Add_Genre("novel", "marcgt"); break; case 'j': thisBibInfo.Add_Genre("short story", "marcgt"); break; case 's': thisBibInfo.Add_Genre("speech", "marcgt"); break; case '0': thisBibInfo.Add_Genre("non-fiction", "marcgt"); break; case '1': thisBibInfo.Add_Genre("fiction", "marcgt"); break; } if ((field_008[30] == 'h') || (field_008[31] == 'h')) { thisBibInfo.Add_Genre("history", "marcgt"); } if (field_008[30] == '1') { thisBibInfo.Add_Genre("festschrift", "marcgt"); } } } // Look for target audience (521) foreach (MARC_Field thisRecord in record[521]) { if (thisRecord.has_Subfield('a')) { if (thisRecord.has_Subfield('b')) { thisBibInfo.Add_Target_Audience(thisRecord['a'].Replace("[", "(").Replace("]", ")") + " [ " + thisRecord['b'].Replace("[", "(").Replace("]", ")") + " ]"); } else { thisBibInfo.Add_Target_Audience(thisRecord['a'].Replace("[", "(").Replace("]", ")")); } } } // Look for target audince (008/22) if ((marc_type == "BKS") || (marc_type == "COM") || (marc_type == "REC") || (marc_type == "SCO") || (marc_type == "VIS")) { if (field_008.Length > 22) { switch (field_008[22]) { case 'd': thisBibInfo.Add_Target_Audience("adolescent", "marctarget"); break; case 'e': thisBibInfo.Add_Target_Audience("adult", "marctarget"); break; case 'g': thisBibInfo.Add_Target_Audience("general", "marctarget"); break; case 'b': thisBibInfo.Add_Target_Audience("primary", "marctarget"); break; case 'c': thisBibInfo.Add_Target_Audience("pre-adolescent", "marctarget"); break; case 'j': thisBibInfo.Add_Target_Audience("juvenile", "marctarget"); break; case 'a': thisBibInfo.Add_Target_Audience("preschool", "marctarget"); break; case 'f': thisBibInfo.Add_Target_Audience("specialized", "marctarget"); break; } } } // Get any project codes ( 852 ) if ((package != null) && (package.Behaviors.Aggregation_Count == 0)) { foreach (MARC_Field thisRecord in record[852]) { if ((thisRecord.Indicators.Trim().Length == 0) && (thisRecord.has_Subfield('b'))) { string allCodes = thisRecord['b']; string[] splitAllCodes = allCodes.Split("|;".ToCharArray()); foreach (string splitCode in splitAllCodes) { package.Behaviors.Add_Aggregation(splitCode.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) { List<Coordinate_Point> points = new List<Coordinate_Point>(); string[] getKeys = HttpContext.Current.Request.Form.AllKeys; string latitude = String.Empty; foreach (string thisKey in getKeys) { if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_first") == 0) { latitude = HttpContext.Current.Request.Form[thisKey]; } if (thisKey.IndexOf(html_element_name.Replace("_", "") + "_second") != 0) continue; string longitude = HttpContext.Current.Request.Form[thisKey]; if ((latitude.Length > 0) && ( longitude.Length > 0 )) { double latitude_double, longitude_double; if ((Double.TryParse(latitude, out latitude_double)) && (Double.TryParse(longitude, out longitude_double))) points.Add(new Coordinate_Point(latitude_double, longitude_double)); latitude = String.Empty; } } // GEt the geospatial metadata module if (points.Count > 0) { GeoSpatial_Information geoInfo = Bib.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if (geoInfo == null) { geoInfo = new GeoSpatial_Information(); Bib.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, geoInfo); } foreach (Coordinate_Point thisPoint in points) { geoInfo.Add_Point( thisPoint ); } } }
/// <summary> Reads metadata from an open stream and saves to the provided item/package </summary> /// <param name="Input_Stream"> Open stream to read metadata from </param> /// <param name="Return_Package"> Package into which to read the metadata </param> /// <param name="Options"> Dictionary of any options which this metadata reader/writer may utilize </param> /// <param name="Error_Message">[OUTPUT] Explanation of the error, if an error occurs during reading </param> /// <returns>TRUE if successful, otherwise FALSE </returns> /// <remarks> Accepts two options: (1) 'METS_File_ReaderWriter:Minimize_File_Info' which tells whether the reader /// should just skip the file reading portion completely, and just read the bibliographic data ( Default is FALSE). /// (2) 'METS_File_ReaderWriter:Support_Divisional_dmdSec_amdSec' </remarks> public bool Read_Metadata(Stream Input_Stream, SobekCM_Item Return_Package, Dictionary<string, object> Options, out string Error_Message) { Error_Message = String.Empty; // Read the options from the dictionary of options bool minimizeFileInfo = false; if (Options != null) { if (Options.ContainsKey("METS_File_ReaderWriter:Minimize_File_Info")) bool.TryParse(Options["METS_File_ReaderWriter:Minimize_File_Info"].ToString(), out minimizeFileInfo); if (Options.ContainsKey("METS_File_ReaderWriter:Support_Divisional_dmdSec_amdSec")) { bool supportDivisionalDmdSecAmdSec; bool.TryParse(Options["METS_File_ReaderWriter:Support_Divisional_dmdSec_amdSec"].ToString(), out supportDivisionalDmdSecAmdSec); } } // Keep a list of all the files created, by file id, as additional data is gathered // from the different locations ( amdSec, fileSec, structmap ) Dictionary<string, SobekCM_File_Info> files_by_fileid = new Dictionary<string, SobekCM_File_Info>(); // For now, to do support for old way of doing downloads, build a list to hold // the deprecated download files List<Download_Info_DEPRECATED> deprecatedDownloads = new List<Download_Info_DEPRECATED>(); // Need to store the unanalyzed sections of dmdSec and amdSec until we determine if // the scope is the whole package, or the top-level div. We use lists as the value since // several sections may have NO id and the METS may even (incorrectly) have multiple sections // with the same ID Dictionary<string, List<Unanalyzed_METS_Section>> dmdSec = new Dictionary<string, List<Unanalyzed_METS_Section>>(); Dictionary<string, List<Unanalyzed_METS_Section>> amdSec = new Dictionary<string, List<Unanalyzed_METS_Section>>(); // Dictionaries store the link between dmdSec and amdSec id's to single divisions Dictionary<string, abstract_TreeNode> division_dmdids = new Dictionary<string, abstract_TreeNode>(); Dictionary<string, abstract_TreeNode> division_amdids = new Dictionary<string, abstract_TreeNode>(); try { // Try to read the XML XmlReader r = new XmlTextReader(Input_Stream); // Begin stepping through each of the XML nodes while (r.Read()) { #region Handle some processing instructions requested by Florida SUS's / FLVC (hope to deprecate) // Handle some processing instructions requested by Florida SUS's / FLVC if (r.NodeType == XmlNodeType.ProcessingInstruction) { if (r.Name.ToLower() == "fcla") { string value = r.Value.ToLower(); if (value.IndexOf("fda=\"yes\"") >= 0) { DAITSS_Info daitssInfo = Return_Package.Get_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY) as DAITSS_Info; if (daitssInfo == null) { daitssInfo = new DAITSS_Info(); Return_Package.Add_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY, daitssInfo); } daitssInfo.toArchive = true; } if (value.IndexOf("fda=\"no\"") >= 0) { DAITSS_Info daitssInfo2 = Return_Package.Get_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY) as DAITSS_Info; if (daitssInfo2 == null) { daitssInfo2 = new DAITSS_Info(); Return_Package.Add_Metadata_Module(GlobalVar.DAITSS_METADATA_MODULE_KEY, daitssInfo2); } daitssInfo2.toArchive = false; } } } #endregion if (r.NodeType == XmlNodeType.Element) { switch (r.Name.Replace("METS:", "")) { case "mets": if (r.MoveToAttribute("OBJID")) Return_Package.METS_Header.ObjectID = r.Value; break; case "metsHdr": read_mets_header(r.ReadSubtree(), Return_Package); break; case "dmdSec": case "dmdSecFedora": Unanalyzed_METS_Section thisDmdSec = store_dmd_sec(r.ReadSubtree()); if ( dmdSec.ContainsKey(thisDmdSec.ID)) dmdSec[thisDmdSec.ID].Add(thisDmdSec); else { List<Unanalyzed_METS_Section> newDmdSecList = new List<Unanalyzed_METS_Section>(); newDmdSecList.Add(thisDmdSec); dmdSec[thisDmdSec.ID] = newDmdSecList; } break; case "amdSec": Unanalyzed_METS_Section thisAmdSec = store_amd_sec(r.ReadSubtree()); if (amdSec.ContainsKey(thisAmdSec.ID)) amdSec[thisAmdSec.ID].Add(thisAmdSec); else { List<Unanalyzed_METS_Section> newAmdSecList = new List<Unanalyzed_METS_Section> {thisAmdSec}; amdSec[thisAmdSec.ID] = newAmdSecList; } break; case "fileSec": read_file_sec(r.ReadSubtree(), minimizeFileInfo, files_by_fileid); break; case "structMap": if (!r.IsEmptyElement) { read_struct_map(r.ReadSubtree(), Return_Package, files_by_fileid, division_dmdids, division_amdids); } break; case "behaviorSec": read_behavior_sec(r.ReadSubtree(), Return_Package); break; } } } // writer.Close(); r.Close(); } catch { // Do nothinh } Input_Stream.Close(); // Load some options for interoperability Dictionary<string, object> options = new Dictionary<string, object>(); options.Add("SobekCM_FileInfo_METS_amdSec_ReaderWriter:Files_By_FileID", files_by_fileid); #region Process the previously stored dmd sections // Now, process the previously stored dmd sections foreach (string thisDmdSecId in dmdSec.Keys) { // Could be multiple stored sections with the same (or no) ID foreach (Unanalyzed_METS_Section metsSection in dmdSec[thisDmdSecId]) { XmlReader reader = XmlReader.Create(new StringReader(metsSection.Inner_XML)); string mdtype = String.Empty; string othermdtype = String.Empty; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.ToLower().Replace("mets:", "") == "mdwrap") { if (reader.MoveToAttribute("MDTYPE")) mdtype = reader.Value; if (reader.MoveToAttribute("OTHERMDTYPE")) othermdtype = reader.Value; // NOt crazy about this part, but sometimes people do not use the OTHERMDTYPE // tag correctly, and just use the LABEL to differentiate the types if ((mdtype == "OTHER") && (othermdtype.Length == 0) && (reader.MoveToAttribute("LABEL"))) othermdtype = reader.Value; // Now, determine if this was a division-level read, or a package-wide if (division_dmdids.ContainsKey(thisDmdSecId)) { // Division level dmdSec // Get the division abstract_TreeNode node = division_dmdids[thisDmdSecId]; // Get an appropriate reader from the metadata configuration iDivision_dmdSec_ReaderWriter rw = ResourceObjectSettings.MetadataConfig.Get_Division_DmdSec_ReaderWriter(mdtype, othermdtype); // Is this dmdSec analyzable? (i.e., did we find an appropriate reader/writer?) if (rw == null) { node.Add_Unanalyzed_DMDSEC(metsSection); } else { rw.Read_dmdSec(reader, node, options); } } else { // Package-level dmdSec // Get an appropriate reader from the metadata configuration iPackage_dmdSec_ReaderWriter rw = ResourceObjectSettings.MetadataConfig.Get_Package_DmdSec_ReaderWriter(mdtype, othermdtype); // Is this dmdSec analyzable? (i.e., did we find an appropriate reader/writer?) if (rw == null) { Return_Package.Add_Unanalyzed_DMDSEC(metsSection); } else { rw.Read_dmdSec(reader, Return_Package, options); } } } } } } } #endregion #region Process the previously stored amd sections // Now, process the previously stored amd sections foreach (string thisAmdSecId in amdSec.Keys) { // Could be multiple stored sections with the same (or no) ID foreach (Unanalyzed_METS_Section metsSection in amdSec[thisAmdSecId]) { XmlReader reader = XmlReader.Create(new StringReader(metsSection.Inner_XML)); string mdtype = String.Empty; string othermdtype = String.Empty; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.ToLower().Replace("mets:", "") == "mdwrap") { if (reader.MoveToAttribute("MDTYPE")) mdtype = reader.Value; if (reader.MoveToAttribute("OTHERMDTYPE")) othermdtype = reader.Value; // Package-level amdSec // Get an appropriate reader from the metadata configuration iPackage_amdSec_ReaderWriter rw = ResourceObjectSettings.MetadataConfig.Get_Package_AmdSec_ReaderWriter(mdtype, othermdtype); // Is this amdSec analyzable? (i.e., did we find an appropriate reader/writer?) if (rw == null) { Return_Package.Add_Unanalyzed_AMDSEC(metsSection); } else { rw.Read_amdSec(reader, Return_Package, options); } } } } } } #endregion #region Special code used for moving downloads into the structure map system, and out of the old SobekCM METS section // For backward compatability, move from the old download system to the // new structure. This has to happen here at the end so that we have access // Were there some downloads added here? if (deprecatedDownloads.Count > 0) { // Get the list of downloads from the download tree List<SobekCM_File_Info> newStructureDownloads = Return_Package.Divisions.Download_Tree.All_Files; // Step through each download in the old system foreach (Download_Info_DEPRECATED thisDownload in deprecatedDownloads) { // Get the label (if there is one) string label = thisDownload.Label; string filename = thisDownload.FileName; bool found = false; if ((filename.Length == 0) && (thisDownload.File_ID.Length > 0)) { if (files_by_fileid.ContainsKey(thisDownload.File_ID)) { SobekCM_File_Info thisDownloadFile = files_by_fileid[thisDownload.File_ID]; filename = thisDownloadFile.System_Name; // Ensure a file of this name doesn't already exist foreach (SobekCM_File_Info existingFile in newStructureDownloads) { if (existingFile.System_Name.ToUpper().Trim() == filename.ToUpper().Trim()) { found = true; break; } } // Not found, so add it if (!found) { // Determine the label if it was missing or identical to file name if ((label.Length == 0) || (label == filename)) { label = filename; int first_period_index = label.IndexOf('.'); if (first_period_index > 0) { label = label.Substring(0, first_period_index); } } // Add the root to the download tree, if not existing Division_TreeNode newRoot; if (Return_Package.Divisions.Download_Tree.Roots.Count == 0) { newRoot = new Division_TreeNode("Main", String.Empty); Return_Package.Divisions.Download_Tree.Roots.Add(newRoot); } else { newRoot = (Division_TreeNode) Return_Package.Divisions.Download_Tree.Roots[0]; } // Add a page for this, with the provided label if there was one Page_TreeNode newPage = new Page_TreeNode(label); newRoot.Nodes.Add(newPage); // Now, add this existing file newPage.Files.Add(thisDownloadFile); // Add to the list of files added (in case it appears twice) newStructureDownloads.Add(thisDownloadFile); } } } else { // Ensure a file of this name doesn't already exist foreach (SobekCM_File_Info existingFile in newStructureDownloads) { if (existingFile.System_Name.ToUpper().Trim() == filename.ToUpper().Trim()) { found = true; break; } } // Not found, so add it if (!found) { // Determine the label if it was missing or identical to file name if ((label.Length == 0) || (label == filename)) { label = filename; int first_period_index = label.IndexOf('.'); if (first_period_index > 0) { label = label.Substring(0, first_period_index); } } // Add the root to the download tree, if not existing Division_TreeNode newRoot; if (Return_Package.Divisions.Download_Tree.Roots.Count == 0) { newRoot = new Division_TreeNode("Main", String.Empty); Return_Package.Divisions.Download_Tree.Roots.Add(newRoot); } else { newRoot = (Division_TreeNode) Return_Package.Divisions.Download_Tree.Roots[0]; } // Add a page for this, with the provided label if there was one Page_TreeNode newPage = new Page_TreeNode(label); newRoot.Nodes.Add(newPage); // Now, add this existing file SobekCM_File_Info thisDownloadFile = new SobekCM_File_Info(filename); newPage.Files.Add(thisDownloadFile); // Add to the list of files added (in case it appears twice) newStructureDownloads.Add(thisDownloadFile); } } } } #endregion #region Special code for distributing any page-level coordinate information read from the old SobekCM coordinate metadata // Get the geospatial data GeoSpatial_Information geoSpatial = Return_Package.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if ((geoSpatial != null) && ( geoSpatial.Polygon_Count > 0 )) { // See if any has the page sequence filled out, which means it came from the old metadata system bool redistribute = false; foreach (Coordinate_Polygon thisPolygon in geoSpatial.Polygons) { if (thisPolygon.Page_Sequence > 0) { redistribute = true; break; } } // If we need to redistribute, get started! if (redistribute) { // Get the pages, by sequence List<abstract_TreeNode> pagesBySequence = Return_Package.Divisions.Physical_Tree.Pages_PreOrder; List<Coordinate_Polygon> polygonsToRemove = new List<Coordinate_Polygon>(); // Step through each polygon foreach (Coordinate_Polygon thisPolygon in geoSpatial.Polygons) { if ((thisPolygon.Page_Sequence > 0) && ( thisPolygon.Page_Sequence <= pagesBySequence.Count )) { // Get the page abstract_TreeNode thisPageFromSequence = pagesBySequence[thisPolygon.Page_Sequence - 1]; // We can assume this page does not already have the coordiantes GeoSpatial_Information thisPageCoord = new GeoSpatial_Information(); thisPageFromSequence.Add_Metadata_Module( GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, thisPageCoord ); thisPageCoord.Add_Polygon( thisPolygon); // Remove this from the package-level coordinates polygonsToRemove.Add(thisPolygon); } } // Now, remove all polygons flagged to be removed foreach (Coordinate_Polygon thisPolygon in polygonsToRemove) { geoSpatial.Remove_Polygon(thisPolygon); } } } #endregion #region Copy any serial hierarchy in the Behaviors.Serial_Info part into the bib portion, if not there // Do some final cleanup on the SERIAL HIERARCHY if ((Return_Package.Behaviors.hasSerialInformation) && (Return_Package.Behaviors.Serial_Info.Count > 0)) { if ((Return_Package.Bib_Info.Series_Part_Info.Enum1.Length == 0) && (Return_Package.Bib_Info.Series_Part_Info.Year.Length == 0)) { if (Return_Package.Bib_Info.SobekCM_Type == TypeOfResource_SobekCM_Enum.Newspaper) { Return_Package.Bib_Info.Series_Part_Info.Year = Return_Package.Behaviors.Serial_Info[0].Display; Return_Package.Bib_Info.Series_Part_Info.Year_Index = Return_Package.Behaviors.Serial_Info[0].Order; if (Return_Package.Behaviors.Serial_Info.Count > 1) { Return_Package.Bib_Info.Series_Part_Info.Month = Return_Package.Behaviors.Serial_Info[1].Display; Return_Package.Bib_Info.Series_Part_Info.Month_Index = Return_Package.Behaviors.Serial_Info[1].Order; } } if (Return_Package.Behaviors.Serial_Info.Count > 2) { Return_Package.Bib_Info.Series_Part_Info.Day = Return_Package.Behaviors.Serial_Info[2].Display; Return_Package.Bib_Info.Series_Part_Info.Day_Index = Return_Package.Behaviors.Serial_Info[2].Order; } } else { Return_Package.Bib_Info.Series_Part_Info.Enum1 = Return_Package.Behaviors.Serial_Info[0].Display; Return_Package.Bib_Info.Series_Part_Info.Enum1_Index = Return_Package.Behaviors.Serial_Info[0].Order; if (Return_Package.Behaviors.Serial_Info.Count > 1) { Return_Package.Bib_Info.Series_Part_Info.Enum2 = Return_Package.Behaviors.Serial_Info[1].Display; Return_Package.Bib_Info.Series_Part_Info.Enum2_Index = Return_Package.Behaviors.Serial_Info[1].Order; } if (Return_Package.Behaviors.Serial_Info.Count > 2) { Return_Package.Bib_Info.Series_Part_Info.Enum3 = Return_Package.Behaviors.Serial_Info[2].Display; Return_Package.Bib_Info.Series_Part_Info.Enum3_Index = Return_Package.Behaviors.Serial_Info[2].Order; } } } #endregion 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> public static void Add_Data(SobekCM_Item Package, string Data, Mapped_Fields Field) { Data = Data.Trim(); if (Data.Length == 0) return; // Everything depends on the field which is mapped switch (Field) { case Mapped_Fields.None: // Do nothing, since no mapping exists break; case Mapped_Fields.Abstract: Package.Bib_Info.Add_Abstract(Data, "en"); break; case Mapped_Fields.Accession_Number: Package.Bib_Info.Add_Identifier(Data, "Accession Number"); break; case Mapped_Fields.Alternate_Title: Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.alternative); break; case Mapped_Fields.Alternate_Title_Language: 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; } break; case Mapped_Fields.Attribution: Package.Bib_Info.Add_Note(Data, Note_Type_Enum.funding); break; case Mapped_Fields.Aggregation_Code: Package.Behaviors.Add_Aggregation(Data.ToUpper()); break; case Mapped_Fields.Classification: Package.Bib_Info.Add_Classification(Data); break; case Mapped_Fields.Classification_Authority: if (Package.Bib_Info.Classifications_Count > 0) { Package.Bib_Info.Classifications[Package.Bib_Info.Classifications_Count - 1].Authority = Data; } break; case Mapped_Fields.Contributor: Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "contributor")); break; case Mapped_Fields.Creator: Package.Bib_Info.Add_Named_Entity(new Name_Info(Data, "creator")); break; case Mapped_Fields.Creator_Affiliation: if (Package.Bib_Info.Names_Count > 0) { Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Affiliation = Data; } break; case Mapped_Fields.Creator_Dates: if (Package.Bib_Info.Names_Count > 0) { Package.Bib_Info.Names[Package.Bib_Info.Names_Count - 1].Dates = Data; } break; case Mapped_Fields.Creator_Family_Name: 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); } break; case Mapped_Fields.Creator_Given_Name: 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); } break; case Mapped_Fields.Creator_Role: 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); } break; case Mapped_Fields.Cultural_Context: 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); break; case Mapped_Fields.Donor: Package.Bib_Info.Donor.Full_Name = Data; break; case Mapped_Fields.Genre: Package.Bib_Info.Add_Genre(Data); break; case Mapped_Fields.Genre_Authority: if (Package.Bib_Info.Genres_Count > 0) { Package.Bib_Info.Genres[Package.Bib_Info.Genres_Count - 1].Authority = Data; } break; case Mapped_Fields.Holding_Code: Package.Bib_Info.Location.Holding_Code = Data; break; case Mapped_Fields.Holding_Statement: Package.Bib_Info.Location.Holding_Name = Data; break; case Mapped_Fields.Identifier: Package.Bib_Info.Add_Identifier(Data); break; case Mapped_Fields.Identifier_Type: if (Package.Bib_Info.Identifiers_Count > 0) { Package.Bib_Info.Identifiers[Package.Bib_Info.Identifiers_Count - 1].Type = Data; } break; case Mapped_Fields.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); break; case Mapped_Fields.Language: Package.Bib_Info.Add_Language(Data); break; case Mapped_Fields.Publisher: Package.Bib_Info.Add_Publisher(Data); break; case Mapped_Fields.Pub_Place: Package.Bib_Info.Origin_Info.Add_Place(Data); break; case Mapped_Fields.Related_URL_Label: Package.Bib_Info.Location.Other_URL_Display_Label = Data; break; case Mapped_Fields.Related_URL_Link: Package.Bib_Info.Location.Other_URL = Data; break; case Mapped_Fields.Related_URL_Note: Package.Bib_Info.Location.Other_URL_Note = Data; break; case Mapped_Fields.Source_Code: Package.Bib_Info.Source.Code = Data; break; case Mapped_Fields.Source_Statement: Package.Bib_Info.Source.Statement = Data; break; case Mapped_Fields.Subject_Keyword: Package.Bib_Info.Add_Subject(Data, String.Empty); break; case Mapped_Fields.Subject_Keyword_Authority: if (Package.Bib_Info.Subjects_Count > 0) { Package.Bib_Info.Subjects[Package.Bib_Info.Subjects_Count - 1].Authority = Data; } break; case Mapped_Fields.BibID: Package.Bib_Info.BibID = Data.ToUpper(); break; case Mapped_Fields.VID: Package.Bib_Info.VID = Data.PadLeft(5, '0'); break; case Mapped_Fields.Date: 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; } } break; case Mapped_Fields.Edition: Package.Bib_Info.Origin_Info.Edition = Data; break; case Mapped_Fields.Format: Package.Bib_Info.Original_Description.Extent = Data; break; case Mapped_Fields.Note: Package.Bib_Info.Add_Note(Data); break; case Mapped_Fields.Rights: Package.Bib_Info.Access_Condition.Text = Data; break; case Mapped_Fields.Series_Title: Package.Bib_Info.SeriesTitle.Title = Data; Package.Behaviors.GroupTitle = Data; break; case Mapped_Fields.Type: string upper_data = Data.ToUpper(); if (upper_data.IndexOf("NEWSPAPER") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Newspaper; break; } if ((upper_data.IndexOf("MONOGRAPH") >= 0) || (upper_data.IndexOf("BOOK") >= 0)) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book; break; } if (upper_data.IndexOf("SERIAL") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Serial; break; } if (upper_data.IndexOf("AERIAL") >= 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"; break; } if (upper_data.IndexOf("PHOTO") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph; break; } if (upper_data.IndexOf("POSTCARD") >= 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"; break; } if (upper_data.IndexOf("MAP") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Map; break; } if (upper_data.IndexOf("TEXT") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Book; break; } if (upper_data.IndexOf("AUDIO") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Audio; break; } if (upper_data.IndexOf("VIDEO") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Video; break; } if ((upper_data.IndexOf("ARCHIVE") >= 0) || (upper_data.IndexOf("ARCHIVAL") >= 0)) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Archival; break; } if (upper_data.IndexOf("ARTIFACT") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Artifact; break; } if (upper_data.IndexOf("IMAGE") >= 0) { Package.Bib_Info.SobekCM_Type = TypeOfResource_SobekCM_Enum.Photograph; break; } // 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"; break; case Mapped_Fields.Uniform_Title: Package.Bib_Info.Add_Other_Title(Data, Title_Type_Enum.uniform); Package.Behaviors.GroupTitle = Data; break; case Mapped_Fields.Title: Package.Bib_Info.Main_Title.Title = Data; break; case Mapped_Fields.Title_Language: Package.Bib_Info.Main_Title.Language = Data; break; case Mapped_Fields.Aleph: Package.Bib_Info.Add_Identifier(Data, "ALEPH"); break; case Mapped_Fields.OCLC: Package.Bib_Info.Add_Identifier(Data, "OCLC"); break; case Mapped_Fields.LCCN: Package.Bib_Info.Add_Identifier(Data, "LCCN"); break; case Mapped_Fields.ISBN: Package.Bib_Info.Add_Identifier(Data, "ISBN"); break; case Mapped_Fields.ISSN: Package.Bib_Info.Add_Identifier(Data, "ISSN"); break; case Mapped_Fields.Sub_Title: Package.Bib_Info.Main_Title.Subtitle = Data; break; case Mapped_Fields.Volume: Package.Bib_Info.Series_Part_Info.Enum1 = Data; Package.Behaviors.Serial_Info.Add_Hierarchy(Package.Behaviors.Serial_Info.Count + 1, 1, Data); break; case Mapped_Fields.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); break; case Mapped_Fields.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 break; case Mapped_Fields.Year: Package.Bib_Info.Series_Part_Info.Year = Data; if (Data.Length == 1) year = "0" + Data; else year = Data; build_date_string(Package); break; case Mapped_Fields.Month: Package.Bib_Info.Series_Part_Info.Month = Data; month = Data; build_date_string(Package); break; case Mapped_Fields.Day: Package.Bib_Info.Series_Part_Info.Day = Data; day = Data; build_date_string(Package); break; case Mapped_Fields.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 { } break; case Mapped_Fields.Latitude: 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 { } break; case Mapped_Fields.Longitude: 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 { } break; case Mapped_Fields.Projection: Guarantee_Cartographics(Package).Projection = Data; break; case Mapped_Fields.Scale: Guarantee_Cartographics(Package).Scale = Data; break; //case Mapped_Fields.Spatial_Coverage: // Package.Bib_Info.Hierarchical_Spatials[0].Area = Data; // break; case Mapped_Fields.Icon_Wordmarks: case Mapped_Fields.Wordmark: // Package.Processing_Parameters.Icons.Add(Data, String.Empty); Package.Behaviors.Add_Wordmark(Data); break; case Mapped_Fields.Webskin: Package.Behaviors.Add_Web_Skin(Data); break; case Mapped_Fields.Temporal_Coverage: Package.Bib_Info.Add_Temporal_Subject(-1, -1, Data); break; case Mapped_Fields.Affiliation_University: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].University = Data; break; case Mapped_Fields.Affiliation_Campus: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Campus = Data; break; case Mapped_Fields.Affiliation_College: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].College = Data; break; case Mapped_Fields.Affiliation_Unit: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Unit = Data; break; case Mapped_Fields.Affiliation_Department: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Department = Data; break; case Mapped_Fields.Affiliation_Institute: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Institute = Data; break; case Mapped_Fields.Affiliation_Center: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Center = Data; break; case Mapped_Fields.Affiliation_Section: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].Section = Data; break; case Mapped_Fields.Affiliation_Subsection: Guarantee_Affiliation_Collection(Package); Package.Bib_Info.Affiliations[0].SubSection = Data; break; case Mapped_Fields.Geography_Continent: Guarantee_Hierarchical_Spatial(Package).Continent = Data; break; case Mapped_Fields.Geography_Country: Guarantee_Hierarchical_Spatial(Package).Country = Data; break; case Mapped_Fields.Geography_Province: Guarantee_Hierarchical_Spatial(Package).Province = Data; break; case Mapped_Fields.Geography_Region: Guarantee_Hierarchical_Spatial(Package).Region = Data; break; case Mapped_Fields.Geography_State: Guarantee_Hierarchical_Spatial(Package).State = Data; break; case Mapped_Fields.Geography_Territory: Guarantee_Hierarchical_Spatial(Package).Territory = Data; break; case Mapped_Fields.Geography_County: Guarantee_Hierarchical_Spatial(Package).County = Data; break; case Mapped_Fields.Geography_City: Guarantee_Hierarchical_Spatial(Package).City = Data; break; case Mapped_Fields.Geography_Island: Guarantee_Hierarchical_Spatial(Package).Island = Data; break; case Mapped_Fields.Geography_Area: Guarantee_Hierarchical_Spatial(Package).Area = Data; break; case Mapped_Fields.Copyright_Date: Package.Bib_Info.Origin_Info.Date_Copyrighted = Data; break; case Mapped_Fields.EAD_Name: Package.Bib_Info.Location.EAD_Name = Data; break; case Mapped_Fields.EAD_URL: Package.Bib_Info.Location.EAD_URL = Data; break; case Mapped_Fields.Internal_Comments: Package.Tracking.Internal_Comments = Data; break; case Mapped_Fields.Container_Box: Package.Bib_Info.Add_Container("Box", Data, 1); break; case Mapped_Fields.Container_Divider: Package.Bib_Info.Add_Container("Divider", Data, 2); break; case Mapped_Fields.Container_Folder: Package.Bib_Info.Add_Container("Folder", Data, 3); break; case Mapped_Fields.Viewer: switch (Data.ToUpper().Replace("_"," ").Replace(" ","")) { case "JPEG": case "JPG": Package.Behaviors.Add_View(View_Enum.JPEG); break; case "JPEG2000": case "JP2": Package.Behaviors.Add_View(View_Enum.JPEG2000); break; case "PAGETURNER": Package.Behaviors.Add_View(View_Enum.PAGE_TURNER); break; case "RELATEDIMAGES": case "THUMBNAILS": Package.Behaviors.Add_View(View_Enum.RELATED_IMAGES); break; } break; case Mapped_Fields.Visibility: switch (Data.ToUpper()) { case "DARK": Package.Behaviors.Dark_Flag = true; Package.Behaviors.IP_Restriction_Membership = -1; break; case "PRIVATE": Package.Behaviors.Dark_Flag = false; Package.Behaviors.IP_Restriction_Membership = -1; break; case "PUBLIC": Package.Behaviors.Dark_Flag = false; Package.Behaviors.IP_Restriction_Membership = 0; break; case "RESTRICTED": Package.Behaviors.Dark_Flag = false; Package.Behaviors.IP_Restriction_Membership = 1; break; } break; case Mapped_Fields.Tickler: Package.Behaviors.Add_Tickler(Data); break; case Mapped_Fields.Tracking_Box: Package.Tracking.Tracking_Box = Data; break; case Mapped_Fields.Born_Digital_Flag: if (Data.ToUpper().Trim() == "TRUE") Package.Tracking.Born_Digital = true; break; case Mapped_Fields.Material_Received_Date: DateTime materialReceivedDate; if (DateTime.TryParse(Data, out materialReceivedDate)) Package.Tracking.Material_Received_Date = materialReceivedDate; break; case Mapped_Fields.Materials: 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"); break; case Mapped_Fields.Measurements: VRACore_Info vraCoreInfo3 = Package.Get_Metadata_Module("VRACore") as VRACore_Info; if (vraCoreInfo3 == null) { vraCoreInfo3 = new VRACore_Info(); Package.Add_Metadata_Module("VRACore", vraCoreInfo3); } vraCoreInfo3.Add_Measurement(Data, String.Empty); break; case Mapped_Fields.State_Edition: 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); break; case Mapped_Fields.Style_Period: 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); break; case Mapped_Fields.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); break; } }
private bool Write_Metadata_Section(TextWriter Output_Stream, GeoSpatial_Information geoInfo, Dictionary<string, object> Options) { Output_Stream.WriteLine("<gml:FeatureCollection>"); //for points foreach (Coordinate_Point thisPoint in geoInfo.Points) { Output_Stream.WriteLine("<gml:featureMember>"); if (thisPoint.Label.Length > 0) Output_Stream.WriteLine("<gml:Point featureType=\"" + Convert_String_To_XML_Safe(thisPoint.FeatureType) + "\" label=\"" + Convert_String_To_XML_Safe(thisPoint.Label) + "\">"); else Output_Stream.WriteLine("<gml:Point featureType=\"" + Convert_String_To_XML_Safe(thisPoint.FeatureType) + "\">"); Output_Stream.Write("<gml:Coordinates>"); Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:Point>"); Output_Stream.WriteLine("</gml:featureMember>"); } //for lines foreach (Coordinate_Line thisLine in geoInfo.Lines) { Output_Stream.WriteLine("<gml:featureMember>"); if (thisLine.Label.Length > 0) Output_Stream.WriteLine("<gml:Line featureType=\"" + Convert_String_To_XML_Safe(thisLine.FeatureType) + "\" label=\"" + Convert_String_To_XML_Safe(thisLine.Label) + "\">"); else Output_Stream.WriteLine("<gml:Line featureType=\"" + Convert_String_To_XML_Safe(thisLine.FeatureType) + "\">"); Output_Stream.Write("<gml:Coordinates>"); foreach (Coordinate_Point thisPoint in thisLine.Points) //for each lat/long { Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); } Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:Line>"); Output_Stream.WriteLine("</gml:featureMember>"); } //for polygons foreach (Coordinate_Polygon thisPolygon in geoInfo.Polygons) //for each polygon with coordinates { Output_Stream.WriteLine("<gml:featureMember>"); if (thisPolygon.Label.Length > 0) Output_Stream.WriteLine("<gml:Polygon pageId=\"" + Convert_String_To_XML_Safe(thisPolygon.Page_Sequence.ToString()) + "\" featureType=\"" + Convert_String_To_XML_Safe(thisPolygon.FeatureType) + "\" polygonType=\"" + Convert_String_To_XML_Safe(thisPolygon.PolygonType) + "\" label=\"" + Convert_String_To_XML_Safe(thisPolygon.Label) + "\" rotation=\"" + thisPolygon.Rotation + "\">"); else Output_Stream.WriteLine("<gml:Polygon pageId=\"" + Convert_String_To_XML_Safe(thisPolygon.Page_Sequence.ToString()) + "\" featureType=\"" + Convert_String_To_XML_Safe(thisPolygon.FeatureType) + "\" polygonType=\"" + Convert_String_To_XML_Safe(thisPolygon.PolygonType) + "\" rotation=\"" + thisPolygon.Rotation + "\">"); Output_Stream.WriteLine("<gml:exterior>"); Output_Stream.WriteLine("<gml:LinearRing>"); Output_Stream.Write("<gml:Coordinates>"); foreach (Coordinate_Point thisPoint in thisPolygon.Edge_Points) //for each lat/long { Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); } Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:LinearRing>"); Output_Stream.WriteLine("</gml:exterior>"); Output_Stream.WriteLine("</gml:Polygon>"); Output_Stream.WriteLine("</gml:featureMember>"); } //for circles foreach (Coordinate_Circle thisCircle in geoInfo.Circles) { Output_Stream.WriteLine("<gml:featureMember>"); if (thisCircle.Label.Length > 0) Output_Stream.WriteLine("<gml:Circle featureType=\"" + Convert_String_To_XML_Safe(thisCircle.FeatureType) + "\" label=\"" + Convert_String_To_XML_Safe(thisCircle.Label) + "\" radius=\"" + Convert_String_To_XML_Safe(thisCircle.Radius.ToString()) + "\">"); else Output_Stream.WriteLine("<gml:Circle featureType=\"" + Convert_String_To_XML_Safe(thisCircle.FeatureType) + "\" radius=\"" + Convert_String_To_XML_Safe(thisCircle.Radius.ToString()) + "\">"); Output_Stream.Write("<gml:Coordinates>"); Output_Stream.Write(thisCircle.Latitude + "," + thisCircle.Longitude + " "); Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:Circle>"); Output_Stream.WriteLine("</gml:featureMember>"); } Output_Stream.WriteLine("</gml:FeatureCollection>"); return true; }
private bool Read_Metadata_Section(XmlReader Input_XmlReader, GeoSpatial_Information geoInfo, Dictionary<string, object> Options) { do // Loop through reading each XML node { // get the right division information based on node type if (Input_XmlReader.NodeType == XmlNodeType.Element) //if it is an element { switch (Input_XmlReader.Name) //get name of { case "gml:Point": //is a point //read the featureType string pointFeatureType = String.Empty; if (Input_XmlReader.MoveToAttribute("featureType")) pointFeatureType = Input_XmlReader.Value; //read the label string pointLabel = String.Empty; if (Input_XmlReader.MoveToAttribute("label")) pointLabel = Input_XmlReader.Value; //get the rest of the information do { //check to see if end of element if (Input_XmlReader.NodeType == XmlNodeType.EndElement && Input_XmlReader.Name == "gml:Point") break; //if it is an element if (Input_XmlReader.NodeType == XmlNodeType.Element) { //determine the name of that element switch (Input_XmlReader.Name) { //if it is the coordinates case "gml:Coordinates": Input_XmlReader.Read(); if ((Input_XmlReader.NodeType == XmlNodeType.Text) && (Input_XmlReader.Value.Trim().Length > 0)) { //get coordinates string result = Convert.ToString(Input_XmlReader.Value); var items = result.Split(','); double latitude = double.Parse(items[0]); double longitude = double.Parse(items[1]); //add point to geo obj geoInfo.Add_Point(latitude, longitude, pointLabel, pointFeatureType); } break; } } } while (Input_XmlReader.Read()); break; case "gml:Line": //is a line //read the featureType string lineFeatureType = String.Empty; if (Input_XmlReader.MoveToAttribute("featureType")) lineFeatureType = Input_XmlReader.Value; //read the label string lineLabel = String.Empty; if (Input_XmlReader.MoveToAttribute("label")) lineLabel = Input_XmlReader.Value; //get the rest do { //check to see if end of element if (Input_XmlReader.NodeType == XmlNodeType.EndElement && Input_XmlReader.Name == "gml:Line") break; //if it is an element if (Input_XmlReader.NodeType == XmlNodeType.Element) { //determine the name of that element switch (Input_XmlReader.Name) { //if it is the coordinates case "gml:Coordinates": Input_XmlReader.Read(); if ((Input_XmlReader.NodeType == XmlNodeType.Text) && (Input_XmlReader.Value.Trim().Length > 0)) { // Parse the string into a collection of doubles, which represents lats AND longs List<double> latLongs = new List<double>(); string rValue = Input_XmlReader.Value + ' '; StringBuilder coordinatePointBuilder = new StringBuilder(); for (int iterator = 0; iterator < rValue.Length; iterator++) { char rValueChar = rValue[iterator]; if ((Char.IsNumber(rValueChar)) || (rValueChar == '.') || (rValueChar == '-')) { coordinatePointBuilder.Append(rValueChar); } else { if (coordinatePointBuilder.Length > 0) { latLongs.Add(double.Parse(coordinatePointBuilder.ToString())); coordinatePointBuilder.Remove(0, coordinatePointBuilder.Length); } } } //create newline obj Coordinate_Line newline = new Coordinate_Line(); //add points, In pairs, assign new points to the line and add the line to the coordinate/item int i = 0; while ((i + 2) <= latLongs.Count) { string lineName = "line"; lineName += i; newline.Add_Point(latLongs[i], latLongs[i + 1], lineName); i += 2; } //add featureType newline.FeatureType = lineFeatureType; //add label newline.Label = lineLabel; //add line to geo obj geoInfo.Add_Line(newline); } break; } } } while (Input_XmlReader.Read()); break; case "gml:Polygon": //is polygon //read the featuretype string polygonFeatureType = String.Empty; if (Input_XmlReader.MoveToAttribute("featureType")) polygonFeatureType = Input_XmlReader.Value; //read the polygonType string polygonPolygonType = String.Empty; if (Input_XmlReader.MoveToAttribute("polygonType")) polygonPolygonType = Input_XmlReader.Value; //read the label string polygonLabel = String.Empty; if (Input_XmlReader.MoveToAttribute("label")) polygonLabel = Input_XmlReader.Value; //read the rotation double polygonRotation = 0; if (Input_XmlReader.MoveToAttribute("rotation")) polygonRotation = Convert.ToDouble(Input_XmlReader.Value); //get the rest do { //check to see if end of element if (Input_XmlReader.NodeType == XmlNodeType.EndElement && Input_XmlReader.Name == "gml:Polygon") break; //if it is an element if (Input_XmlReader.NodeType == XmlNodeType.Element) { //determine the name of that element switch (Input_XmlReader.Name) { //if it is the coordinates case "gml:Coordinates": Input_XmlReader.Read(); if ((Input_XmlReader.NodeType == XmlNodeType.Text) && (Input_XmlReader.Value.Trim().Length > 0)) { // Parse the string into a collection of doubles, which represents lats AND longs List<double> latLongs = new List<double>(); string rValue = Input_XmlReader.Value + ' '; StringBuilder coordinatePointBuilder = new StringBuilder(); for (int iterator = 0; iterator < rValue.Length; iterator++) { char rValueChar = rValue[iterator]; if ((Char.IsNumber(rValueChar)) || (rValueChar == '.') || (rValueChar == '-')) { coordinatePointBuilder.Append(rValueChar); } else { if (coordinatePointBuilder.Length > 0) { latLongs.Add(double.Parse(coordinatePointBuilder.ToString())); coordinatePointBuilder.Remove(0, coordinatePointBuilder.Length); } } } //create a newpoly obj Coordinate_Polygon newPoly = new Coordinate_Polygon(); //add the edgepoints, In pairs, assign new points to the polygon and add the polygon to the coordinate/item int i = 0; while ((i + 2) <= latLongs.Count) { newPoly.Add_Edge_Point(latLongs[i], latLongs[i + 1]); i += 2; } //add the featuretype newPoly.FeatureType = polygonFeatureType; //add the polygontype newPoly.PolygonType = polygonPolygonType; //add the label newPoly.Label = polygonLabel; //add the rotation newPoly.Rotation = polygonRotation; //add poly to geo obj geoInfo.Add_Polygon(newPoly); } break; } } } while (Input_XmlReader.Read()); break; case "gml:Circle": //is a circle //read the featureType string circleFeatureType = String.Empty; if (Input_XmlReader.MoveToAttribute("featureType")) circleFeatureType = Input_XmlReader.Value; //read the label string circleLabel = String.Empty; if (Input_XmlReader.MoveToAttribute("label")) circleLabel = Input_XmlReader.Value; //read the radius double circleRadius = 0; if (Input_XmlReader.MoveToAttribute("radius")) circleRadius = Convert.ToDouble(Input_XmlReader.Value); //get the rest do { //check to see if end of element if (Input_XmlReader.NodeType == XmlNodeType.EndElement && Input_XmlReader.Name == "gml:Circle") break; //if it is an element if (Input_XmlReader.NodeType == XmlNodeType.Element) { //determine the name of that element switch (Input_XmlReader.Name) { //if it is the coordinates case "gml:Coordinates": Input_XmlReader.Read(); if ((Input_XmlReader.NodeType == XmlNodeType.Text) && (Input_XmlReader.Value.Trim().Length > 0)) { string result = Convert.ToString(Input_XmlReader.Value); var items = result.Split(','); double latitude = double.Parse(items[0]); double longitude = double.Parse(items[1]); //create the circle Coordinate_Circle newCircle = new Coordinate_Circle(latitude, longitude, circleRadius, circleLabel, circleFeatureType); //add to object geoInfo.Add_Circle(newCircle); } break; } } } while (Input_XmlReader.Read()); break; } } } while (Input_XmlReader.Read()); return true; }
/// <summary> Stream to which to write the HTML for this subwriter </summary> /// <param name="Output"> Response stream for the item viewer to write directly to </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering </param> public override void Write_Main_Viewer_Section(TextWriter Output, Custom_Tracer Tracer) { try { //page content Output.WriteLine("<td>"); Output.WriteLine(" <input type=\"hidden\" id=\"action\" name=\"action\" value=\"\" /> "); Output.WriteLine(" <input type=\"hidden\" id=\"payload\" name=\"payload\" value=\"\" /> "); Output.WriteLine(" "); //loading blanket Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_blanket_loading\"><div>Loading...<br/><br/><img src=\"" + Static_Resources.Ajax_Loader_Img + "\"></div></div> "); Output.WriteLine(" "); //standard css Output.WriteLine(" <link rel=\"stylesheet\" href=\"" + Static_Resources.Jquery_Ui_Css + "\"/> "); Output.WriteLine(" <link rel=\"stylesheet\" href=\"" + Static_Resources.Jquery_Searchbox_Css + "\"/> "); //custom css Output.WriteLine(" <link rel=\"stylesheet\" href=\"" + Static_Resources.Sobekcm_Mapeditor_Css + "\"/> "); //standard js files Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Jquery_Ui_1_10_3_Custom_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Jquery_Migrate_1_1_1_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Jquery_Rotate_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Jquery_Knob_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Jquery_Json_2_4_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&key=AIzaSyCzliz5FjUlEI9D2605b33-etBrENSSBZM&libraries=drawing\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + CurrentMode.Base_URL + "default/scripts/mapeditor/gmaps-infobox.js\"></script> "); //custom js #region Output.WriteLine(" "); Output.WriteLine(" <script type=\"text/javascript\"> "); Output.WriteLine(" "); //setup server to client vars writer Output.WriteLine(" // Add Server Vars "); Output.WriteLine(" function initServerToClientVars(){ "); Output.WriteLine(" try{ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initServerToClientVars started...\"); "); Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.baseURL = \"" + CurrentMode.Base_URL + "\"; //add baseURL "); #region Get debug time (only while debugging) #if DEBUG string filePath = Assembly.GetCallingAssembly().Location; const int C_PE_HEADER_OFFSET = 60; const int C_LINKER_TIMESTAMP_OFFSET = 8; byte[] b = new byte[2048]; Stream s = null; try { s = new FileStream(filePath, FileMode.Open, FileAccess.Read); s.Read(b, 0, 2048); } catch (Exception) { Tracer.Add_Trace("Could Not Create Build Time"); throw; } finally { if (s != null) { s.Close(); } } int i2 = BitConverter.ToInt32(b, C_PE_HEADER_OFFSET); int secondsSince1970 = BitConverter.ToInt32(b, i2 + C_LINKER_TIMESTAMP_OFFSET); DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0); dt = dt.AddSeconds(secondsSince1970); dt = dt.AddHours(TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours); string debugTime_buildTimestamp = dt.ToString(); //get current timestamp TimeSpan span = (dt - new DateTime(1970, 1, 1, 0, 0, 0, 0)); double debugTime_unixTimestamp = span.TotalSeconds; Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.debugUnixTimeStamp = " + debugTime_unixTimestamp + "; //add debugTime "); Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.debugBuildTimeStamp = \"" + debugTime_buildTimestamp + "\"; //add debugTimestamp "); #endif #endregion //detemrine if debugging if (CurrentMode.Base_URL.Contains("localhost")) Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.debuggerOn = true; //debugger flag "); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.debuggerOn = false; //debugger flag "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initServerToClientVars completed...\"); "); Output.WriteLine(" }catch (err){ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[ERROR]: initServerToClientVars failed...\"); "); Output.WriteLine(" } "); Output.WriteLine(" } "); Output.WriteLine(" "); //config settings writer section Output.WriteLine(" // Add Config Settings Objects "); Output.WriteLine(" function initConfigSettings(){ "); Output.WriteLine(" try{ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initConfigSettings started...\"); "); //add collection configs #region //read collectionIds from config.xml file try { //get collectionIdsFromPage List<string> collectionIdsFromPage = new List<string>(); collectionIdsFromPage.Add(currentItem.Behaviors.Aggregations[0].Code); collectionIdsFromPage.Add(currentItem.BibID); //get settings List<string>[] settings = UI_ApplicationCache_Gateway.Settings.MapEditor.GetSettings(collectionIdsFromPage); //loop through settings for (int i = 0; i < settings[0].Count; i++) { //write to page Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES." + settings[0][i] + " = " + settings[1][i] + "; //adding " + settings[0][i]); } } catch (Exception) { Tracer.Add_Trace("Could Not Load MapEdit Configs"); throw; } #endregion Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initConfigSettings completed...\"); "); Output.WriteLine(" }catch (err){ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[ERROR]: initConfigSettings failed...\"); "); Output.WriteLine(" } "); Output.WriteLine(" } "); Output.WriteLine(" "); //geo objects writer section Output.WriteLine(" // Add Geo Objects "); Output.WriteLine(" function initGeoObjects(){ "); Output.WriteLine(" try{ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initGeoObjects started...\"); "); Output.WriteLine(" "); // Add the geo info if (currentItem != null) { allPolygons = new List<Coordinate_Polygon>(); allPoints = new List<Coordinate_Point>(); allLines = new List<Coordinate_Line>(); allCircles = new List<Coordinate_Circle>(); // Collect all the polygons, points, and lines #region GeoSpatial_Information geoInfo = currentItem.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if ((geoInfo != null) && (geoInfo.hasData)) { if (geoInfo.Polygon_Count > 0) { foreach (Coordinate_Polygon thisPolygon in geoInfo.Polygons) allPolygons.Add(thisPolygon); } if (geoInfo.Line_Count > 0) { foreach (Coordinate_Line thisLine in geoInfo.Lines) allLines.Add(thisLine); } if (geoInfo.Point_Count > 0) { foreach (Coordinate_Point thisPoint in geoInfo.Points) allPoints.Add(thisPoint); } if (geoInfo.Circle_Count > 0) { foreach (Coordinate_Circle thisCircle in geoInfo.Circles) allCircles.Add(thisCircle); } } #endregion // Collect all the pages and their data #region List<abstract_TreeNode> pages = currentItem.Divisions.Physical_Tree.Pages_PreOrder; for (int i = 0; i < pages.Count; i++) { abstract_TreeNode pageNode = pages[i]; geoInfo2 = pageNode.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if ((geoInfo2 != null) && (geoInfo2.hasData)) { if (geoInfo2.Polygon_Count > 0) { foreach (Coordinate_Polygon thisPolygon in geoInfo2.Polygons) { thisPolygon.Page_Sequence = (ushort)(i + 1); allPolygons.Add(thisPolygon); } } if (geoInfo2.Line_Count > 0) { foreach (Coordinate_Line thisLine in geoInfo2.Lines) { allLines.Add(thisLine); } } if (geoInfo2.Point_Count > 0) { foreach (Coordinate_Point thisPoint in geoInfo2.Points) { allPoints.Add(thisPoint); } } if (geoInfo2.Circle_Count > 0) { foreach (Coordinate_Circle thisCircle in geoInfo2.Circles) { allCircles.Add(thisCircle); } } } } #endregion // Add all the points to the page #region if (allPoints.Count > 0) { //add each point for (int point = 0; point < allPoints.Count; point++) { //add the featureType Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointFeatureType[" + point + "] = \"" + allPoints[point].FeatureType + "\";"); //add the label if (!String.IsNullOrEmpty(allPoints[point].Label)) Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointLabel[" + point + "] = \"" + Convert_String_To_XML_Safe(allPoints[point].Label) + "\"; "); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointLabel[" + point + "] = \"" + Convert_String_To_XML_Safe(currentItem.Bib_Title) + "\"; "); //add the center point Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointCenter[" + point + "] = new google.maps.LatLng(" + allPoints[point].Latitude + "," + allPoints[point].Longitude + "); "); //add the image url (if not a poi) if (allPoints[point].FeatureType != "poi") { try { //get image url myway string current_image_file = currentItem.Web.Source_URL + "/" + currentItem.VID + ".jpg"; Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointSourceURL[" + point + "] = \"" + current_image_file + "\"; "); } catch (Exception) { Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPointSourceURL[" + point + "] = \"\"; "); } } } Output.WriteLine(" MAPEDITOR.GLOBAL.displayIncomingPoints();"); Output.WriteLine(" "); } #endregion // Add all the circles to page #region if (allCircles.Count > 0) { //add each circle for (int circle = 0; circle < allCircles.Count; circle++) { //add the featuretype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingCircleFeatureType[" + circle + "] = \"" + allCircles[circle].FeatureType + "\";"); //add the label if (!String.IsNullOrEmpty(allCircles[circle].Label)) Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingCircleLabel[" + circle + "] = \"" + Convert_String_To_XML_Safe(allCircles[circle].Label) + "\"; "); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingCircleLabel[" + circle + "] = \"" + Convert_String_To_XML_Safe(currentItem.Bib_Title) + "\"; "); //add the center point Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingCircleCenter[" + circle + "] = new google.maps.LatLng(" + allCircles[circle].Latitude + "," + allCircles[circle].Longitude + "); "); //add the radius Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingCircleRadius[" + circle + "] = " + allCircles[circle].Radius + "; "); } Output.WriteLine(" "); Output.WriteLine(" MAPEDITOR.GLOBAL.displayIncomingCircles();"); Output.WriteLine(" "); } #endregion //Add all the Lines to page #region if (allLines.Count > 0) { //add each line for (int line = 0; line < allLines.Count; line++) { //add the featuretype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingLineFeatureType[" + line + "] = \"" + allLines[line].FeatureType + "\";"); //add the label if (!String.IsNullOrEmpty(allLines[line].Label)) Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingLineLabel[" + line + "] = \"" + Convert_String_To_XML_Safe(allLines[line].Label) + "\"; "); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingLineLabel[" + line + "] = \"" + Convert_String_To_XML_Safe(currentItem.Bib_Title) + "\"; "); //add the Line path Output.Write(" MAPEDITOR.GLOBAL.DEFINES.incomingLinePath[" + line + "] = [ "); int linePointCurrentCount = 0; foreach (Coordinate_Point thisPoint in allLines[line].Points) { linePointCurrentCount++; //determine if this is the last edge point (fixes the js issue where the trailing , could cause older browsers to crash) if (linePointCurrentCount == allLines[line].Point_Count) Output.Write("new google.maps.LatLng(" + thisPoint.Latitude + "," + thisPoint.Longitude + ") "); else Output.Write("new google.maps.LatLng(" + thisPoint.Latitude + "," + thisPoint.Longitude + "), "); } Output.WriteLine("];"); } Output.WriteLine(" "); Output.WriteLine(" MAPEDITOR.GLOBAL.displayIncomingLines();"); Output.WriteLine(" "); } #endregion // Add all the polygons to page #region //iteraters int totalAddedPolygonIndex = 0; //this holds the index counter or code/array counter (IE starts with 0) int totalAddedPolygonCount = 0; //this holds the real (human) count not the index (IE starts at 1) //go through and add the existing polygons if ((allPolygons.Count > 0) && (allPolygons[0].Edge_Points_Count > 1)) { #region Add overlays first! this fixes index issues wtotalAddedPolygonIndexhin (thus index is always id minus 1) foreach (Coordinate_Polygon itemPolygon in allPolygons) { //do this so long as it is not a poi if (itemPolygon.FeatureType != "poi") { //add the featureType if (itemPolygon.FeatureType == "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonFeatureType[" + totalAddedPolygonIndex + "] = \"main\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonFeatureType[" + totalAddedPolygonIndex + "] = \"" + itemPolygon.FeatureType + "\";"); //add the polygonType if (itemPolygon.PolygonType == "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPolygonType[" + totalAddedPolygonIndex + "] = \"rectangle\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPolygonType[" + totalAddedPolygonIndex + "] = \"" + itemPolygon.PolygonType + "\";"); //add the label if (Convert_String_To_XML_Safe(itemPolygon.Label) != "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"" + Convert_String_To_XML_Safe(itemPolygon.Label) + "\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"Page " + (totalAddedPolygonIndex + 1) + "\";"); //2do localize this text??? //create the bounds string string bounds = "new google.maps.LatLngBounds( "; string bounds1 = "new google.maps.LatLng"; string bounds2 = "new google.maps.LatLng"; int localtotalAddedPolygonIndex = 0; //determine how to handle bounds (2 edgepoints vs 4) foreach (Coordinate_Point thisPoint in itemPolygon.Edge_Points) { if (itemPolygon.Edge_Points_Count == 2) { if (localtotalAddedPolygonIndex == 0) bounds2 += "(" + Convert.ToString(thisPoint.Latitude) + "," + Convert.ToString(thisPoint.Longitude) + ")"; if (localtotalAddedPolygonIndex == 1) bounds1 += "(" + Convert.ToString(thisPoint.Latitude) + "," + Convert.ToString(thisPoint.Longitude) + ")"; localtotalAddedPolygonIndex++; } else { if (itemPolygon.Edge_Points_Count == 4) { if (localtotalAddedPolygonIndex == 0) bounds1 += "(" + Convert.ToString(thisPoint.Latitude) + "," + Convert.ToString(thisPoint.Longitude) + ")"; if (localtotalAddedPolygonIndex == 2) bounds2 += "(" + Convert.ToString(thisPoint.Latitude) + "," + Convert.ToString(thisPoint.Longitude) + ")"; localtotalAddedPolygonIndex++; } } } //finish bounds formatting bounds += bounds2 + ", " + bounds1; bounds += ")"; //add the bounds Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPath[" + totalAddedPolygonIndex + "] = " + bounds + ";"); //changed from bounds //add image url try { //your way List<SobekCM_File_Info> first_page_files = currentItem.Web.Pages_By_Sequence[totalAddedPolygonIndex].Files; string first_page_jpeg = String.Empty; foreach (SobekCM_File_Info thisFile in first_page_files) { if ((thisFile.System_Name.ToLower().IndexOf(".jpg") > 0) && (thisFile.System_Name.ToLower().IndexOf("thm.jpg") < 0)) { first_page_jpeg = thisFile.System_Name; break; } } string first_page_complete_url = "\"" + currentItem.Web.Source_URL + "/" + first_page_jpeg + "\""; ////polygonURL[totalAddedPolygonIndex] = first_page_complete_url; //polygonURL.Add(first_page_complete_url); Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = " + first_page_complete_url + ";"); } catch (Exception) { //there is no image Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = null;"); } //add rotation Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonRotation[" + totalAddedPolygonIndex + "] = " + itemPolygon.Rotation + ";"); //add page sequence Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPageId[" + totalAddedPolygonIndex + "] = " + itemPolygon.Page_Sequence + ";"); //increment the totalAddedPolygonCount (the actual number of polys added) totalAddedPolygonCount++; //iterate index totalAddedPolygonIndex++; } } #endregion #region Add the page info so we can convert to overlays in the app foreach (var page in pages) { if (totalAddedPolygonIndex < pages.Count) { //increment the totalAddedPolygonCount (the actual number of polys added) totalAddedPolygonCount++; //add featuretype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonFeatureType[" + totalAddedPolygonIndex + "] = \"hidden\";"); //add polygontype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPolygonType[" + totalAddedPolygonIndex + "] = \"hidden\";"); //add the label if (Convert_String_To_XML_Safe(pages[totalAddedPolygonIndex].Label) != "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"" + Convert_String_To_XML_Safe(pages[totalAddedPolygonIndex].Label) + "\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"Page " + (totalAddedPolygonIndex + 1) + "\";"); //2do localize this text??? //add page sequence Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPageId[" + totalAddedPolygonIndex + "] = " + totalAddedPolygonCount + ";"); //add image url try { //your way List<SobekCM_File_Info> first_page_files = currentItem.Web.Pages_By_Sequence[totalAddedPolygonIndex].Files; string first_page_jpeg = String.Empty; foreach (SobekCM_File_Info thisFile in first_page_files) { if ((thisFile.System_Name.ToLower().IndexOf(".jpg") > 0) && (thisFile.System_Name.ToLower().IndexOf("thm.jpg") < 0)) { first_page_jpeg = thisFile.System_Name; break; } } string first_page_complete_url = "\"" + currentItem.Web.Source_URL + "/" + first_page_jpeg + "\""; ////polygonURL[totalAddedPolygonIndex] = first_page_complete_url; //polygonURL.Add(first_page_complete_url); Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = " + first_page_complete_url + ";"); } catch (Exception) { //my way string current_image_file = currentItem.Web.Source_URL + "/" + currentItem.VID + ".jpg"; Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = \"" + current_image_file + "\"; "); //throw; } //increment index totalAddedPolygonIndex++; } } #endregion #region Add pois (order of adding is important) foreach (Coordinate_Polygon itemPolygon in allPolygons) { if (itemPolygon.FeatureType == "poi") { //add the featureType Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonFeatureType[" + totalAddedPolygonIndex + "] = \"" + itemPolygon.FeatureType + "\";"); //add the polygonType Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPolygonType[" + totalAddedPolygonIndex + "] = \"" + itemPolygon.PolygonType + "\";"); //add the label if (Convert_String_To_XML_Safe(itemPolygon.Label) != "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"" + Convert_String_To_XML_Safe(itemPolygon.Label) + "\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"Page " + (totalAddedPolygonIndex + 1) + "\";"); //2do localize this text??? //add the polygon path Output.Write(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPath[" + totalAddedPolygonIndex + "] = [ "); int edgePointCurrentCount = 0; foreach (Coordinate_Point thisPoint in itemPolygon.Edge_Points) { edgePointCurrentCount++; //determine if this is the last edge point (fixes the js issue where the trailing , could cause older browsers to crash) if (edgePointCurrentCount == itemPolygon.Edge_Points_Count) Output.Write("new google.maps.LatLng(" + thisPoint.Latitude + "," + thisPoint.Longitude + ") "); else Output.Write("new google.maps.LatLng(" + thisPoint.Latitude + "," + thisPoint.Longitude + "), "); } Output.WriteLine("];"); //iterate totalAddedPolygonIndex++; } } #endregion Output.WriteLine(" "); Output.WriteLine(" MAPEDITOR.GLOBAL.displayIncomingPolygons(); "); Output.WriteLine(" "); } else { #region Add the page info so we can convert to overlays in the app foreach (var page in pages) { if (totalAddedPolygonIndex < pages.Count) { //add featuretype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonFeatureType[" + totalAddedPolygonIndex + "] = \"hidden\";"); //add polygontype Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPolygonType[" + totalAddedPolygonIndex + "] = \"hidden\";"); //add the label if (Convert_String_To_XML_Safe(page.Label) != "") Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"" + Convert_String_To_XML_Safe(page.Label) + "\";"); else Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonLabel[" + totalAddedPolygonIndex + "] = \"Page " + (totalAddedPolygonIndex + 1) + "\";"); //2do localize this text??? //add page sequence Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonPageId[" + totalAddedPolygonIndex + "] = " + (totalAddedPolygonIndex + 1) + ";"); //add image url try { //your way List<SobekCM_File_Info> first_page_files = currentItem.Web.Pages_By_Sequence[totalAddedPolygonIndex].Files; string first_page_jpeg = String.Empty; foreach (SobekCM_File_Info thisFile in first_page_files) { if ((thisFile.System_Name.ToLower().IndexOf(".jpg") > 0) && (thisFile.System_Name.ToLower().IndexOf("thm.jpg") < 0)) { first_page_jpeg = thisFile.System_Name; break; } } string first_page_complete_url = "\"" + currentItem.Web.Source_URL + "/" + first_page_jpeg + "\""; ////polygonURL[totalAddedPolygonIndex] = first_page_complete_url; //polygonURL.Add(first_page_complete_url); Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = " + first_page_complete_url + ";"); } catch (Exception) { //my way string current_image_file = currentItem.Web.Source_URL + "/" + currentItem.VID + ".jpg"; Output.WriteLine(" MAPEDITOR.GLOBAL.DEFINES.incomingPolygonSourceURL[" + totalAddedPolygonIndex + "] = \"" + current_image_file + "\"; "); //throw; } totalAddedPolygonIndex++; } } #endregion Output.WriteLine(" "); Output.WriteLine(" MAPEDITOR.GLOBAL.displayIncomingPolygons(); "); Output.WriteLine(" "); } #endregion } Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[INFO]: initGeoObjects completed...\"); "); Output.WriteLine(" }catch (err){ "); Output.WriteLine(" MAPEDITOR.TRACER.addTracer(\"[ERROR]: initGeoObjects failed...\"); "); Output.WriteLine(" } "); Output.WriteLine(" }"); Output.WriteLine(" "); Output.WriteLine(" </script> "); Output.WriteLine(" "); #endregion //html page literal #region html page literat Output.WriteLine(" <div id=\"mapedit_container_message\"> "); Output.WriteLine(" <div id=\"content_message\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container_pane_0\"> "); Output.WriteLine(" <ul class=\"sf-menu\"> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header1\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_save\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_cancel\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_reset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header2\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header2Sub1\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_toggleMapControls\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_toggleToolbox\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_toggleToolbar\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header2Sub2\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_layerRoadmap\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_layerSatellite\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_layerHybrid\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_layerTerrain\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_layerCustom\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_layerReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header2Sub3\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_zoomIn\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_zoomOut\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_zoomReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header2Sub4\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_panUp\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_panRight\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_panDown\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_panLeft\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_panReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header3\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_manageSearch\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li> "); Output.WriteLine(" <div class=\"mapedit_container_search\"> "); Output.WriteLine(" <input id=\"content_menubar_searchField\" class=\"search\" type=\"text\" placeholder=\"\" onClick=\"this.select();\" /> "); Output.WriteLine(" <div id=\"content_menubar_searchButton\" class=\"searchActionHandle\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_manageItem\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_itemGetUserLocation\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_itemPlace\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_useSearchAsLocation\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_convertToOverlay\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_itemReset\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_itemDelete\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_manageOverlay\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_overlayGetUserLocation\"></a></li> "); Output.WriteLine(" <!--<li><a id=\"content_menubar_overlayEdit\"></a></li>--> "); Output.WriteLine(" <!--<li><a id=\"content_menubar_overlayPlace\"></a></li>--> "); Output.WriteLine(" <li><a id=\"content_menubar_overlayToggle\"></a></li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header3Sub3Sub1\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_rotationClockwise\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_rotationCounterClockwise\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_rotationReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header3Sub3Sub2\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_transparencyDarker\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_transparencyLighter\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_transparencyReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li><a id=\"content_menubar_overlayReset\" ></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_managePOI\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_poiGetUserLocation\"></a></li> "); Output.WriteLine(" <!--<li><a id=\"content_menubar_poiPlace\"></a></li>--> "); Output.WriteLine(" <li><a id=\"content_menubar_poiToggle\"></a></li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header3Sub4Sub1\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_poiMarker\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_poiCircle\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_poiRectangle\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_poiPolygon\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_poiLine\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li><a id=\"content_menubar_poiReset\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" <li> "); Output.WriteLine(" <a id=\"content_menubar_header4\"></a> "); Output.WriteLine(" <ul> "); Output.WriteLine(" <li><a id=\"content_menubar_documentation\"></a></li> "); Output.WriteLine(" <li><a id=\"content_menubar_reportAProblem\"></a></li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </li> "); Output.WriteLine(" </ul> "); Output.WriteLine(" </div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container_pane_1\"> "); Output.WriteLine(" <div id=\"mapedit_container_toolbar\"> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div id=\"content_toolbar_button_reset\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_toggleMapControls\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_toggleToolbox\" class=\"button\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerRoadmap\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerTerrain\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerSatellite\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerHybrid\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerCustom\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_layerReset\" class=\"button\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div id=\"content_toolbar_button_panUp\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_panLeft\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_panReset\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_panRight\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_panDown\" class=\"button\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div id=\"content_toolbar_button_zoomIn\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_zoomReset\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_zoomOut\" class=\"button\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div id=\"content_toolbar_button_manageItem\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_manageOverlay\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_managePOI\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbar_button_manageSearch\" class=\"button\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"toolbar_grouping\"> "); Output.WriteLine(" <div class=\"mapedit_container_search\"> "); Output.WriteLine(" <input id=\"content_toolbar_searchField\" class=\"search\" type=\"text\" placeholder=\"\" onClick=\"this.select();\" /> "); Output.WriteLine(" <div id=\"content_toolbar_searchButton\" class=\"searchActionHandle\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container\"> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container_toolbarGrabber\"> "); Output.WriteLine(" <div id=\"content_toolbarGrabber\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container_pane_2\"> "); Output.WriteLine(" "); Output.WriteLine(" <!--<div id=\"mapedit_container_message\"> "); Output.WriteLine(" <div id=\"content_message\"></div> "); Output.WriteLine(" </div>--> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"mapedit_container_toolbox\" class=\"ui-widget-content\"> "); Output.WriteLine(" <div id=\"mapedit_container_toolboxMinibar\"> "); Output.WriteLine(" <div id=\"content_minibar_icon\"></div> "); Output.WriteLine(" <div id=\"content_minibar_header\"></div> "); Output.WriteLine(" <div id=\"content_minibar_button_close\"></div> "); Output.WriteLine(" <div id=\"content_minibar_button_maximize\"></div> "); Output.WriteLine(" <div id=\"content_minibar_button_minimize\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"mapedit_container_toolboxTabs\"> "); Output.WriteLine(" <div id=\"content_toolbox_tab1_header\" class=\"tab-title\"></div> "); Output.WriteLine(" <div class=\"tab\"> "); Output.WriteLine(" <div class=\"toolbox_tab-content\"> "); Output.WriteLine(" <div id=\"mapedit_container_toolbox_tab1\"> "); Output.WriteLine(" <div id=\"mapedit_container_grid\"> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"content_toolbox_button_layerRoadmap\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_layerTerrain\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x half\"></div> "); Output.WriteLine(" <div class=\"x\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_panUp\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x\"></div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"content_toolbox_button_layerSatellite\" class=\"x y button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_layerHybrid\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x half\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_panLeft\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_panReset\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_panRight\" class=\"x button\"></div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"content_toolbox_button_layerCustom\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_layerReset\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x half\"></div> "); Output.WriteLine(" <div class=\"x\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_panDown\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x\"></div> "); Output.WriteLine(" "); Output.WriteLine(" <div class=\"x y half\"></div> "); Output.WriteLine(" "); Output.WriteLine(" <div id=\"content_toolbox_button_reset\" class=\"x y button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_toggleMapControls\" class=\"x button\"></div> "); Output.WriteLine(" <div class=\"x half\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_zoomIn\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_zoomReset\" class=\"x button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_zoomOut\" class=\"x button\"></div> "); Output.WriteLine(" "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"content_toolbox_tab2_header\" class=\"tab-title\"></div> "); Output.WriteLine(" <div class=\"tab\"> "); Output.WriteLine(" <div class=\"toolbox_tab-content\"> "); Output.WriteLine(" <div id=\"mapedit_container_toolbox_tab2\"> "); Output.WriteLine(" <div id=\"content_toolbox_button_manageItem\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_manageOverlay\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_managePOI\" class=\"button\"></div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div class=\"mapedit_container_search\"> "); Output.WriteLine(" <input id=\"content_toolbox_searchField\" class=\"search\" type=\"text\" placeholder=\"\" onClick=\"this.select();\" /> "); Output.WriteLine(" <div id=\"content_toolbox_searchButton\" class=\"searchActionHandle\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div id=\"searchResults_container\"> "); Output.WriteLine(" <div id=\"searchResults_scoll_container\"> "); Output.WriteLine(" <div id=\"searchResults_list\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"content_toolbox_tab3_header\" class=\"tab-title\"></div> "); Output.WriteLine(" <div id=\"itemACL\" class=\"tab\"> "); Output.WriteLine(" <div class=\"toolbox_tab-content\"> "); Output.WriteLine(" <div id=\"mapedit_container_toolbox_tab3\"> "); Output.WriteLine(" <div id=\"content_toolbox_button_itemPlace\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_itemGetUserLocation\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_useSearchAsLocation\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_convertToOverlay\" class=\"button\"></div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <textarea id=\"content_toolbox_posItem\" class=\"tab-field\" rows=\"2\" cols=\"24\" placeholder=\"Selected Lat/Long\"></textarea> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <textarea id=\"content_toolbox_rgItem\" class=\"tab-field\" rows=\"3\" cols=\"24\" placeholder=\"Nearest Address\"></textarea> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_saveItem\" > </div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_clearItem\" > </div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_deleteItem\" > </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"content_toolbox_tab4_header\" class=\"tab-title\"></div> "); Output.WriteLine(" <div id=\"overlayACL\" class=\"tab\"> "); Output.WriteLine(" <div class=\"toolbox_tab-content\"> "); Output.WriteLine(" <!--<div id=\"content_toolbox_button_overlayEdit\" class=\"button\"></div>--> "); Output.WriteLine(" <!--<div id=\"content_toolbox_button_overlayPlace\" class=\"button\"></div>--> "); Output.WriteLine(" <div id=\"content_toolbox_button_overlayGetUserLocation\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_overlayToggle\" class=\"button\"></div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div id=\"mapedit_container_toolbox_overlayTools\"> "); Output.WriteLine(" <div id=\"rotation\"> "); Output.WriteLine(" <div id=\"rotationKnob\"> "); Output.WriteLine(" <input class=\"knob\" data-displayInput=\"false\" data-width=\"68\" data-step=\"1\" data-min=\"0\" data-max=\"360\" data-cursor=true data-bgColor=\"#B2B2B2\" data-fgColor=\"#111111\" data-thickness=\"0.3\" value=\"0\"> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"mapedit_container_toolbox_rotationButtons\"> "); Output.WriteLine(" <div id=\"content_toolbox_rotationCounterClockwise\" class=\"button3\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_rotationReset\" class=\"button3\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_rotationClockwise\" class=\"button3\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"transparency\"> "); Output.WriteLine(" <div id=\"overlayTransparencySlider\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div id=\"overlayList_container\"> "); Output.WriteLine(" <div id=\"overlayList_scoll_container\"> "); Output.WriteLine(" <div id=\"overlayList\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_saveOverlay\" > </div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_clearOverlay\" > </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"content_toolbox_tab5_header\" class=\"tab-title\"></div> "); Output.WriteLine(" <div class=\"tab\"> "); Output.WriteLine(" <div class=\"toolbox_tab-content\"> "); Output.WriteLine(" <!--<div id=\"content_toolbox_button_placePOI\" class=\"button\"></div>--> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiGetUserLocation\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiToggle\" class=\"button\"></div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiMarker\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiCircle\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiRectangle\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiPolygon\" class=\"button\"></div> "); Output.WriteLine(" <div id=\"content_toolbox_button_poiLine\" class=\"button\"></div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div id=\"poiList_container\"> "); Output.WriteLine(" <div id=\"poiList_scoll_container\"> "); Output.WriteLine(" <div id=\"poiList\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div class=\"lineBreak\"></div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_savePOI\" > </div> "); Output.WriteLine(" <div class=\"button2\"> <input type=\"button\" id=\"content_toolbox_button_clearPOI\" > </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"googleMap\"></div> "); Output.WriteLine(" </div> "); Output.WriteLine(" </div> "); Output.WriteLine(" <div id=\"debugs\"></div> "); #endregion //custom js files (load order does matter) Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Sobekcm_Map_Editor_Js + "\"></script> "); Output.WriteLine(" <script type=\"text/javascript\" src=\"" + Static_Resources.Gmaps_MarkerwithLabel_Js + "\"></script> "); //must load after custom //end of custom content Output.WriteLine("</td>"); } catch (Exception ee) { throw new SobekCM_Traced_Exception("Could Not Create MapEdit Page", ee, Tracer); } }
/// <summary> parse and save incoming message </summary> /// <param name="SendData"> message from page </param> public static void SaveContent(String SendData) { try { //get rid of excess string SendData = SendData.Replace("{\"sendData\": \"", "").Replace("{\"sendData\":\"", ""); //validate if (SendData.Length == 0) return; //ensure we have a geo-spatial module in the digital resource GeoSpatial_Information resourceGeoInfo = currentItem.Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; //if there was no geo-spatial module if (resourceGeoInfo == null) { //create new geo-spatial module, if we do not already have one resourceGeoInfo = new GeoSpatial_Information(); currentItem.Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, resourceGeoInfo); } //get the pages List<abstract_TreeNode> pages = currentItem.Divisions.Physical_Tree.Pages_PreOrder; //create a new list of all the polygons for a resource item Dictionary<string, Page_TreeNode> pageLookup = new Dictionary<string, Page_TreeNode>(); int page_index = 1; foreach (var abstractTreeNode in pages) { var pageNode = (Page_TreeNode) abstractTreeNode; if (pageNode.Label.Length == 0) pageLookup["Page " + page_index] = pageNode; else pageLookup[pageNode.Label] = pageNode; page_index++; } //get the length of incoming message int index1 = SendData.LastIndexOf("~", StringComparison.Ordinal); //split into each save message string[] allSaves = SendData.Substring(0, index1).Split('~'); //hold save type handle string saveTypeHandle; //go through each item to save and check for ovelrays and item only not pois (ORDER does matter because these will be saved to db before pois are saved) foreach (string t in allSaves) { //get the length of save message int index2 = t.LastIndexOf("|", StringComparison.Ordinal); //split into save elements string[] ar = t.Substring(0, index2).Split('|'); //determine the save type handle (position 0 in array) saveTypeHandle = ar[0]; //determine the save type (position 1 in array) string saveType = ar[1]; //based on saveType, parse into objects if (saveTypeHandle == "save") { //handle save based on type switch (saveType) { #region item case "item": //prep incoming lat/long string[] temp1 = ar[2].Split(','); double temp1Lat = Convert.ToDouble(temp1[0].Replace("(", "")); double temp1Long = Convert.ToDouble(temp1[1].Replace(")", "")); ////clear specific geo obj //resourceGeoInfo.Clear_Specific(Convert.ToString(ar[3])); //clear all the previous mains featureTypes (this will work for an item because there is only ever one item) resourceGeoInfo.Clear_NonPOIs(); //add the point obj Coordinate_Point newPoint = new Coordinate_Point(temp1Lat, temp1Long, currentItem.METS_Header.ObjectID, "main"); //add the new point resourceGeoInfo.Add_Point(newPoint); //save to db SobekCM_Database.Save_Digital_Resource(currentItem, options); break; #endregion #region overlay case "overlay": //parse the array id of the page int arrayId = (Convert.ToInt32(ar[2]) - 1); //is this always true (minus one of the human page id)? //add the label to page obj pages[arrayId].Label = ar[3]; //get the geocoordinate object for that pageId GeoSpatial_Information pageGeo = pages[arrayId].Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; //if there isnt any already there if (pageGeo == null) { //create new pageGeo = new GeoSpatial_Information(); //create a polygon Coordinate_Polygon pagePolygon = new Coordinate_Polygon(); //prep incoming bounds string[] temp2 = ar[4].Split(','); pagePolygon.Clear_Edge_Points(); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[0].Replace("(", "")), Convert.ToDouble(temp2[1].Replace(")", ""))); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[2].Replace("(", "")), Convert.ToDouble(temp2[3].Replace(")", ""))); pagePolygon.Recalculate_Bounding_Box(); //add the rotation double result; pagePolygon.Rotation = Double.TryParse(ar[6], out result) ? result : 0; //add the featureType (explicitly add to make sure it is there) pagePolygon.FeatureType = "main"; //add the label pagePolygon.Label = ar[3]; //add the polygon type pagePolygon.PolygonType = "rectangle"; //add polygon to pagegeo pageGeo.Add_Polygon(pagePolygon); } else { try { //get current polygon info Coordinate_Polygon pagePolygon = pageGeo.Polygons[0]; //prep incoming bounds string[] temp2 = ar[4].Split(','); pagePolygon.Clear_Edge_Points(); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[0].Replace("(", "")), Convert.ToDouble(temp2[1].Replace(")", ""))); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[2].Replace("(", "")), Convert.ToDouble(temp2[3].Replace(")", ""))); pagePolygon.Recalculate_Bounding_Box(); //add the rotation double result; pagePolygon.Rotation = Double.TryParse(ar[6], out result) ? result : 0; //add the featureType (explicitly add to make sure it is there) pagePolygon.FeatureType = "main"; //add the label pagePolygon.Label = ar[3]; //add the polygon type pagePolygon.PolygonType = "rectangle"; //clear all previous nonPOIs for this page (NOTE: this will only work if there is only one main page item) pageGeo.Clear_NonPOIs(); //add polygon to pagegeo pageGeo.Add_Polygon(pagePolygon); } catch (Exception) { //there were no polygons try { //make a polygon Coordinate_Polygon pagePolygon = new Coordinate_Polygon(); //prep incoming bounds string[] temp2 = ar[4].Split(','); pagePolygon.Clear_Edge_Points(); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[0].Replace("(", "")), Convert.ToDouble(temp2[1].Replace(")", ""))); pagePolygon.Add_Edge_Point(Convert.ToDouble(temp2[2].Replace("(", "")), Convert.ToDouble(temp2[3].Replace(")", ""))); pagePolygon.Recalculate_Bounding_Box(); //add the rotation double result; pagePolygon.Rotation = Double.TryParse(ar[6], out result) ? result : 0; //add the featureType (explicitly add to make sure it is there) pagePolygon.FeatureType = "main"; //add the label pagePolygon.Label = ar[3]; //add the polygon type pagePolygon.PolygonType = "rectangle"; //clear all previous nonPOIs for this page (NOTE: this will only work if there is only one main page item) pageGeo.Clear_NonPOIs(); //add polygon to pagegeo pageGeo.Add_Polygon(pagePolygon); } catch (Exception) { //welp... } } } //add the pagegeo obj pages[arrayId].Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, pageGeo); //save to db SobekCM_Database.Save_Digital_Resource(currentItem, options); break; #endregion } } else { if (saveTypeHandle == "delete") { switch (saveType) { #region item case "item": //clear nonpoipoints resourceGeoInfo.Clear_NonPOIPoints(); //save to db SobekCM_Database.Save_Digital_Resource(currentItem, options); break; #endregion #region overlay case "overlay": try { //parse the array id of the page int arrayId = (Convert.ToInt32(ar[2]) - 1); //is this always true (minus one of the human page id)? //get the geocoordinate object for that pageId GeoSpatial_Information pageGeo = pages[arrayId].Get_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY) as GeoSpatial_Information; if (pageGeo != null) { Coordinate_Polygon pagePolygon = pageGeo.Polygons[0]; //reset edgepoints pagePolygon.Clear_Edge_Points(); //reset rotation pagePolygon.Rotation = 0; //add the featureType (explicitly add to make sure it is there) pagePolygon.FeatureType = "hidden"; //add the polygon type pagePolygon.PolygonType = "hidden"; //clear all previous nonPOIs for this page (NOTE: this will only work if there is only one main page item) pageGeo.Clear_NonPOIs(); //add polygon to pagegeo pageGeo.Add_Polygon(pagePolygon); } ////if there isnt any already there //if (pageGeo != null) // pageGeo.Remove_Polygon(pageGeo.Polygons[0]); //add the pagegeo obj pages[arrayId].Add_Metadata_Module(GlobalVar.GEOSPATIAL_METADATA_MODULE_KEY, pageGeo); //save to db SobekCM_Database.Save_Digital_Resource(currentItem, options); } catch (Exception) { // } break; #endregion } } } } //check to see if save poi clear has already been fired... bool firedOnce = true; //go through each item to save and check for pois only foreach (string t in allSaves) { //get the length of save message int index2 = t.LastIndexOf("|", StringComparison.Ordinal); //split into save elements string[] ar = t.Substring(0, index2).Split('|'); //determine the save type handle (position 0 in array) saveTypeHandle = ar[0]; //determine the save type (position 1 in array) string saveType = ar[1]; //based on saveType, parse into objects if (saveTypeHandle == "save") { //handle save based on type switch (saveType) { #region poi case "poi": //fixes bug if (firedOnce) { //clear previous poi points resourceGeoInfo.Clear_POIs(); firedOnce = false; } //get specific geometry (KML Standard) switch (ar[2]) { case "marker": //prep incoming lat/long string[] temp2 = ar[4].Split(','); double temp2Lat = Convert.ToDouble(temp2[0].Replace("(", "")); double temp2Long = Convert.ToDouble(temp2[1].Replace(")", "")); //add the new point resourceGeoInfo.Add_Point(temp2Lat, temp2Long, ar[3], "poi"); break; case "circle": //create new circle Coordinate_Circle poiCircle = new Coordinate_Circle {Label = ar[3], Radius = Convert.ToDouble(ar[5]), FeatureType = "poi"}; //add the incoming lat/long string[] temp3 = ar[4].Split(','); poiCircle.Latitude = Convert.ToDouble(temp3[0].Replace("(", "")); poiCircle.Longitude = Convert.ToDouble(temp3[1].Replace(")", "")); //add to the resource obj resourceGeoInfo.Add_Circle(poiCircle); break; case "rectangle": //create new polygon Coordinate_Polygon poiRectangle = new Coordinate_Polygon {Label = ar[3], FeatureType = "poi", PolygonType = "rectangle"}; //add the incoming bounds string[] temp4 = ar[4].Split(','); poiRectangle.Add_Edge_Point(Convert.ToDouble(temp4[0].Replace("(", "")), Convert.ToDouble(temp4[1].Replace(")", ""))); poiRectangle.Add_Edge_Point(Convert.ToDouble(temp4[2].Replace("(", "")), Convert.ToDouble(temp4[3].Replace(")", ""))); poiRectangle.Recalculate_Bounding_Box(); //add to resource obj resourceGeoInfo.Add_Polygon(poiRectangle); break; case "polygon": //create new polygon Coordinate_Polygon poiPolygon = new Coordinate_Polygon {Label = ar[3], FeatureType = "poi"}; //add the edge points for (int i2 = 5; i2 < ar.Length; i2++) { string[] temp5 = ar[i2].Split(','); poiPolygon.Add_Edge_Point(Convert.ToDouble(temp5[0].Replace("(", "")), Convert.ToDouble(temp5[1].Replace(")", ""))); } //add the polygon resourceGeoInfo.Add_Polygon(poiPolygon); break; case "polyline": //create new line Coordinate_Line poiLine = new Coordinate_Line {Label = ar[3], FeatureType = "poi"}; //add the edge points for (int i2 = 5; i2 < ar.Length; i2++) { string[] temp5 = ar[i2].Split(','); poiLine.Add_Point(Convert.ToDouble(temp5[0].Replace("(", "")), Convert.ToDouble(temp5[1].Replace(")", "")), ""); } //add the line resourceGeoInfo.Add_Line(poiLine); break; } break; #endregion } } } #region prep saving dir //create inprocessing directory string userInProcessDirectory = UI_ApplicationCache_Gateway.Settings.User_InProcess_Directory( currentUser, "mapwork"); string backupDirectory = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + currentItem.Web.AssocFilePath + UI_ApplicationCache_Gateway.Settings.Resources.Backup_Files_Folder_Name; //ensure the user's process directory exists if (!Directory.Exists(userInProcessDirectory)) Directory.CreateDirectory(userInProcessDirectory); //ensure the backup directory exists if (!Directory.Exists(backupDirectory)) Directory.CreateDirectory(backupDirectory); string resource_directory = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + currentItem.Web.AssocFilePath; string current_mets = resource_directory + currentItem.METS_Header.ObjectID + ".mets.xml"; string backup_mets = backupDirectory + "\\" + currentItem.METS_Header.ObjectID + "_" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + ".mets.xml.BAK"; string metsInProcessFile = userInProcessDirectory + "\\" + currentItem.BibID + "_" + currentItem.VID + ".mets.xml"; #endregion #region Save mets and db //save the item to the temporary location currentItem.Save_METS(userInProcessDirectory + "\\" + currentItem.BibID + "_" + currentItem.VID + ".mets.xml"); //move temp mets to prod File.Copy(metsInProcessFile, current_mets, true); //delete in process mets file File.Delete(metsInProcessFile); //create a backup mets file File.Copy(current_mets, backup_mets, true); #endregion } catch (Exception) { //Custom_Tracer.Add_Trace("MapEdit Save Error"); throw new ApplicationException("MapEdit Save Error"); //throw; } }
private bool Write_Metadata_Section(TextWriter Output_Stream, GeoSpatial_Information geoInfo, Dictionary<string, object> Options) { Output_Stream.WriteLine("<gml:FeatureCollection>"); //for points foreach (Coordinate_Point thisPoint in geoInfo.Points) { Output_Stream.WriteLine("<gml:featureMember>"); if (thisPoint.Label.Length > 0) Output_Stream.WriteLine("<gml:Point label=\"" + Convert_String_To_XML_Safe(thisPoint.Label) + "\">"); else Output_Stream.WriteLine("<gml:Point>"); Output_Stream.Write("<gml:Coordinates>"); Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:Point>"); Output_Stream.WriteLine("</gml:featureMember>"); } //for lines foreach (Coordinate_Line thisLine in geoInfo.Lines) { Output_Stream.WriteLine("<gml:featureMember>"); if (thisLine.Label.Length > 0) Output_Stream.WriteLine("<gml:Line label=\"" + Convert_String_To_XML_Safe(thisLine.Label) + "\">"); else Output_Stream.WriteLine("<gml:Line>"); Output_Stream.Write("<gml:Coordinates>"); foreach (Coordinate_Point thisPoint in thisLine.Points) //for each lat/long { Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); } Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:Line>"); Output_Stream.WriteLine("</gml:featureMember>"); } //for polygons foreach (Coordinate_Polygon thisPolygon in geoInfo.Polygons) //for each polygon with coordinates { Output_Stream.WriteLine("<gml:featureMember>"); if (thisPolygon.Label.Length > 0) Output_Stream.WriteLine("<gml:Polygon label=\"" + Convert_String_To_XML_Safe(thisPolygon.Label) + "\">"); else Output_Stream.WriteLine("<gml:Polygon>"); Output_Stream.WriteLine("<gml:exterior>"); Output_Stream.WriteLine("<gml:LinearRing>"); Output_Stream.Write("<gml:Coordinates>"); foreach (Coordinate_Point thisPoint in thisPolygon.Edge_Points) //for each lat/long { Output_Stream.Write(thisPoint.Latitude + "," + thisPoint.Longitude + " "); } Output_Stream.WriteLine("</gml:Coordinates>"); Output_Stream.WriteLine("</gml:LinearRing>"); Output_Stream.WriteLine("</gml:exterior>"); Output_Stream.WriteLine("</gml:Polygon>"); Output_Stream.WriteLine("</gml:featureMember>"); } Output_Stream.WriteLine("</gml:FeatureCollection>"); 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; } }