package org.limewire.ui.swing.search;
import java.util.Collection;
import java.util.List;
import org.limewire.core.api.search.Search;
import org.limewire.core.api.search.SearchListener;
import org.limewire.core.api.search.SearchResult;
import org.limewire.core.api.search.sponsored.SponsoredResult;
import org.limewire.ui.swing.search.model.SearchResultsModel;
import org.limewire.ui.swing.search.model.VisualSearchResult;
import org.limewire.ui.swing.util.SwingUtils;
import ca.odell.glazedlists.event.ListEvent;
import ca.odell.glazedlists.event.ListEventListener;
/**
* An implementation of SearchListener to handle search results and update the
* Swing UI. Search events are forwarded to the data model and UI using the
* event dispatch thread.
*/
class SwingSearchListener implements SearchListener {
private final SearchResultsModel searchResultsModel;
private final SponsoredResultsView sponsoredView;
private final SearchNavItem searchNavItem;
/**
* Constructs a SwingSearchListener for the specified search model,
* sponsored results view, and navigation item.
*/
public SwingSearchListener(SearchResultsModel searchResultsModel,
SponsoredResultsView searchView, SearchNavItem searchNavItem) {
this.searchResultsModel = searchResultsModel;
this.sponsoredView = searchView;
this.searchNavItem = searchNavItem;
// sync UI result count to real count.
searchResultsModel.getUnfilteredList().addListEventListener(new ListEventListener<VisualSearchResult>() {
public void listChanged(ListEvent<VisualSearchResult> listChanges) {
SwingSearchListener.this.searchNavItem.sourceCountUpdated(
SwingSearchListener.this.searchResultsModel.getResultCount());
}
});
}
@Override
public void handleSearchResult(Search search, SearchResult searchResult) {
// passthrough immediately.
searchResultsModel.addSearchResult(searchResult);
}
@Override
public void handleSearchResults(Search search, Collection<? extends SearchResult> searchResults) {
// passthrough immediately.
searchResultsModel.addSearchResults(searchResults);
}
@Override
public void handleSponsoredResults(Search search, final List<SponsoredResult> sponsoredResults) {
SwingUtils.invokeLater(new Runnable() {
@Override
public void run() {
sponsoredView.addSponsoredResults(sponsoredResults);
}
});
}
@Override
public void searchStarted(Search search) {
}
@Override
public void searchStopped(Search search) {
}
}