package org.limewire.ui.swing.search.model;
import org.limewire.core.api.download.DownloadListManager;
import org.limewire.core.api.library.LibraryManager;
import org.limewire.core.api.search.Search;
import org.limewire.core.api.spam.SpamManager;
import org.limewire.ui.swing.search.SearchInfo;
import org.limewire.ui.swing.settings.SwingUiSettings;
import org.limewire.ui.swing.util.DownloadExceptionHandler;
import org.limewire.ui.swing.util.PropertiableHeadings;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* Implements a factory for creating the search results data model.
*/
public class SearchResultsModelFactory {
private final SpamManager spamManager;
private final SimilarResultsDetectorFactory similarResultsDetectorFactory;
private final LibraryManager libraryManager;
private final DownloadListManager downloadListManager;
private final Provider<PropertiableHeadings> propertiableHeadings;
private final Provider<DownloadExceptionHandler> downloadExceptionHandler;
/**
* Constructs a SearchResultsModelFactory with the specified factories,
* managers, and property values.
*/
@Inject
public SearchResultsModelFactory(SimilarResultsDetectorFactory similarResultsDetectorFactory,
SpamManager spamManager, LibraryManager libraryManager,
DownloadListManager downloadListManager,
Provider<PropertiableHeadings> propertiableHeadings,
Provider<DownloadExceptionHandler> downloadExceptionHandler) {
this.similarResultsDetectorFactory = similarResultsDetectorFactory;
this.spamManager = spamManager;
this.libraryManager = libraryManager;
this.downloadListManager = downloadListManager;
this.propertiableHeadings = propertiableHeadings;
this.downloadExceptionHandler = downloadExceptionHandler;
}
/**
* Creates a new instance of SearchResultsModel.
*/
public SearchResultsModel createSearchResultsModel(SearchInfo searchInfo, Search search) {
// Create search result model.
BasicSearchResultsModel searchResultsModel = new BasicSearchResultsModel(
searchInfo, search, propertiableHeadings, downloadListManager,
downloadExceptionHandler);
// Create detector to find similar results.
SimilarResultsDetector similarResultsDetector = similarResultsDetectorFactory.newSimilarResultsDetector();
// Add list listener for results already downloaded or being downloaded.
// AlreadyDownloaded listener needs to be added to the list before the
// grouping listener because the grouping listener uses values set by
// the AlreadyDownloaded listener.
AlreadyDownloadedListEventListener alreadyDownloadedListEventListener =
new AlreadyDownloadedListEventListener(libraryManager, downloadListManager);
searchResultsModel.addResultListener(alreadyDownloadedListEventListener);
// Add list listener to group similar results.
if (SwingUiSettings.GROUP_SIMILAR_RESULTS_ENABLED.getValue()) {
GroupingListEventListener groupingListEventListener = new GroupingListEventListener(similarResultsDetector);
searchResultsModel.addResultListener(groupingListEventListener);
}
// Add list listener to handle spam results.
SpamListEventListener spamListEventListener = new SpamListEventListener(spamManager, similarResultsDetector);
searchResultsModel.addResultListener(spamListEventListener);
return searchResultsModel;
}
}