package org.ebookdroid;
import org.ebookdroid.core.codec.CodecContext;
import org.ebookdroid.droids.djvu.codec.DjvuContext;
import org.ebookdroid.droids.fb2.codec.FB2Context;
import org.ebookdroid.droids.mupdf.codec.PdfContext;
import org.ebookdroid.droids.mupdf.codec.XpsContext;
import org.ebookdroid.droids.mupdf.codec.CbzContext;
import org.ebookdroid.droids.mupdf.codec.EpubContext;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.emdev.utils.LengthUtils;
public enum CodecType {
PDF(PdfContext.class, true, Arrays.asList("pdf"), Arrays.asList("application/pdf")),
DJVU(DjvuContext.class, false, Arrays.asList("djvu", "djv"), Arrays.asList("image/djvu", "image/vnd.djvu", "image/x-djvu")),
XPS(XpsContext.class, true, Arrays.asList("xps", "oxps"), Arrays.asList("application/vnd.ms-xpsdocument",
"application/oxps")),
EPUB(EpubContext.class, true, Arrays.asList("epub"), Arrays.asList("application/epub+zip")),
CBZ(CbzContext.class, false, Arrays.asList("cbz"), Arrays.asList("application/x-cbz")),
FB2(FB2Context.class, true, Arrays.asList("fb2", "fb2.zip"), Arrays.asList("application/x-fb2"));
private final static Map<String, CodecType> extensionToActivity;
private final static Map<String, CodecType> mimeTypesToActivity;
static {
extensionToActivity = new HashMap<String, CodecType>();
for (final CodecType a : values()) {
for (final String ext : a.extensions) {
extensionToActivity.put(ext.toLowerCase(), a);
}
}
mimeTypesToActivity = new HashMap<String, CodecType>();
for (final CodecType a : values()) {
for (final String type : a.mimeTypes) {
mimeTypesToActivity.put(type.toLowerCase(), a);
}
}
}
private final Class<? extends CodecContext> contextClass;
public final boolean useCustomFonts;
public final List<String> extensions;
public final List<String> mimeTypes;
private CodecType(final Class<? extends CodecContext> contextClass, final boolean useCustomFonts,
final List<String> extensions, final List<String> mimeTypes) {
this.contextClass = contextClass;
this.useCustomFonts = useCustomFonts;
this.extensions = extensions;
this.mimeTypes = mimeTypes;
}
public Class<? extends CodecContext> getContextClass() {
return contextClass;
}
public static Set<String> getAllExtensions() {
return extensionToActivity.keySet();
}
public static Set<String> getAllMimeTypes() {
return mimeTypesToActivity.keySet();
}
public static CodecType getByUri(final String uri) {
if (LengthUtils.isEmpty(uri)) {
return null;
}
final String uriString = uri.toLowerCase();
for (final String ext : extensionToActivity.keySet()) {
if (uriString.endsWith("." + ext)) {
return extensionToActivity.get(ext);
}
}
return null;
}
public static CodecType getByExtension(final String ext) {
return extensionToActivity.get(ext.toLowerCase());
}
public static CodecType getByMimeType(final String type) {
return mimeTypesToActivity.get(type.toLowerCase());
}
public String getDefaultExtension() {
return extensions.get(0);
}
}