Exemple #1
0
        protected void saveButton_Click(object sender, EventArgs e)
        {
            PageSummaryView ps = (PageSummaryView)Session["Page" + pageIdTextBox.Text];
            CustomGenericList <PageName> pageNames = (CustomGenericList <PageName>)Session["PageNames" + pageIdTextBox.Text];

            if (validate(pageNames))
            {
                BHLProvider bp = new BHLProvider();
                try
                {
                    foreach (PageName pageName in pageNames)
                    {
                        if (pageName.IsNew && pageName.Active)
                        {
                            PageName existingPageName =
                                bp.PageNameSelectByPageIDAndNameFound(ps.PageID, pageName.NameFound);

                            if (existingPageName == null)
                            {
                                pageName.PageID = ps.PageID;
                                pageName.Source = "User Reported";
                                pageName.Active = true;
                                // Get confirmed value and namebankid from uBio
                                FindItItem uBioResult = ubioLookup(pageName.NameFound);
                                if (uBioResult != null)
                                {
                                    pageName.NameConfirmed = TypeHelper.NullIfEmpty(uBioResult.Name);
                                    pageName.NameBankID    = TypeHelper.NullIfZero(uBioResult.NamebankID);
                                }
                            }
                        }
                        else
                        {
                            if (pageName.Active)
                            {
                                FindItItem uBioResult = ubioLookup(pageName.NameFound);
                                if (uBioResult != null && uBioResult.NamebankID >= 0)
                                {
                                    pageName.NameConfirmed = TypeHelper.NullIfEmpty(uBioResult.Name);
                                    pageName.NameBankID    = TypeHelper.NullIfZero(uBioResult.NamebankID);
                                }
                            }
                        }
                    }

                    bp.PageNameSaveList(pageNames);
                }
                catch (Exception ex)
                {
                    Session["Exception"] = ex;
                    Response.Redirect("/Error.aspx");
                }
            }
            else
            {
                return;
            }

            Response.Redirect("/Admin/Dashboard.aspx");
        }
Exemple #2
0
        private FindItItem ubioLookup(string name)
        {
            XmlTextReader reader = null;

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
                    "http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&freeText=" +
                    Server.UrlEncode(name));
                request.Timeout = 15000;
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                reader = new XmlTextReader((Stream)response.GetResponseStream());
                XmlDocument doc = new XmlDocument();
                doc.Load(reader);
                FindItItem result = null;
                // Taking this simple, straight forward approach because we're only expecting one result per check. Will
                // make parsing algorithm more robust later if needed.
                XmlNodeList nameList = doc.GetElementsByTagName("nameString");
                XmlNodeList idList   = doc.GetElementsByTagName("namebankID");
                if (nameList.Count == 1)
                {
                    result      = new FindItItem();
                    result.Name = nameList[0].InnerText;
                    if (idList.Count == 1)
                    {
                        result.NamebankID = int.Parse(idList[0].InnerText);
                    }
                }
                return(result);
            }
            catch
            {
                return(null);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
Exemple #3
0
        public FindItItem[] GetUBioNames(int pageID)
        {
            bool   tooLarge      = false;
            string webServiceUrl = string.Empty;

            PageSummaryView ps       = new BHLProvider().PageSummarySelectByPageId(pageID);
            string          filepath = ps.OcrTextLocation;

            if (new BHLProvider().GetFileAccessProvider(ConfigurationManager.AppSettings["UseRemoteFileAccessProvider"] == "true").GetFileSizeInKB(filepath) <= 5)
            {
                // OCR text not too large for URI, so send it in the UBIO request

                // Get the OCR text and start to build the UBIO url
                string        ocrText         = this.GetOcrText(ps);
                StringBuilder webServiceUrlSB = new StringBuilder();
                webServiceUrlSB.Append("http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&freeText=");
                webServiceUrlSB.Append(System.Web.HttpUtility.UrlEncode(ocrText));

                // Add the existing page names for this Page to the UBIO url
                CustomGenericList <PageName> pageNames = new BHLProvider().PageNameSelectByPageID(pageID);
                foreach (PageName pageName in pageNames)
                {
                    webServiceUrlSB.Append(System.Web.HttpUtility.UrlEncode("  " + pageName.NameFound));
                }

                // Get the final UBIO url
                webServiceUrl = webServiceUrlSB.ToString();

                // If the url is too large after all UrlEncoding is complete, just send the file path
                if (((long)webServiceUrl.Length / 1024) > 5)
                {
                    tooLarge = true;
                }
            }
            else
            {
                tooLarge = true;
            }

            // OCR text is too large, so just send the file path
            //string webServiceUrl = String.Format("http://names.ubio.org/webservices/service.php?function=findIT&url=http://www.botanicus.org/PrimeOcr/{0}/{1}/{2}/{3}.txt&strict=1&keyCode=78bd024866f1df74125f194b764d80333e0d64aa", ps.WebVirtualDirectory, ps.MARCBibID, ps.BarCode, ps.FileNamePrefix);
            if (tooLarge)
            {
                webServiceUrl = String.Format("http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&url=http://www.botanicus.org/PrimeOcr/mbgserv14/{0}/{1}/{2}/{3}.txt", ps.WebVirtualDirectory, ps.FileRootFolder, ps.BarCode,
                                              ps.FileNamePrefix);
            }


            List <FindItItem> fiil   = new List <FindItItem>();
            XmlTextReader     reader = null;

            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(webServiceUrl);
                req.Method  = "POST";
                req.Timeout = 15000;
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                reader = new XmlTextReader((System.IO.Stream)resp.GetResponseStream());
                StringBuilder sb = new StringBuilder();

                FindItItem fii          = null;
                string     currentStage = "";
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Whitespace)
                    {
                        continue;
                    }

                    if (reader.HasValue)
                    {
                        sb.Append(reader.Value);
                    }
                    if (currentStage == "nameString" && reader.Value != "")
                    {
                        fii.Name = reader.Value;
                    }
                    if (currentStage == "namebankID" && reader.Value != "")
                    {
                        fii.NamebankID = Int32.Parse(reader.Value);
                    }
                    else if (reader.NodeType != XmlNodeType.EndElement)
                    {
                        sb.Append("\n" + reader.Name + ": ");
                        currentStage = reader.Name;
                        if (reader.Name == "entity")
                        {
                            fii = new FindItItem();
                        }
                    }
                    else
                    {
                        if (reader.Name == "entity")
                        {
                            fiil.Add(fii);
                        }
                    }
                }
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }
            return(fiil.ToArray());
        }