public IOpenUrlResponse FindCitation(IOpenUrlQuery query) { IOpenUrlResponse response = new OpenUrlResponse(); try { if (query == null) throw new Exception("Query cannot be null."); if (query.ValidateQuery()) // Validate the query { bool foundCitation = false; OpenUrlCitationDAL ouDAL = new OpenUrlCitationDAL(); int pageID = 0; if (query.Version == "1.0") { pageID = this.GetBHLIDFromIdentifierList(query, "page"); } else { String pageIDString = this.GetIDFromIdentifierList(query, "page"); Int32.TryParse(pageIDString, out pageID); } // If we've got a page id, submit a query to database CustomGenericList<OpenUrlCitation> citations = new CustomGenericList<OpenUrlCitation>(); if (pageID > 0) citations = ouDAL.OpenUrlCitationSelectByPageID(null, null, pageID); if (citations.Count > 0) foundCitation = true; // If we haven't found a citation, try finding the title using title and page criteria if (!foundCitation) { // Get the title ID, if one was specified int titleID = 0; if (query.Version == "1.0") { titleID = this.GetBHLIDFromIdentifierList(query, "bibliography"); } else { String titleIDString = this.GetIDFromIdentifierList(query, "title"); Int32.TryParse(titleIDString, out titleID); } // Get OCLC and LCCN identifiers, if specified string oclc = this.GetIDFromIdentifierList(query, "oclcnum"); string lccn = this.GetIDFromIdentifierList(query, "lccn"); // Look for citations citations = ouDAL.OpenUrlCitationSelectByCitationDetails(null, null, titleID, oclc, lccn, query.Isbn, query.Issn, query.ShortTitle, query.Coden, (query.BookTitle != String.Empty ? query.BookTitle : query.JournalTitle), query.AuthorLast, query.AuthorFirst, query.AuthorCorporation, query.PublisherName, query.PublisherPlace, query.Publisher, query.Volume, query.Issue, query.Date.Year(), query.StartPage); if (citations.Count > 0) foundCitation = true; } if (foundCitation) { // For each citation we got back from the database, add a citation to the response foreach (OpenUrlCitation citation in citations) { OpenUrlResponseCitation responseCitation = new OpenUrlResponseCitation(); responseCitation.Title = citation.FullTitle; responseCitation.PublisherName = citation.PublisherName; responseCitation.PublisherPlace = citation.PublisherPlace; responseCitation.Date = citation.Date; responseCitation.Language = citation.LanguageName; responseCitation.Volume = citation.Volume; responseCitation.Genre = citation.Genre; if (citation.PageID > 0) responseCitation.Url = String.Format(UrlFormat, citation.PageID.ToString()); if (citation.ItemID > 0) responseCitation.ItemUrl = String.Format(ItemUrlFormat, citation.ItemID.ToString()); if (citation.TitleID > 0) responseCitation.TitleUrl = String.Format(TitleUrlFormat, citation.TitleID.ToString()); responseCitation.Oclc = citation.Oclc; responseCitation.Issn = citation.Issn; responseCitation.Isbn = citation.Isbn; responseCitation.Lccn = citation.Lccn; responseCitation.STitle = citation.Abbreviation; responseCitation.PublicationFrequency = citation.CurrentPublicationFrequency; responseCitation.Edition = citation.EditionStatement; responseCitation.SPage = citation.StartPage; responseCitation.EPage = citation.EndPage; responseCitation.Pages = citation.Pages; if (citation.Authors.Length > 0) { string[] authors = citation.Authors.Split('|'); foreach (string author in authors) { responseCitation.Authors.Add(author); } } if (citation.Subjects.Length > 0) { string[] subjects = citation.Subjects.Split('|'); foreach (string subject in subjects) { responseCitation.Subjects.Add(subject); } } response.citations.Add(responseCitation); } } // Data for testing //this.AddTestData(response); response.Status = ResponseStatus.Success; } else { response.Status = ResponseStatus.Error; response.Message = query.ValidationError; } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.Message = ex.Message; } // Return the response return response; }
public IOpenUrlResponse FindCitation(IOpenUrlQuery query) { IOpenUrlResponse response = new OpenUrlResponse(); try { if (query == null) { throw new Exception("Query cannot be null."); } if (query.ValidateQuery()) // Validate the query { // TODO: Submit query to database // TODO: For each citation we got back from the database, add a citation to the reponse // TODO: Detect some resolution errors here and set the Status/Message fields appropriately. Do we need additional statuses? // TODO: Test data; remove this when done OpenUrlResponseCitation citation = new OpenUrlResponseCitation(); citation.Title = "The cannon-ball tree : the monkey-pots"; citation.PublisherName = "Field Museum of Natural History,"; citation.PublisherPlace = "Chicago:"; citation.Date = "1924"; citation.Language = "English"; citation.Volume = "Fieldiana, Popular Series, Botany, no. 6"; citation.Genre = "Book"; citation.Authors.Add("Dahlgren, B. E."); citation.Authors.Add("Lang, H."); citation.Subjects.Add("Brazil nut"); citation.Subjects.Add("Lecythidaceae"); citation.Subjects.Add("South American"); citation.Subjects.Add("Trees"); citation.Url = "http://www.biodiversitylibrary.org/page/4354945"; citation.TitleUrl = "http://www.biodiversitylibary.org/title/5435"; citation.Oclc = "179674112"; response.citations.Add(citation); citation = new OpenUrlResponseCitation(); citation.Title = "The cannon-ball tree : the monkey-pots"; citation.PublisherName = "Field Museum of Natural History,"; citation.PublisherPlace = "Chicago:"; citation.Date = "1924"; citation.Language = "English"; citation.Volume = "Fieldiana, Popular Series, Botany, no. 6"; citation.Genre = "Book"; citation.Authors.Add("Dahlgren, B. E."); citation.Authors.Add("Lang, H."); citation.Subjects.Add("Brazil nut"); citation.Subjects.Add("Lecythidaceae"); citation.Subjects.Add("South American"); citation.Subjects.Add("Trees"); //citation.Url = "http://www.biodiversitylibrary.org/item/25578"; citation.Url = "http://www.biodiversitylibrary.org/page/4354939"; citation.TitleUrl = "http://www.biodiversitylibary.org/title/5435"; citation.Oclc = "179674112"; response.citations.Add(citation); response.Status = ResponseStatus.Success; } else { response.Status = ResponseStatus.Error; response.Message = query.ValidationError; } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.Message = ex.Message; } // Return the response return(response); }
public IOpenUrlResponse FindCitation(IOpenUrlQuery query) { IOpenUrlResponse response = new OpenUrlResponse(); try { if (query == null) { throw new Exception("Query cannot be null."); } if (query.ValidateQuery()) // Validate the query { bool foundCitation = false; OpenUrlCitationDAL ouDAL = new OpenUrlCitationDAL(); int pageID = 0; if (query.Version == "1.0") { pageID = this.GetBHLIDFromIdentifierList(query, "page"); } else { String pageIDString = this.GetIDFromIdentifierList(query, "page"); Int32.TryParse(pageIDString, out pageID); } // If we've got a page id, submit a query to database CustomGenericList <OpenUrlCitation> citations = new CustomGenericList <OpenUrlCitation>(); if (pageID > 0) { citations = ouDAL.OpenUrlCitationSelectByPageID(null, null, pageID); } if (citations.Count > 0) { foundCitation = true; } // If we haven't found a citation, try finding the title using title and page criteria if (!foundCitation) { // Get the title ID, if one was specified int titleID = 0; if (query.Version == "1.0") { titleID = this.GetBHLIDFromIdentifierList(query, "bibliography"); } else { String titleIDString = this.GetIDFromIdentifierList(query, "title"); Int32.TryParse(titleIDString, out titleID); } // Get OCLC and LCCN identifiers, if specified string oclc = this.GetIDFromIdentifierList(query, "oclcnum"); string lccn = this.GetIDFromIdentifierList(query, "lccn"); // Look for citations citations = ouDAL.OpenUrlCitationSelectByCitationDetails(null, null, titleID, oclc, lccn, query.Isbn, query.Issn, query.ShortTitle, query.Coden, (query.BookTitle != String.Empty ? query.BookTitle : query.JournalTitle), query.AuthorLast, query.AuthorFirst, query.AuthorCorporation, query.PublisherName, query.PublisherPlace, query.Publisher, query.Volume, query.Issue, query.Date.Year(), query.StartPage); if (citations.Count > 0) { foundCitation = true; } } if (foundCitation) { // For each citation we got back from the database, add a citation to the response foreach (OpenUrlCitation citation in citations) { OpenUrlResponseCitation responseCitation = new OpenUrlResponseCitation(); responseCitation.Title = citation.FullTitle; responseCitation.PublisherName = citation.PublisherName; responseCitation.PublisherPlace = citation.PublisherPlace; responseCitation.Date = citation.Date; responseCitation.Language = citation.LanguageName; responseCitation.Volume = citation.Volume; responseCitation.Genre = citation.Genre; if (citation.PageID > 0) { responseCitation.Url = String.Format(UrlFormat, citation.PageID.ToString()); } if (citation.ItemID > 0) { responseCitation.ItemUrl = String.Format(ItemUrlFormat, citation.ItemID.ToString()); } if (citation.TitleID > 0) { responseCitation.TitleUrl = String.Format(TitleUrlFormat, citation.TitleID.ToString()); } responseCitation.Oclc = citation.Oclc; responseCitation.Issn = citation.Issn; responseCitation.Isbn = citation.Isbn; responseCitation.Lccn = citation.Lccn; responseCitation.STitle = citation.Abbreviation; responseCitation.PublicationFrequency = citation.CurrentPublicationFrequency; responseCitation.Edition = citation.EditionStatement; responseCitation.SPage = citation.StartPage; responseCitation.EPage = citation.EndPage; responseCitation.Pages = citation.Pages; if (citation.Authors.Length > 0) { string[] authors = citation.Authors.Split('|'); foreach (string author in authors) { responseCitation.Authors.Add(author); } } if (citation.Subjects.Length > 0) { string[] subjects = citation.Subjects.Split('|'); foreach (string subject in subjects) { responseCitation.Subjects.Add(subject); } } response.citations.Add(responseCitation); } } // Data for testing //this.AddTestData(response); response.Status = ResponseStatus.Success; } else { response.Status = ResponseStatus.Error; response.Message = query.ValidationError; } } catch (Exception ex) { response.Status = ResponseStatus.Error; response.Message = ex.Message; } // Return the response return(response); }