/**
   * Constructs a BasicSearchResultsModel with the specified search details, search request object,
   * and services.
   */
  public BasicSearchResultsModel(
      SearchInfo searchInfo,
      Search search,
      PropertiableHeadings propertiableHeadings,
      DownloadListManager downloadListManager,
      SaveLocationExceptionHandler saveLocationExceptionHandler) {

    this.searchInfo = searchInfo;
    this.search = search;
    this.downloadListManager = downloadListManager;
    this.saveLocationExceptionHandler = saveLocationExceptionHandler;

    // Create list of all search results.
    allSearchResults = new BasicEventList<SearchResult>();

    // Create list of search results grouped by URN.
    GroupingList<SearchResult> groupingListUrns =
        GlazedListsFactory.groupingList(allSearchResults, new UrnComparator());

    // Create list of visual search results where each element represents
    // a single group.
    groupedUrnResults =
        GlazedListsFactory.functionList(
            groupingListUrns, new SearchResultGrouper(resultCount, propertiableHeadings));

    // Create observable list that fires an event when results are modified.
    observableList =
        GlazedListsFactory.observableElementList(
            groupedUrnResults, GlazedLists.beanConnector(VisualSearchResult.class));

    // Create filtered list.
    filteredResultList = GlazedListsFactory.filterList(observableList);

    // Initialize display category and sorted list.
    setSelectedCategory(searchInfo.getSearchCategory());
  }
 @Override
 public String getSearchQuery() {
   return searchInfo.getSearchQuery();
 }
 @Override
 public SearchCategory getSearchCategory() {
   return searchInfo.getSearchCategory();
 }