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
                {
                    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);
        }