package org.rr.jeborker.metadata.download;
import java.util.ArrayList;
import java.util.List;
import org.rr.jeborker.db.item.EbookPropertyItem;
public class MetadataDownloadProviderFactory {
public static interface DownloaderType {
public String toString();
public String getName();
public MetadataDownloader getMetadataDownloader();
}
public static enum DOWNLOADER_TYPES implements DownloaderType {
DNB {
@Override
public String getName() {
return "Katalog der deutschen Nationalbibliothek";
}
@Override
public String toString() {
return getName();
}
@Override
public MetadataDownloader getMetadataDownloader() {
return new DNBMetadataDownloader();
}
},
COMIC_BOOK_DB_COM {
@Override
public String getName() {
return "comics.org";
}
@Override
public String toString() {
return getName();
}
@Override
public MetadataDownloader getMetadataDownloader() {
return new ComicsOrgDownloader();
}
},
GOOGLE_BOOKS_DE {
@Override
public String getName() {
return "Google Books Germany";
}
@Override
public String toString() {
return getName();
}
@Override
public MetadataDownloader getMetadataDownloader() {
return new GoogleBooksDeMetadataDownloader();
}
}
}
private static final List<String> DOWNLOADER_NAMES = new ArrayList<String>() {{
for(DOWNLOADER_TYPES type: DOWNLOADER_TYPES.values()) {
add(type.getName());
}
}};
/**
* Get the downloader with the desired name.
* @param name The name of the downloader. All available names could be fetched with the
* {@link #getDownloaderNames()} method.
* @return The desired downloader or <code>null</code> if there is no downloader with the given name.
*/
public static MetadataDownloader getDownloader(String name, List<EbookPropertyItem> selectedEbookPropertyItems) {
for(DOWNLOADER_TYPES type: DOWNLOADER_TYPES.values()) {
if(type.getName().equals(name)) {
return type.getMetadataDownloader();
}
}
return null;
}
/**
* Get the names of all available downloaders. With one of these names
* the desired {@link MetadataDownloader} instance could be fetched with
* the {@link #getDownloader(String)} method.
*/
public static List<String> getDownloaderNames() {
return DOWNLOADER_NAMES;
}
}