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;
        }
Beispiel #2
0
        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);
        }
 private void AddTestData(IOpenUrlResponse response)
 {
     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/page/4354939";
     citation.TitleUrl = "http://www.biodiversitylibary.org/title/5435";
     citation.Oclc = "179674112";
     response.citations.Add(citation);
 }