package org.limewire.http.webservice;
import java.util.HashMap;
import org.cometd.Bayeux;
import org.cometd.Client;
import org.limewire.core.api.library.LibraryManager;
import org.limewire.core.api.search.SearchListener;
import org.limewire.core.api.search.SearchManager;
import org.limewire.core.impl.search.SearchManagerImpl.SearchWithResults;
import org.mortbay.cometd.BayeuxService;
import org.mortbay.log.Log;
public class CometSearchService extends BayeuxService {
private SearchManager searchManager;
private LibraryManager libraryManager;
public CometSearchService(Bayeux bayeux, SearchManager searchManager, LibraryManager libraryManager) {
super(bayeux, "search");
System.out.println("Setting up search...");
subscribe("/search", "searchResults");
this.searchManager = searchManager;
this.libraryManager = libraryManager;
}
public Object searchResults(Client client, Object data) {
System.out.println("ECHO from "+client+" "+data);
try {
String query = data.toString();
SearchListener listener = new CometSearchListener(getBayeux().getChannel("/search", false), getClient(), this.libraryManager);
SearchWithResults search = this.searchManager.createSearchFromQuery(query);
search.start();
search.getSearch().addSearchListener(listener);
HashMap<String, Object> response = new HashMap<String,Object>();
response.put("new_search", true);
response.put("guid", search.getSearch().getQueryGuid());
return response;
} catch(Exception e) {
Log.warn(e);
return "bad results for " + data;
}
}
}