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