public HitSnippet[] GetSnippets(GetSnippetsRequest req) { HitSnippet[] response; if (req.searchToken == null | req.searchToken == "") { response = new HitSnippet[0]; return(response); } remoteChannel.Register(); if (remoteObj == null) { remoteObj = new WebServiceBackEnd(); } bool isLocalReq = HttpContext.Current.Request.Url.IsLoopback; if ((remoteObj == null) || !(remoteObj.allowGlobalAccess || isLocalReq)) { response = new HitSnippet[0]; return(response); } if (req.hitHashCodes.Length < 1) { response = new HitSnippet[0]; } else { response = remoteObj.getSnippets(req); } return(response); }
public HitSnippet[] getSnippets(GetSnippetsRequest req) { HitSnippet[] response; string searchToken = req.searchToken; int[] hitHashCodes = req.hitHashCodes; if (!sessionTable.ContainsKey(searchToken)) { response = new HitSnippet[0]; Logger.Log.Warn("GetSnippets: Invalid Search Token received "); return(response); } ArrayList results = ((SessionData)sessionTable[searchToken]).results; if ((results == null) || (results.Count == 0)) { response = new HitSnippet[0]; Logger.Log.Warn("GetSnippets: Invalid Search Token received "); return(response); } int i = 0; ArrayList hashCodeList = new ArrayList(); hashCodeList.AddRange(hitHashCodes); response = new HitSnippet[hitHashCodes.Length]; Logger.Log.Debug("GetSnippets invoked with {0} hitHashCodes", hitHashCodes.Length); Query query = ((SessionData)sessionTable[searchToken]).query; lock (results.SyncRoot) { string snippet = null; foreach (Hit h in results) { int hashCode = h.GetHashCode(); if (hashCodeList.Contains(hashCode)) { hashCodeList.Remove(hashCode); //Queryable queryable = h.SourceObject as Queryable; Queryable queryable = QueryDriver.GetQueryable(h.SourceObjectName); if (queryable == null) { snippet = "ERROR: hit.SourceObject is null, uri=" + h.Uri; } else { snippet = queryable.GetSnippet(ICollection2StringList(query.StemmedText), h); } //GetSnippets always invoked on Target Beagle Node where hits originate: if (snippet == null) { snippet = ""; } HitSnippet hs = new HitSnippet(); hs.hashCode = hashCode; hs.snippet = snippet.Trim(); response[i++] = hs; if ((hashCodeList.Count == 0) || (i == hitHashCodes.Length)) { return(response); } } } //end foreach } //end lock foreach (int hashCode in hashCodeList) { HitSnippet hs = new HitSnippet(); hs.hashCode = hashCode; hs.snippet = InvalidHitSnippetError; response[i++] = hs; if (i == hitHashCodes.Length) { break; } } Logger.Log.Warn("GetSnippets invoked some invalid hitIds"); return(response); }