/*
* MimeTypeUtils.java
*
*
*/
package org.smartly.commons.util;
import org.smartly.commons.lang.CharEncoding;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* Singleton class helper for MimeType.<br>
*/
public class MimeTypeUtils {
private static final String CHARSET = ";charset=" + CharEncoding.getDefault();
public static final String MIME_JSON = MimeTypeUtils.getMimeType(".json") + CHARSET;
public static final String MIME_PLAINTEXT = MimeTypeUtils.getMimeType(".txt") + CHARSET;
public static final String MIME_AUDIOBASIC = MimeTypeUtils.getMimeType(".wav");
public static final String MIME_IMAGEBMP = MimeTypeUtils.getMimeType(".bmp");
public static final String MIME_IMAGEJPG = MimeTypeUtils.getMimeType(".jpg");
public static final String MIME_IMAGEPNG = MimeTypeUtils.getMimeType(".png");
public static final String MIME_HTML = MimeTypeUtils.getMimeType(".html") + CHARSET;
public static final String MIME_XML = MimeTypeUtils.getMimeType(".xml") + CHARSET;
public static final String MIME_XMLRSS = MimeTypeUtils.getMimeType(".rss") + CHARSET;
private final Map<String, String> _filetypemap;
private MimeTypeUtils() {
_filetypemap = new HashMap<String, String>();
this.loadExtensions(_filetypemap);
}
public String getContentType(final String fileName) {
final String name = PathUtils.getFilename(fileName);
if (StringUtils.hasText(name)) {
final String ext = PathUtils.getFilenameExtension(fileName, true);
if (StringUtils.hasText(ext)) {
return this.getContentTypeFromExtension(ext);
} else {
return this.getContentTypeFromExtension("." + name);
}
}
return "";
}
public String getContentType(final File file) {
if (null != file) {
final String fileName = file.getName();
return this.getContentType(fileName);
}
return "";
}
public String getContentTypeFromExtension(final String ext) {
if (StringUtils.hasText(ext)) {
final String result = _filetypemap.get(ext);
if (!StringUtils.hasText(result)) {
return MIME_PLAINTEXT;
} else {
return result;
}
}
return "";
}
// ------------------------------------------------------------------------
// p r i v a t e
// ------------------------------------------------------------------------
private void loadExtensions(final Map<String, String> map) {
map.put(".323", "text/h323");
map.put(".acx", "application/internet-property-stream");
map.put(".ai", "application/postscript");
map.put(".aif", "audio/x-aiff");
map.put(".aifc", "audio/x-aiff");
map.put(".aiff", "audio/x-aiff");
map.put(".asf", "video/x-ms-asf");
map.put(".asr", "video/x-ms-asf");
map.put(".asx", "video/x-ms-asf");
map.put(".au", "audio/basic");
map.put(".avi", "video/x-msvideo");
map.put(".axs", "application/olescript");
map.put(".bas", "text/plain");
map.put(".bcpio", "application/x-bcpio");
map.put(".bin", "application/octet-stream");
map.put(".bmp", "image/bmp");
map.put(".c", "text/plain");
map.put(".cat", "application/vnd.ms-pkiseccat");
map.put(".cdf", "application/x-cdf");
map.put(".cer", "application/x-x509-ca-cert");
map.put(".class", "application/octet-stream");
map.put(".clp", "application/x-msclip");
map.put(".cmx", "image/x-cmx");
map.put(".cod", "image/cis-cod");
map.put(".cpio", "application/x-cpio");
map.put(".crd", "application/x-mscardfile");
map.put(".crl", "application/pkix-crl");
map.put(".crt", "application/x-x509-ca-cert");
map.put(".csh", "application/x-csh");
map.put(".css", "text/css");
map.put(".csv", "application/csv");
map.put(".dcr", "application/x-director");
map.put(".der", "application/x-x509-ca-cert");
map.put(".dir", "application/x-director");
map.put(".dll", "application/x-msdownload");
map.put(".dms", "application/octet-stream");
map.put(".doc", "application/msword");
map.put(".dot", "application/msword");
map.put(".dvi", "application/x-dvi");
map.put(".dxr", "application/x-director");
map.put(".eps", "application/postscript");
map.put(".etx", "text/x-setext");
map.put(".evy", "application/envoy");
map.put(".exe", "application/octet-stream");
map.put(".fif", "application/fractals");
map.put(".flr", "x-world/x-vrml");
map.put(".gif", "image/gif");
map.put(".gtar", "application/x-gtar");
map.put(".gz", "application/x-gzip");
map.put(".h", "text/plain");
map.put(".hdf", "application/x-hdf");
map.put(".hlp", "application/winhlp");
map.put(".hqx", "application/mac-binhex40");
map.put(".hta", "application/hta");
map.put(".htc", "text/x-component");
map.put(".htm", "text/html");
map.put(".html", "text/html");
map.put(".htt", "text/webviewhtml");
map.put(".ico", "image/x-icon");
map.put(".ief", "image/ief");
map.put(".iii", "application/x-iphone");
map.put(".ins", "application/x-internet-signup");
map.put(".isp", "application/x-internet-signup");
map.put(".jfif", "image/pipeg");
map.put(".jpe", "image/jpeg");
map.put(".jpeg", "image/jpeg");
map.put(".jpg", "image/jpeg");
map.put(".json", "application/json");
map.put(".js", "application/x-javascript");
map.put(".latex", "application/x-latex");
map.put(".lha", "application/octet-stream");
map.put(".lsf", "video/x-la-asf");
map.put(".lsx", "video/x-la-asf");
map.put(".lzh", "application/octet-stream");
map.put(".m13", "application/x-msmediaview");
map.put(".m14", "application/x-msmediaview");
map.put(".m3u", "audio/x-mpegurl");
map.put(".manifest", "text/cache-manifest");
map.put(".man", "application/x-troff-man");
map.put(".mdb", "application/x-msaccess");
map.put(".me", "application/x-troff-me");
map.put(".mht", "message/rfc822");
map.put(".mhtml", "message/rfc822");
map.put(".mid", "audio/mid");
map.put(".mny", "application/x-msmoney");
map.put(".mov", "video/quicktime");
map.put(".movie", "video/x-sgi-movie");
map.put(".mp2", "video/mpeg");
map.put(".mp3", "audio/mpeg");
map.put(".mpa", "video/mpeg");
map.put(".mpe", "video/mpeg");
map.put(".mpeg", "video/mpeg");
map.put(".mpg", "video/mpeg");
map.put(".mpp", "application/vnd.ms-project");
map.put(".mpv2", "video/mpeg");
map.put(".ms", "application/x-troff-ms");
map.put(".mvb", "application/x-msmediaview");
map.put(".nws", "message/rfc822");
map.put(".oda", "application/oda");
map.put(".odp", "application/odp");
map.put(".ods", "application/ods");
map.put(".odt", "application/odt");
map.put(".p10", "application/pkcs10");
map.put(".p12", "application/x-pkcs12");
map.put(".p7b", "application/x-pkcs7-certificates");
map.put(".p7c", "application/x-pkcs7-mime");
map.put(".p7m", "application/x-pkcs7-mime");
map.put(".p7r", "application/x-pkcs7-certreqresp");
map.put(".p7s", "application/x-pkcs7-signature");
map.put(".pbm", "image/x-portable-bitmap");
map.put(".pdf", "application/pdf");
map.put(".pfx", "application/x-pkcs12");
map.put(".pgm", "image/x-portable-graymap");
map.put(".pko", "application/ynd.ms-pkipko");
map.put(".pma", "application/x-perfmon");
map.put(".pmc", "application/x-perfmon");
map.put(".pml", "application/x-perfmon");
map.put(".pmr", "application/x-perfmon");
map.put(".pmw", "application/x-perfmon");
map.put(".png", "image/png");
map.put(".pnm", "image/x-portable-anymap");
map.put(".pot", "application/vnd.ms-powerpoint");
map.put(".ppm", "image/x-portable-pixmap");
map.put(".pps", "application/vnd.ms-powerpoint");
map.put(".ppt", "application/vnd.ms-powerpoint");
map.put(".prf", "application/pics-rules");
map.put(".ps", "application/postscript");
map.put(".pub", "application/x-mspublisher");
map.put(".qt", "video/quicktime");
map.put(".ra", "audio/x-pn-realaudio");
map.put(".ram", "audio/x-pn-realaudio");
map.put(".ras", "image/x-cmu-raster");
map.put(".rgb", "image/x-rgb");
map.put(".rmi", "audio/mid");
map.put(".roff", "application/x-troff");
map.put(".rtf", "application/rtf");
map.put(".rtx", "text/richtext");
map.put(".scd", "application/x-msschedule");
map.put(".sct", "text/scriptlet");
map.put(".setpay", "application/set-payment-initiation");
map.put(".setreg", "application/set-registration-initiation");
map.put(".sh", "application/x-sh");
map.put(".shar", "application/x-shar");
map.put(".sit", "application/x-stuffit");
map.put(".snd", "audio/basic");
map.put(".spc", "application/x-pkcs7-certificates");
map.put(".spl", "application/futuresplash");
map.put(".src", "application/x-wais-source");
map.put(".sst", "application/vnd.ms-pkicertstore");
map.put(".stl", "application/vnd.ms-pkistl");
map.put(".stm", "text/html");
map.put(".sv4cpio", "application/x-sv4cpio");
map.put(".sv4crc", "application/x-sv4crc");
map.put(".t", "application/x-troff");
map.put(".tar", "application/x-tar");
map.put(".tcl", "application/x-tcl");
map.put(".tex", "application/x-tex");
map.put(".texi", "application/x-texinfo");
map.put(".texinfo", "application/x-texinfo");
map.put(".tgz", "application/x-compressed");
map.put(".tif", "image/tiff");
map.put(".tiff", "image/tiff");
map.put(".tr", "application/x-troff");
map.put(".trm", "application/x-msterminal");
map.put(".tsv", "text/tab-separated-values");
map.put(".txt", "text/plain");
map.put(".uls", "text/iuls");
map.put(".ustar", "application/x-ustar");
map.put(".vcf", "text/x-vcard");
map.put(".vrml", "x-world/x-vrml");
map.put(".wav", "audio/x-wav");
map.put(".wcm", "application/vnd.ms-works");
map.put(".wdb", "application/vnd.ms-works");
map.put(".wks", "application/vnd.ms-works");
map.put(".wmf", "application/x-msmetafile");
map.put(".wps", "application/vnd.ms-works");
map.put(".wri", "application/x-mswrite");
map.put(".wrl", "x-world/x-vrml");
map.put(".wrz", "x-world/x-vrml");
map.put(".xaf", "x-world/x-vrml");
map.put(".xbm", "image/x-xbitmap");
map.put(".xla", "application/vnd.ms-excel");
map.put(".xlc", "application/vnd.ms-excel");
map.put(".xlm", "application/vnd.ms-excel");
map.put(".xls", "application/vnd.ms-excel");
map.put(".xlt", "application/vnd.ms-excel");
map.put(".xlw", "application/vnd.ms-excel");
map.put(".xml", "text/xml");
map.put(".xof", "x-world/x-vrml");
map.put(".xpm", "image/x-xpixmap");
map.put(".xwd", "image/x-xwindowdump");
map.put(".z", "application/x-compressJs");
map.put(".zip", "application/zip");
}
// ------------------------------------------------------------------------
// S T A T I C
// ------------------------------------------------------------------------
private static MimeTypeUtils _instance;
/**
* Return a Singleton instance of helper.
*
* @return Instance of helper.
*/
public static MimeTypeUtils getInstance() {
if (null == _instance) {
_instance = new MimeTypeUtils();
}
return _instance;
}
/**
* @param text
* @return
*/
public static String getMimeType(final String text) {
final String result;
if (StringUtils.hasText(text)) {
if (text.startsWith(".")) {
result = getInstance().getContentTypeFromExtension(text);
} else {
final String ext = PathUtils.getFilenameExtension(text, true);
if (StringUtils.hasText(ext)) {
result = getInstance().getContentTypeFromExtension(ext);
} else {
if (text.indexOf("/") > 1) {
return text;
} else {
result = getInstance().getContentType(text);
}
}
}
} else {
result = MIME_PLAINTEXT;
}
return result;
}
public static void addMimeType(final String fileExtension,
final String mimeType) {
getInstance()._filetypemap.put(fileExtension, mimeType);
}
public static boolean isImageType(final String fileName) {
final String mimetype = MimeTypeUtils.getMimeType(fileName);
return mimetype.startsWith("image");
}
public static boolean isVideoType(final String fileName) {
final String mimetype = MimeTypeUtils.getMimeType(fileName);
return mimetype.startsWith("video");
}
}