package de.jpaw.bonaparte.api.media;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import de.jpaw.bonaparte.core.MimeTypes;
import de.jpaw.bonaparte.pojos.api.media.MediaCategory;
import de.jpaw.bonaparte.pojos.api.media.MediaType;
import de.jpaw.bonaparte.pojos.api.media.MediaTypeDescriptor;
import de.jpaw.bonaparte.pojos.api.media.MediaXType;
import de.jpaw.enums.XEnumFactory;
public class MediaTypeInfo {
private static final ConcurrentMap<String, MediaTypeDescriptor> mimeMap = new ConcurrentHashMap<String, MediaTypeDescriptor>(32);
private static final ConcurrentMap<MediaXType, MediaTypeDescriptor> reverseMimeMap = new ConcurrentHashMap<MediaXType, MediaTypeDescriptor>(32);
protected static void registerFormatType(MediaTypeDescriptor f) {
f.freeze(); // make it immutable
reverseMimeMap.putIfAbsent(f.getMediaType(), f);
mimeMap.putIfAbsent(f.getMimeType(), f);
}
// static initializations
static {
final XEnumFactory<MediaXType> fct = MediaXType.myFactory; // fileExt, isImage. isAudio, isRecord, isText, isBinary, mimeType
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.BONAPARTE), "bon", MediaCategory.RECORDS, true, MimeTypes.MIME_TYPE_BONAPARTE));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.XML), "xml", MediaCategory.RECORDS, true, MimeTypes.MIME_TYPE_XML));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.JSON), "json", MediaCategory.RECORDS, true, MimeTypes.MIME_TYPE_JSON));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.COMPACT_BONAPARTE), "cb", MediaCategory.RECORDS, false, MimeTypes.MIME_TYPE_COMPACT_BONAPARTE));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.XLSX), "xlsx", MediaCategory.RECORDS, false, "application/vnd.ms-excel"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.XLS), "xls", MediaCategory.RECORDS, false, "application/vnd.ms-excel"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.CSV), "csv", MediaCategory.RECORDS, true, MimeTypes.MIME_TYPE_CSV));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.TEXT), "txt", MediaCategory.TEXT, true, "text/plain"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.HTML), "html", MediaCategory.TEXT, true, "text/html"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.XHTML), "xhtml",MediaCategory.TEXT, true, " application/xhtml+xml"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.CSS), "css", MediaCategory.TEXT, true, "text/css"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.MARKDOWN), "md", MediaCategory.TEXT, true, "text/markdown"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.TEX), "tex", MediaCategory.TEXT, true, "application/x-tex"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.LATEX), "latex",MediaCategory.TEXT, true, "application/x-latex"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.URL), "url", MediaCategory.TEXT, true, "application/x-uri"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.PDF), "pdf", MediaCategory.DOCUMENT,false, "application/pdf"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.DVI), "dvi", MediaCategory.DOCUMENT,false, "application/x-dvi"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.POSTSCRIPT), "ps", MediaCategory.DOCUMENT,true, "application/postscript"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.GIF), "gif", MediaCategory.IMAGE, false, "image/gif"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.JPG), "jpg", MediaCategory.IMAGE, false, "image/jpeg"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.PNG), "png", MediaCategory.IMAGE, false, "image/png"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.WAV), "wav", MediaCategory.AUDIO, false, "audio/x-wav"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.MP3), "mp3", MediaCategory.AUDIO, false, "audio/mp3")); // chrome, Opera
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.MP3), "mp3", MediaCategory.AUDIO, false, "audio/mpeg")); // firefox, IE
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.MP4), "mp4", MediaCategory.VIDEO, false, "video/mp4"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.MPG), "mpg", MediaCategory.VIDEO, false, "video/mpeg"));
registerFormatType(new MediaTypeDescriptor(fct.getByEnum(MediaType.RAW), "dat", MediaCategory.OTHER, false, "application/octet-stream"));
}
public static MediaTypeDescriptor getFormatByMimeType(String mimeType) {
return mimeMap.get(mimeType);
}
public static MediaTypeDescriptor getFormatByType(MediaXType formatType) {
return reverseMimeMap.get(formatType);
}
}