1 package com
.owncloud
.android
.utils
;
3 import android
.webkit
.MimeTypeMap
;
5 import com
.owncloud
.android
.R
;
7 import java
.util
.ArrayList
;
8 import java
.util
.Arrays
;
9 import java
.util
.Collections
;
10 import java
.util
.HashMap
;
11 import java
.util
.List
;
15 * Helper class for detecting the right icon for a file, based on its mimen type and/or file extension.
17 public class MimetypeIconUtil
{
19 private static final Map
<String
, Integer
> MIMETYPE_TO_ICON_MAPPING
= new HashMap
<String
, Integer
>();
20 private static final Map
<String
, Integer
> MAINMIMETYPE_TO_ICON_MAPPING
= new HashMap
<String
, Integer
>();
21 private static final Map
<String
, List
<String
>> FILE_EXTENSION_TO_MIMETYPE_MAPPING
=
22 new HashMap
<String
, List
<String
>>();
25 populateFileExtensionMimeTypeMapping();
26 populateMimeTypeIconMapping();
27 populateMainMimeTypeMapping();
31 * Returns the resource identifier of an image to use as icon associated to a known MIME type.
33 * @param mimetype MIME type string; if NULL, the method tries to guess it from the extension in filename
34 * @param filename Name, with extension.
35 * @return Identifier of an image resource.
37 public static int getFileTypeIconId(String mimetype
, String filename
) {
38 List
<String
> possibleMimeTypes
;
39 if (mimetype
== null
) {
40 possibleMimeTypes
= determineMimeTypesByFilename(filename
);
42 possibleMimeTypes
= Collections
.singletonList(mimetype
);
45 return determineIconIdByMimeTypeList(possibleMimeTypes
);
49 * determines the icon based on the mime type.
51 * @param mimetypes the mimetypes
52 * @return the icon id, R.drawable.file if the mime type could not be matched at all or was {@code null}
54 private static int determineIconIdByMimeTypeList(List
<String
> mimetypes
) {
55 // no mime type leads to file
56 if (mimetypes
== null
|| mimetypes
.size() < 1) {
57 return R
.drawable
.file
;
60 // search for full mime type mapping
61 for (String mimetype
: mimetypes
) {
62 Integer iconId
= MIMETYPE_TO_ICON_MAPPING
.get(mimetype
);
69 // fallback to main mime type part mapping
70 for (String mimetype
: mimetypes
) {
71 String mainMimetypePart
= mimetype
.split("/")[0];
73 Integer iconId
= MAINMIMETYPE_TO_ICON_MAPPING
.get(mainMimetypePart
);
80 // no match found at all, falling back to file
81 return R
.drawable
.file
;
85 * determines the list of possible mime types for the given file, based on its extension.
87 * @param filename the file name
88 * @return list of possible mime types (ordered), empty list in case no mime types found
90 private static List
<String
> determineMimeTypesByFilename(String filename
) {
91 String fileExtension
= getExtension(filename
);
93 // try detecting the mimetype based on the web app logic equivalent
94 List
<String
> mimeTypeList
= FILE_EXTENSION_TO_MIMETYPE_MAPPING
.get(fileExtension
);
95 if (mimeTypeList
!= null
&& mimeTypeList
.size() > 0) {
98 // try detecting the mime type via android itself
99 String mimeType
= MimeTypeMap
.getSingleton().getMimeTypeFromExtension(fileExtension
);
100 if (mimeType
!= null
) {
101 return Collections
.singletonList(mimeType
);
103 return new ArrayList
<String
>();
108 private static String
getExtension(String filename
) {
109 String extension
= filename
.substring(filename
.lastIndexOf(".") + 1).toLowerCase();
114 * populates the mapping list: full mime type --> icon.
116 private static void populateMimeTypeIconMapping() {
117 MIMETYPE_TO_ICON_MAPPING
.put("application/coreldraw", R
.drawable
.file_image
);
118 MIMETYPE_TO_ICON_MAPPING
.put("application/epub+zip", R
.drawable
.file_doc
);
119 MIMETYPE_TO_ICON_MAPPING
.put("application/font-sfnt", R
.drawable
.file_image
);
120 MIMETYPE_TO_ICON_MAPPING
.put("application/font-woff", R
.drawable
.file_image
);
121 MIMETYPE_TO_ICON_MAPPING
.put("application/illustrator", R
.drawable
.file_image
);
122 MIMETYPE_TO_ICON_MAPPING
.put("application/javascript", R
.drawable
.file_code
);
123 MIMETYPE_TO_ICON_MAPPING
.put("application/json", R
.drawable
.file_code
);
124 MIMETYPE_TO_ICON_MAPPING
.put("application/msaccess", R
.drawable
.file
);
125 MIMETYPE_TO_ICON_MAPPING
.put("application/msexcel", R
.drawable
.file_xls
);
126 MIMETYPE_TO_ICON_MAPPING
.put("application/mspowerpoint", R
.drawable
.file_ppt
);
127 MIMETYPE_TO_ICON_MAPPING
.put("application/msword", R
.drawable
.file_doc
);
128 MIMETYPE_TO_ICON_MAPPING
.put("application/octet-stream", R
.drawable
.file
);
129 MIMETYPE_TO_ICON_MAPPING
.put("application/postscript", R
.drawable
.file_image
);
130 MIMETYPE_TO_ICON_MAPPING
.put("application/pdf", R
.drawable
.file_pdf
);
131 MIMETYPE_TO_ICON_MAPPING
.put("application/rss+xml", R
.drawable
.file_code
);
132 MIMETYPE_TO_ICON_MAPPING
.put("application/rtf", R
.drawable
.file_doc
);
133 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.android.package-archive", R
.drawable
.file_zip
);
134 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel", R
.drawable
.file_xls
);
135 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.addin.macroEnabled.12", R
.drawable
.file_xls
);
136 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.sheet.binary.macroEnabled.12", R
.drawable
.file_xls
);
137 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.sheet.macroEnabled.12", R
.drawable
.file_xls
);
138 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.template.macroEnabled.12", R
.drawable
.file_xls
);
139 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-fontobject", R
.drawable
.file_image
);
140 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint", R
.drawable
.file_ppt
);
141 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.addin.macroEnabled.12", R
.drawable
.file_ppt
);
142 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.presentation.macroEnabled.12", R
.drawable
.file_ppt
);
143 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.slideshow.macroEnabled.12", R
.drawable
.file_ppt
);
144 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.template.macroEnabled.12", R
.drawable
.file_ppt
);
145 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-word.document.macroEnabled.12", R
.drawable
.file_doc
);
146 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-word.template.macroEnabled.12", R
.drawable
.file_doc
);
147 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.presentation", R
.drawable
.file_ppt
);
148 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.presentation-template", R
.drawable
.file_ppt
);
149 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.spreadsheet", R
.drawable
.file_xls
);
150 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.spreadsheet-template", R
.drawable
.file_xls
);
151 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text", R
.drawable
.file_doc
);
152 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-master", R
.drawable
.file_doc
);
153 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-template", R
.drawable
.file_doc
);
154 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-web", R
.drawable
.file_doc
);
155 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", R
.drawable
.file_ppt
);
156 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", R
.drawable
.file_ppt
);
157 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.template", R
.drawable
.file_ppt
);
158 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", R
.drawable
.file_xls
);
159 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", R
.drawable
.file_xls
);
160 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", R
.drawable
.file_doc
);
161 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R
.drawable
.file_doc
);
162 MIMETYPE_TO_ICON_MAPPING
.put("application/x-7z-compressed", R
.drawable
.file_zip
);
163 MIMETYPE_TO_ICON_MAPPING
.put("application/x-bin", R
.drawable
.file_application
);
164 MIMETYPE_TO_ICON_MAPPING
.put("application/x-cbr", R
.drawable
.file_doc
);
165 MIMETYPE_TO_ICON_MAPPING
.put("application/x-compressed", R
.drawable
.file_zip
);
166 MIMETYPE_TO_ICON_MAPPING
.put("application/x-dcraw", R
.drawable
.file_image
);
167 MIMETYPE_TO_ICON_MAPPING
.put("application/x-deb", R
.drawable
.file_zip
);
168 MIMETYPE_TO_ICON_MAPPING
.put("application/x-font", R
.drawable
.file_image
);
169 MIMETYPE_TO_ICON_MAPPING
.put("application/x-gimp", R
.drawable
.file_image
);
170 MIMETYPE_TO_ICON_MAPPING
.put("application/x-gzip", R
.drawable
.file_zip
);
171 MIMETYPE_TO_ICON_MAPPING
.put("application/x-ms-dos-executable", R
.drawable
.file_application
);
172 MIMETYPE_TO_ICON_MAPPING
.put("application/x-msi", R
.drawable
.file_application
);
173 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-numbers-sffnumbers", R
.drawable
.file_xls
);
174 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-keynote-sffkey", R
.drawable
.file_ppt
);
175 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-pages-sffpages", R
.drawable
.file_doc
);
176 MIMETYPE_TO_ICON_MAPPING
.put("application/x-perl", R
.drawable
.file_code
);
177 MIMETYPE_TO_ICON_MAPPING
.put("application/x-photoshop", R
.drawable
.file_image
);
178 MIMETYPE_TO_ICON_MAPPING
.put("application/x-php", R
.drawable
.file_code
);
179 MIMETYPE_TO_ICON_MAPPING
.put("application/x-rar-compressed", R
.drawable
.file_zip
);
180 MIMETYPE_TO_ICON_MAPPING
.put("application/x-shockwave-flash", R
.drawable
.file_application
);
181 MIMETYPE_TO_ICON_MAPPING
.put("application/x-tar", R
.drawable
.file_zip
);
182 MIMETYPE_TO_ICON_MAPPING
.put("application/x-tex", R
.drawable
.file_doc
);
183 MIMETYPE_TO_ICON_MAPPING
.put("application/xml", R
.drawable
.file_code
);
184 MIMETYPE_TO_ICON_MAPPING
.put("application/yaml", R
.drawable
.file_code
);
185 MIMETYPE_TO_ICON_MAPPING
.put("application/zip", R
.drawable
.file_zip
);
186 MIMETYPE_TO_ICON_MAPPING
.put("database", R
.drawable
.file
);
187 MIMETYPE_TO_ICON_MAPPING
.put("httpd/unix-directory", R
.drawable
.ic_menu_archive
);
188 MIMETYPE_TO_ICON_MAPPING
.put("image/svg+xml", R
.drawable
.file_image
);
189 MIMETYPE_TO_ICON_MAPPING
.put("image/vector", R
.drawable
.file_image
);
190 MIMETYPE_TO_ICON_MAPPING
.put("text/calendar", R
.drawable
.file_calendar
);
191 MIMETYPE_TO_ICON_MAPPING
.put("text/css", R
.drawable
.file_code
);
192 MIMETYPE_TO_ICON_MAPPING
.put("text/csv", R
.drawable
.file_xls
);
193 MIMETYPE_TO_ICON_MAPPING
.put("text/html", R
.drawable
.file_code
);
194 MIMETYPE_TO_ICON_MAPPING
.put("text/vcard", R
.drawable
.file_vcard
);
195 MIMETYPE_TO_ICON_MAPPING
.put("text/x-c", R
.drawable
.file_code
);
196 MIMETYPE_TO_ICON_MAPPING
.put("text/x-c++src", R
.drawable
.file_code
);
197 MIMETYPE_TO_ICON_MAPPING
.put("text/x-h", R
.drawable
.file_code
);
198 MIMETYPE_TO_ICON_MAPPING
.put("text/x-python", R
.drawable
.file_code
);
199 MIMETYPE_TO_ICON_MAPPING
.put("text/x-shellscript", R
.drawable
.file_code
);
200 MIMETYPE_TO_ICON_MAPPING
.put("web", R
.drawable
.file_code
);
201 MIMETYPE_TO_ICON_MAPPING
.put("DIR", R
.drawable
.ic_menu_archive
);
205 * populates the mapping list: main mime type --> icon.
207 private static void populateMainMimeTypeMapping() {
208 MAINMIMETYPE_TO_ICON_MAPPING
.put("audio", R
.drawable
.file_sound
);
209 MAINMIMETYPE_TO_ICON_MAPPING
.put("database", R
.drawable
.file
);
210 MAINMIMETYPE_TO_ICON_MAPPING
.put("httpd", R
.drawable
.file_zip
);
211 MAINMIMETYPE_TO_ICON_MAPPING
.put("image", R
.drawable
.file_image
);
212 MAINMIMETYPE_TO_ICON_MAPPING
.put("text", R
.drawable
.file_doc
);
213 MAINMIMETYPE_TO_ICON_MAPPING
.put("video", R
.drawable
.file_movie
);
214 MAINMIMETYPE_TO_ICON_MAPPING
.put("web", R
.drawable
.file_code
);
218 * populates the mapping list: file extension --> mime type.
220 private static void populateFileExtensionMimeTypeMapping() {
221 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("3gp", Collections
.singletonList("video/3gpp"));
222 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("7z", Collections
.singletonList("application/x-7z-compressed"));
223 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("accdb", Collections
.singletonList("application/msaccess"));
224 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ai", Collections
.singletonList("application/illustrator"));
225 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("apk", Collections
.singletonList("application/vnd.android.package-archive"));
226 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("arw", Collections
.singletonList("image/x-dcraw"));
227 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("avi", Collections
.singletonList("video/x-msvideo"));
228 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bash", Collections
.singletonList("text/x-shellscript"));
229 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("blend", Collections
.singletonList("application/x-blender"));
230 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bin", Collections
.singletonList("application/x-bin"));
231 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bmp", Collections
.singletonList("image/bmp"));
232 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bpg", Collections
.singletonList("image/bpg"));
233 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cb7", Collections
.singletonList("application/x-cbr"));
234 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cba", Collections
.singletonList("application/x-cbr"));
235 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbr", Collections
.singletonList("application/x-cbr"));
236 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbt", Collections
.singletonList("application/x-cbr"));
237 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbtc", Collections
.singletonList("application/x-cbr"));
238 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbz", Collections
.singletonList("application/x-cbr"));
239 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cc", Collections
.singletonList("text/x-c"));
240 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cdr", Collections
.singletonList("application/coreldraw"));
241 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cnf", Collections
.singletonList("text/plain"));
242 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("conf", Collections
.singletonList("text/plain"));
243 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cpp", Collections
.singletonList("text/x-c++src"));
244 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cr2", Collections
.singletonList("image/x-dcraw"));
245 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("css", Collections
.singletonList("text/css"));
246 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("csv", Collections
.singletonList("text/csv"));
247 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cvbdl", Collections
.singletonList("application/x-cbr"));
248 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("c", Collections
.singletonList("text/x-c"));
249 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("c++", Collections
.singletonList("text/x-c++src"));
250 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dcr", Collections
.singletonList("image/x-dcraw"));
251 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("deb", Collections
.singletonList("application/x-deb"));
252 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dng", Collections
.singletonList("image/x-dcraw"));
253 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("doc", Collections
.singletonList("application/msword"));
254 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("docm", Collections
.singletonList("application/vnd.ms-word.document.macroEnabled.12"));
255 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("docx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
256 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dot", Collections
.singletonList("application/msword"));
257 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dotx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.template"));
258 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dv", Collections
.singletonList("video/dv"));
259 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("eot", Collections
.singletonList("application/vnd.ms-fontobject"));
260 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("epub", Collections
.singletonList("application/epub+zip"));
261 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("eps", Collections
.singletonList("application/postscript"));
262 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("erf", Collections
.singletonList("image/x-dcraw"));
263 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("exe", Collections
.singletonList("application/x-ms-dos-executable"));
264 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("flac", Collections
.singletonList("audio/flac"));
265 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("flv", Collections
.singletonList("video/x-flv"));
266 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gif", Collections
.singletonList("image/gif"));
267 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gz", Collections
.singletonList("application/x-gzip"));
268 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gzip", Collections
.singletonList("application/x-gzip"));
269 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("h", Collections
.singletonList("text/x-h"));
270 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("hh", Collections
.singletonList("text/x-h"));
271 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("html", Arrays
.asList("text/html", "text/plain"));
272 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("htm", Arrays
.asList("text/html", "text/plain"));
273 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ical", Collections
.singletonList("text/calendar"));
274 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ics", Collections
.singletonList("text/calendar"));
275 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("iiq", Collections
.singletonList("image/x-dcraw"));
276 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("impress", Collections
.singletonList("text/impress"));
277 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jpeg", Collections
.singletonList("image/jpeg"));
278 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jpg", Collections
.singletonList("image/jpeg"));
279 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jps", Collections
.singletonList("image/jpeg"));
280 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("js", Arrays
.asList("application/javascript", "text/plain"));
281 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("json", Arrays
.asList("application/json", "text/plain"));
282 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("k25", Collections
.singletonList("image/x-dcraw"));
283 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("kdc", Collections
.singletonList("image/x-dcraw"));
284 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("key", Collections
.singletonList("application/x-iwork-keynote-sffkey"));
285 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("keynote", Collections
.singletonList("application/x-iwork-keynote-sffkey"));
286 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("kra", Collections
.singletonList("application/x-krita"));
287 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("m2t", Collections
.singletonList("video/mp2t"));
288 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("m4v", Collections
.singletonList("video/mp4"));
289 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("markdown", Collections
.singletonList("text/markdown"));
290 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdown", Collections
.singletonList("text/markdown"));
291 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("md", Collections
.singletonList("text/markdown"));
292 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdb", Collections
.singletonList("application/msaccess"));
293 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdwn", Collections
.singletonList("text/markdown"));
294 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mkd", Collections
.singletonList("text/markdown"));
295 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mef", Collections
.singletonList("image/x-dcraw"));
296 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mkv", Collections
.singletonList("video/x-matroska"));
297 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mobi", Collections
.singletonList("application/x-mobipocket-ebook"));
298 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mov", Collections
.singletonList("video/quicktime"));
299 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mp3", Collections
.singletonList("audio/mpeg"));
300 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mp4", Collections
.singletonList("video/mp4"));
301 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpeg", Collections
.singletonList("video/mpeg"));
302 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpg", Collections
.singletonList("video/mpeg"));
303 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpo", Collections
.singletonList("image/jpeg"));
304 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("msi", Collections
.singletonList("application/x-msi"));
305 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mts", Collections
.singletonList("video/MP2T"));
306 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mt2s", Collections
.singletonList("video/MP2T"));
307 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("nef", Collections
.singletonList("image/x-dcraw"));
308 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("numbers", Collections
.singletonList("application/x-iwork-numbers-sffnumbers"));
309 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odf", Collections
.singletonList("application/vnd.oasis.opendocument.formula"));
310 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odg", Collections
.singletonList("application/vnd.oasis.opendocument.graphics"));
311 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odp", Collections
.singletonList("application/vnd.oasis.opendocument.presentation"));
312 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ods", Collections
.singletonList("application/vnd.oasis.opendocument.spreadsheet"));
313 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odt", Collections
.singletonList("application/vnd.oasis.opendocument.text"));
314 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("oga", Collections
.singletonList("audio/ogg"));
315 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ogg", Collections
.singletonList("audio/ogg"));
316 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ogv", Collections
.singletonList("video/ogg"));
317 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("opus", Collections
.singletonList("audio/ogg"));
318 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("orf", Collections
.singletonList("image/x-dcraw"));
319 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("otf", Collections
.singletonList("application/font-sfnt"));
320 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pages", Collections
.singletonList("application/x-iwork-pages-sffpages"));
321 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pdf", Collections
.singletonList("application/pdf"));
322 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pfb", Collections
.singletonList("application/x-font"));
323 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pef", Collections
.singletonList("image/x-dcraw"));
324 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("php", Collections
.singletonList("application/x-php"));
325 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pl", Collections
.singletonList("application/x-perl"));
326 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("png", Collections
.singletonList("image/png"));
327 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pot", Collections
.singletonList("application/vnd.ms-powerpoint"));
328 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("potm", Collections
.singletonList("application/vnd.ms-powerpoint.template.macroEnabled.12"));
329 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("potx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.template"));
330 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppa", Collections
.singletonList("application/vnd.ms-powerpoint"));
331 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppam", Collections
.singletonList("application/vnd.ms-powerpoint.addin.macroEnabled.12"));
332 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pps", Collections
.singletonList("application/vnd.ms-powerpoint"));
333 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppsm", Collections
.singletonList("application/vnd.ms-powerpoint.slideshow.macroEnabled.12"));
334 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppsx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.slideshow"));
335 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppt", Collections
.singletonList("application/vnd.ms-powerpoint"));
336 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pptm", Collections
.singletonList("application/vnd.ms-powerpoint.presentation.macroEnabled.12"));
337 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pptx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.presentation"));
338 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ps", Collections
.singletonList("application/postscript"));
339 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("psd", Collections
.singletonList("application/x-photoshop"));
340 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("py", Collections
.singletonList("text/x-python"));
341 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("raf", Collections
.singletonList("image/x-dcraw"));
342 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rar", Collections
.singletonList("application/x-rar-compressed"));
343 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("reveal", Collections
.singletonList("text/reveal"));
344 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rtf", Collections
.singletonList("application/rtf"));
345 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rw2", Collections
.singletonList("image/x-dcraw"));
346 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sgf", Collections
.singletonList("application/sgf"));
347 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sh-lib", Collections
.singletonList("text/x-shellscript"));
348 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sh", Collections
.singletonList("text/x-shellscript"));
349 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("srf", Collections
.singletonList("image/x-dcraw"));
350 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sr2", Collections
.singletonList("image/x-dcraw"));
351 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("svg", Arrays
.asList("image/svg+xml", "text/plain"));
352 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("swf", Arrays
.asList("application/x-shockwave-flash", "application/octet-stream"));
353 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tar", Collections
.singletonList("application/x-tar"));
354 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gz", Collections
.singletonList("application/x-compressed"));
355 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tex", Collections
.singletonList("application/x-tex"));
356 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tgz", Collections
.singletonList("application/x-compressed"));
357 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tiff", Collections
.singletonList("image/tiff"));
358 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tif", Collections
.singletonList("image/tiff"));
359 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ttf", Collections
.singletonList("application/font-sfnt"));
360 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("txt", Collections
.singletonList("text/plain"));
361 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vcard", Collections
.singletonList("text/vcard"));
362 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vcf", Collections
.singletonList("text/vcard"));
363 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vob", Collections
.singletonList("video/dvd"));
364 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("wav", Collections
.singletonList("audio/wav"));
365 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("webm", Collections
.singletonList("video/webm"));
366 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("woff", Collections
.singletonList("application/font-woff"));
367 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("wmv", Collections
.singletonList("video/x-ms-wmv"));
368 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xcf", Collections
.singletonList("application/x-gimp"));
369 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xla", Collections
.singletonList("application/vnd.ms-excel"));
370 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlam", Collections
.singletonList("application/vnd.ms-excel.addin.macroEnabled.12"));
371 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xls", Collections
.singletonList("application/vnd.ms-excel"));
372 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsb", Collections
.singletonList("application/vnd.ms-excel.sheet.binary.macroEnabled.12"));
373 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsm", Collections
.singletonList("application/vnd.ms-excel.sheet.macroEnabled.12"));
374 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
375 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlt", Collections
.singletonList("application/vnd.ms-excel"));
376 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xltm", Collections
.singletonList("application/vnd.ms-excel.template.macroEnabled.12"));
377 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xltx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.template"));
378 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xml", Arrays
.asList("application/xml", "text/plain"));
379 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xrf", Collections
.singletonList("image/x-dcraw"));
380 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("yaml", Arrays
.asList("application/yaml", "text/plain"));
381 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("yml", Arrays
.asList("application/yaml", "text/plain"));
382 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("zip", Collections
.singletonList("application/zip"));