package org.limewire.core.impl.search.browse;
import java.util.Collection;
import java.util.concurrent.ExecutorService;
import org.limewire.core.api.browse.BrowseFactory;
import org.limewire.core.api.library.RemoteLibraryManager;
import org.limewire.core.api.search.browse.BrowseSearch;
import org.limewire.core.api.search.browse.BrowseSearchFactory;
import org.limewire.friend.api.Friend;
import org.limewire.friend.api.FriendPresence;
import org.limewire.inject.LazySingleton;
import com.google.inject.Inject;
import com.google.inject.name.Named;
@LazySingleton
class CoreBrowseSearchFactory implements BrowseSearchFactory {
private final RemoteLibraryManager remoteLibraryManager;
private final BrowseFactory browseFactory;
private final ExecutorService backgroundExecutor;
@Inject
public CoreBrowseSearchFactory(RemoteLibraryManager remoteLibraryManager,
BrowseFactory browseFactory,
@Named("backgroundExecutor") ExecutorService backgroundExecutor) {
this.remoteLibraryManager = remoteLibraryManager;
this.browseFactory = browseFactory;
this.backgroundExecutor = backgroundExecutor;
}
public BrowseSearch createFriendBrowseSearch(Friend friend){
assert(friend != null && !friend.isAnonymous());
return new FriendSingleBrowseSearch(remoteLibraryManager, friend, backgroundExecutor);
}
public BrowseSearch createBrowseSearch(FriendPresence presence){
assert(presence != null);
if(presence.getFriend().isAnonymous()){
return new AnonymousSingleBrowseSearch(browseFactory, presence);
} else {
return createFriendBrowseSearch(presence.getFriend());
}
}
@Override
public BrowseSearch createBrowseSearch(Collection<FriendPresence> presences) {
return new MultipleBrowseSearch(this, presences);
}
public BrowseSearch createAllFriendsBrowseSearch(){
return new AllFriendsBrowseSearch(remoteLibraryManager, backgroundExecutor);
}
}