package org.limewire.core.impl.download;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.limewire.core.api.download.DownloadException;
import org.limewire.core.api.download.DownloadItem;
import org.limewire.core.api.search.Search;
import org.limewire.core.api.search.SearchResult;
import com.google.inject.Singleton;
/**
* Registry class for all concrete download item factories.
* <p>
* A concrete factory should register itself and is then invoked by this class
* if a list of search results is being downloaded.
*/
@Singleton
public class DownloadItemFactoryRegistry implements DownloadItemFactory {
/**
* Map factories by class to avoid duplicate factories from being registered.
*/
private final Map<Class<? extends DownloadItemFactory>, DownloadItemFactory> factories = new ConcurrentHashMap<Class<? extends DownloadItemFactory>, DownloadItemFactory>();
@Override
public DownloadItem create(Search search, List<? extends SearchResult> searchResults,
File saveFile, boolean overwrite) throws DownloadException {
for (DownloadItemFactory factory : factories.values()) {
DownloadItem coreDownloadItem = factory.create(search, searchResults, saveFile, overwrite);
if (coreDownloadItem != null) {
return coreDownloadItem;
}
}
return null;
}
/**
* Registers factory with this composite factory registry.
*/
public void register(DownloadItemFactory factory) {
factories.put(factory.getClass(), factory);
}
}