/// <summary>
 /// Filter and get the final list of documents required
 /// </summary>
 /// <param name="documentQueryEntity">The document query entity.</param>
 /// <param name="documentListDetails">Object containing filter parameters</param>
 /// <returns>
 /// List of Filtered documents
 /// </returns>
 private List<FilteredDocumentBusinessEntity> GetFilteredListOfDocuments(DocumentQueryEntity documentQueryEntity, DocumentOperationBusinessEntity documentListDetails)
 {
     var filteredDocuments = new List<FilteredDocumentBusinessEntity>();
     if (documentListDetails != null)
     {
         switch (documentListDetails.GenerateDocumentMode)
         {
             case DocumentSelectMode.QueryAndExclude:
                 {
                     filteredDocuments = FetchFilteredSearchResultDocuments(documentQueryEntity,
                         documentListDetails.DocumentsToExclude, true);
                     break;
                 }
             case DocumentSelectMode.UseSelectedDocuments:
                 {
                     filteredDocuments = FetchFilteredSearchResultDocuments(documentQueryEntity,
                         documentListDetails.SelectedDocuments, false);
                     break;
                 }
         }
     }
     return filteredDocuments;
 }
 /// <summary>
 /// Get filtered list of documents from the search context
 /// </summary>
 /// <param name="documentSelectionContext">The document selection context.</param>
 /// <param name="documentIndex">Index of the document.</param>
 /// <param name="filteredDocuments">The filtered documents.</param>
 /// <returns>
 /// List of filtered documents
 /// </returns>
 private int GetQualifiedDocuments(DocumentOperationBusinessEntity documentSelectionContext, int documentIndex, out List<FilteredDocumentBusinessEntity> filteredDocuments)
 {
     filteredDocuments = new List<FilteredDocumentBusinessEntity>();
     try
     {
         var documentQueryEntity = new DocumentQueryEntity
         {
             QueryObject = new SearchQueryEntity
             {
                 ReviewsetId = documentSelectionContext.SearchContext.ReviewSetId,
                 DatasetId = documentSelectionContext.SearchContext.DataSetId,
                 MatterId = documentSelectionContext.SearchContext.MatterId,
                 IsConceptSearchEnabled = documentSelectionContext.SearchContext.IsConceptSearchEnabled
             },
             DocumentStartIndex = documentIndex
         };
         documentQueryEntity.IgnoreDocumentSnippet = true;
         documentQueryEntity.QueryObject.QueryList.Add(new Query(documentSelectionContext.SearchContext.Query));
         //documentQueryEntity.SortFields.Add(new Sort { SortBy = "Relevance" });
         filteredDocuments = GetFilteredListOfDocuments(documentQueryEntity, documentSelectionContext);
     }
     catch (Exception ex)
     {
         if (ex.GetType() == typeof(EVException))
         {
             var evEx = (EVException)ex;
             if (!string.IsNullOrEmpty(evEx.GetErrorCode()))
             {
                 ex.Data[Constants.ErrorCode] = evEx.GetErrorCode();
                 ex.Data[Constants.Message] = evEx.ToUserString();
                 ex.Trace();
             }
             else
             {
                 Tracer.Error(string.Format("ProductionStartupWorker - {0}", Constants.ErrorInGetQualifiedDocuments));
             }
         }
         else
         {
             Tracer.Error(string.Format("ProductionStartupWorker - {0}", Constants.ErrorInGetQualifiedDocuments));
         }
     }
     return filteredDocuments.Count();
 }