/// <summary> /// Query the specified IOpenSearchable entity with specific parameters and returns result in native format. /// </summary> /// <param name="entity">Entity.</param> /// <param name="parameters">Parameters.</param> public IOpenSearchResultCollection Query(IOpenSearchable entity, NameValueCollection parameters) { // Transform action to invoke QuerySettings querySettings; // 1) Find the plugin to match with urlTemplates querySettings = entity.GetQuerySettings(this); if (querySettings == null) throw new ImpossibleSearchException(String.Format("No engine extension to query {0}", entity.Identifier)); // 2) Create the request OpenSearchRequest request = entity.Create(querySettings, parameters); // 3) Apply the pre-search functions ApplyPreSearchFilters(ref request); // 4) Perform the Search IOpenSearchResponse response = request.GetResponse(); response.Entity = entity; // 5) Apply the pre-search functions ApplyPostSearchFilters(request, ref response); // 6) Read the response var results = querySettings.ReadNative.Invoke(response); results.Parameters = request.Parameters; results.LastUpdatedTime = DateTime.Now; // 7) Apply post search filters entity.ApplyResultFilters(request, ref results, results.ContentType); // 8 Create the container ApplyOpenSearchElements(ref results, request, response); return results; }
/// <summary> /// Query the specified IOpenSearchable entity with specific parameters and result with the specific result type. /// </summary> /// <param name="entity">Entity.</param> /// <param name="parameters">Parameters.</param> /// <param name="resultType">Result type.</param> public IOpenSearchResultCollection Query(IOpenSearchable entity, NameValueCollection parameters, Type resultType) { // Transform action to invoke QuerySettings querySettings; // 1) Find the best match between urlTemplates and result format querySettings = entity.GetQuerySettings(this); if (querySettings == null) throw new ImpossibleSearchException(String.Format("No engine extension to query {0} in order to return {1}", entity.Identifier, resultType.FullName)); // 2) Create the request OpenSearchRequest request = entity.Create(querySettings, parameters); // 3) Apply the pre-search functions ApplyPreSearchFilters(ref request); // 4) Perform the Search IOpenSearchResponse response = request.GetResponse(); response.Entity = entity; // 5) Apply the pre-search functions ApplyPostSearchFilters(request, ref response); // 6) Transform the response IOpenSearchResultCollection results = querySettings.ReadNative.Invoke(response); results.Parameters = request.Parameters; results.LastUpdatedTime = DateTime.Now; IOpenSearchEngineExtension osee = GetFirstExtensionByTypeAbility(resultType); // 7) Apply post search filters entity.ApplyResultFilters(request, ref results, osee.DiscoveryContentType); // 8) Change format IOpenSearchResultCollection newResults = osee.CreateOpenSearchResultFromOpenSearchResult(results); // 9) Create Result container ApplyOpenSearchElements(ref newResults, request, response); return newResults; }