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 folder,
16 * based on its mime type and 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 * Returns the resource identifier of an image to use as icon associated to a type of folder.
72 * @param isSharedWithUser flag if the folder is shared with the user
73 * @param isShareByLink flag if the folder is shared by link
74 * @return Identifier of an image resource.
76 public static int getFolderTypeIconId(boolean isSharedWithUser
, boolean isShareByLink
) {
77 if (isSharedWithUser
) {
78 return R
.drawable
.shared_with_me_folder
;
79 } else if (isShareByLink
) {
80 return R
.drawable
.folder_public
;
83 return R
.drawable
.ic_menu_archive
;
87 * determines the icon based on the mime type.
89 * @param mimetypes the mimetypes
90 * @return the icon id, R.drawable.file if the mime type could not be matched at all or was {@code null}
92 private static int determineIconIdByMimeTypeList(List
<String
> mimetypes
) {
93 // no mime type leads to file
94 if (mimetypes
== null
|| mimetypes
.size() < 1) {
95 return R
.drawable
.file
;
98 // search for full mime type mapping
99 for (String mimetype
: mimetypes
) {
100 Integer iconId
= MIMETYPE_TO_ICON_MAPPING
.get(mimetype
);
102 if (iconId
!= null
) {
107 // fallback to main mime type part mapping
108 for (String mimetype
: mimetypes
) {
109 String mainMimetypePart
= mimetype
.split("/")[0];
111 Integer iconId
= MAINMIMETYPE_TO_ICON_MAPPING
.get(mainMimetypePart
);
112 if (iconId
!= null
) {
118 // no match found at all, falling back to file
119 return R
.drawable
.file
;
123 * determines the list of possible mime types for the given file, based on its extension.
125 * @param filename the file name
126 * @return list of possible mime types (ordered), empty list in case no mime types found
128 private static List
<String
> determineMimeTypesByFilename(String filename
) {
129 String fileExtension
= getExtension(filename
);
131 // try detecting the mimetype based on the web app logic equivalent
132 List
<String
> mimeTypeList
= FILE_EXTENSION_TO_MIMETYPE_MAPPING
.get(fileExtension
);
133 if (mimeTypeList
!= null
&& mimeTypeList
.size() > 0) {
136 // try detecting the mime type via android itself
137 String mimeType
= MimeTypeMap
.getSingleton().getMimeTypeFromExtension(fileExtension
);
138 if (mimeType
!= null
) {
139 return Collections
.singletonList(mimeType
);
141 return new ArrayList
<String
>();
147 * provides the file extension of a given filename.
149 * @param filename the filename
150 * @return the file extension
152 private static String
getExtension(String filename
) {
153 String extension
= filename
.substring(filename
.lastIndexOf(".") + 1).toLowerCase();
158 * populates the mapping list: full mime type --> icon.
160 private static void populateMimeTypeIconMapping() {
161 MIMETYPE_TO_ICON_MAPPING
.put("application/coreldraw", R
.drawable
.file_image
);
162 MIMETYPE_TO_ICON_MAPPING
.put("application/epub+zip", R
.drawable
.file_doc
);
163 MIMETYPE_TO_ICON_MAPPING
.put("application/font-sfnt", R
.drawable
.file_image
);
164 MIMETYPE_TO_ICON_MAPPING
.put("application/font-woff", R
.drawable
.file_image
);
165 MIMETYPE_TO_ICON_MAPPING
.put("application/illustrator", R
.drawable
.file_image
);
166 MIMETYPE_TO_ICON_MAPPING
.put("application/javascript", R
.drawable
.file_code
);
167 MIMETYPE_TO_ICON_MAPPING
.put("application/json", R
.drawable
.file_code
);
168 MIMETYPE_TO_ICON_MAPPING
.put("application/msaccess", R
.drawable
.file
);
169 MIMETYPE_TO_ICON_MAPPING
.put("application/msexcel", R
.drawable
.file_xls
);
170 MIMETYPE_TO_ICON_MAPPING
.put("application/mspowerpoint", R
.drawable
.file_ppt
);
171 MIMETYPE_TO_ICON_MAPPING
.put("application/msword", R
.drawable
.file_doc
);
172 MIMETYPE_TO_ICON_MAPPING
.put("application/octet-stream", R
.drawable
.file
);
173 MIMETYPE_TO_ICON_MAPPING
.put("application/postscript", R
.drawable
.file_image
);
174 MIMETYPE_TO_ICON_MAPPING
.put("application/pdf", R
.drawable
.file_pdf
);
175 MIMETYPE_TO_ICON_MAPPING
.put("application/rss+xml", R
.drawable
.file_code
);
176 MIMETYPE_TO_ICON_MAPPING
.put("application/rtf", R
.drawable
.file_doc
);
177 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.android.package-archive", R
.drawable
.file_zip
);
178 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel", R
.drawable
.file_xls
);
179 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.addin.macroEnabled.12", R
.drawable
.file_xls
);
180 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.sheet.binary.macroEnabled.12", R
.drawable
.file_xls
);
181 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.sheet.macroEnabled.12", R
.drawable
.file_xls
);
182 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-excel.template.macroEnabled.12", R
.drawable
.file_xls
);
183 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-fontobject", R
.drawable
.file_image
);
184 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint", R
.drawable
.file_ppt
);
185 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.addin.macroEnabled.12", R
.drawable
.file_ppt
);
186 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.presentation.macroEnabled.12", R
.drawable
.file_ppt
);
187 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.slideshow.macroEnabled.12", R
.drawable
.file_ppt
);
188 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-powerpoint.template.macroEnabled.12", R
.drawable
.file_ppt
);
189 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-word.document.macroEnabled.12", R
.drawable
.file_doc
);
190 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.ms-word.template.macroEnabled.12", R
.drawable
.file_doc
);
191 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.presentation", R
.drawable
.file_ppt
);
192 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.presentation-template", R
.drawable
.file_ppt
);
193 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.spreadsheet", R
.drawable
.file_xls
);
194 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.spreadsheet-template", R
.drawable
.file_xls
);
195 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text", R
.drawable
.file_doc
);
196 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-master", R
.drawable
.file_doc
);
197 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-template", R
.drawable
.file_doc
);
198 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.oasis.opendocument.text-web", R
.drawable
.file_doc
);
199 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.presentation", R
.drawable
.file_ppt
);
200 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.slideshow", R
.drawable
.file_ppt
);
201 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.presentationml.template", R
.drawable
.file_ppt
);
202 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", R
.drawable
.file_xls
);
203 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.spreadsheetml.template", R
.drawable
.file_xls
);
204 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.wordprocessingml.document", R
.drawable
.file_doc
);
205 MIMETYPE_TO_ICON_MAPPING
.put("application/vnd.openxmlformats-officedocument.wordprocessingml.template", R
.drawable
.file_doc
);
206 MIMETYPE_TO_ICON_MAPPING
.put("application/x-7z-compressed", R
.drawable
.file_zip
);
207 MIMETYPE_TO_ICON_MAPPING
.put("application/x-bin", R
.drawable
.file_application
);
208 MIMETYPE_TO_ICON_MAPPING
.put("application/x-cbr", R
.drawable
.file_doc
);
209 MIMETYPE_TO_ICON_MAPPING
.put("application/x-compressed", R
.drawable
.file_zip
);
210 MIMETYPE_TO_ICON_MAPPING
.put("application/x-dcraw", R
.drawable
.file_image
);
211 MIMETYPE_TO_ICON_MAPPING
.put("application/x-deb", R
.drawable
.file_zip
);
212 MIMETYPE_TO_ICON_MAPPING
.put("application/x-font", R
.drawable
.file_image
);
213 MIMETYPE_TO_ICON_MAPPING
.put("application/x-gimp", R
.drawable
.file_image
);
214 MIMETYPE_TO_ICON_MAPPING
.put("application/x-gzip", R
.drawable
.file_zip
);
215 MIMETYPE_TO_ICON_MAPPING
.put("application/x-ms-dos-executable", R
.drawable
.file_application
);
216 MIMETYPE_TO_ICON_MAPPING
.put("application/x-msi", R
.drawable
.file_application
);
217 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-numbers-sffnumbers", R
.drawable
.file_xls
);
218 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-keynote-sffkey", R
.drawable
.file_ppt
);
219 MIMETYPE_TO_ICON_MAPPING
.put("application/x-iwork-pages-sffpages", R
.drawable
.file_doc
);
220 MIMETYPE_TO_ICON_MAPPING
.put("application/x-perl", R
.drawable
.file_code
);
221 MIMETYPE_TO_ICON_MAPPING
.put("application/x-photoshop", R
.drawable
.file_image
);
222 MIMETYPE_TO_ICON_MAPPING
.put("application/x-php", R
.drawable
.file_code
);
223 MIMETYPE_TO_ICON_MAPPING
.put("application/x-rar-compressed", R
.drawable
.file_zip
);
224 MIMETYPE_TO_ICON_MAPPING
.put("application/x-shockwave-flash", R
.drawable
.file_application
);
225 MIMETYPE_TO_ICON_MAPPING
.put("application/x-tar", R
.drawable
.file_zip
);
226 MIMETYPE_TO_ICON_MAPPING
.put("application/x-tex", R
.drawable
.file_doc
);
227 MIMETYPE_TO_ICON_MAPPING
.put("application/xml", R
.drawable
.file_code
);
228 MIMETYPE_TO_ICON_MAPPING
.put("application/yaml", R
.drawable
.file_code
);
229 MIMETYPE_TO_ICON_MAPPING
.put("application/zip", R
.drawable
.file_zip
);
230 MIMETYPE_TO_ICON_MAPPING
.put("database", R
.drawable
.file
);
231 MIMETYPE_TO_ICON_MAPPING
.put("httpd/unix-directory", R
.drawable
.ic_menu_archive
);
232 MIMETYPE_TO_ICON_MAPPING
.put("image/svg+xml", R
.drawable
.file_image
);
233 MIMETYPE_TO_ICON_MAPPING
.put("image/vector", R
.drawable
.file_image
);
234 MIMETYPE_TO_ICON_MAPPING
.put("text/calendar", R
.drawable
.file_calendar
);
235 MIMETYPE_TO_ICON_MAPPING
.put("text/css", R
.drawable
.file_code
);
236 MIMETYPE_TO_ICON_MAPPING
.put("text/csv", R
.drawable
.file_xls
);
237 MIMETYPE_TO_ICON_MAPPING
.put("text/html", R
.drawable
.file_code
);
238 MIMETYPE_TO_ICON_MAPPING
.put("text/vcard", R
.drawable
.file_vcard
);
239 MIMETYPE_TO_ICON_MAPPING
.put("text/x-c", R
.drawable
.file_code
);
240 MIMETYPE_TO_ICON_MAPPING
.put("text/x-c++src", R
.drawable
.file_code
);
241 MIMETYPE_TO_ICON_MAPPING
.put("text/x-h", R
.drawable
.file_code
);
242 MIMETYPE_TO_ICON_MAPPING
.put("text/x-python", R
.drawable
.file_code
);
243 MIMETYPE_TO_ICON_MAPPING
.put("text/x-shellscript", R
.drawable
.file_code
);
244 MIMETYPE_TO_ICON_MAPPING
.put("web", R
.drawable
.file_code
);
245 MIMETYPE_TO_ICON_MAPPING
.put("DIR", R
.drawable
.ic_menu_archive
);
249 * populates the mapping list: main mime type --> icon.
251 private static void populateMainMimeTypeMapping() {
252 MAINMIMETYPE_TO_ICON_MAPPING
.put("audio", R
.drawable
.file_sound
);
253 MAINMIMETYPE_TO_ICON_MAPPING
.put("database", R
.drawable
.file
);
254 MAINMIMETYPE_TO_ICON_MAPPING
.put("httpd", R
.drawable
.file_zip
);
255 MAINMIMETYPE_TO_ICON_MAPPING
.put("image", R
.drawable
.file_image
);
256 MAINMIMETYPE_TO_ICON_MAPPING
.put("text", R
.drawable
.file_doc
);
257 MAINMIMETYPE_TO_ICON_MAPPING
.put("video", R
.drawable
.file_movie
);
258 MAINMIMETYPE_TO_ICON_MAPPING
.put("web", R
.drawable
.file_code
);
262 * populates the mapping list: file extension --> mime type.
264 private static void populateFileExtensionMimeTypeMapping() {
265 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("3gp", Collections
.singletonList("video/3gpp"));
266 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("7z", Collections
.singletonList("application/x-7z-compressed"));
267 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("accdb", Collections
.singletonList("application/msaccess"));
268 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ai", Collections
.singletonList("application/illustrator"));
269 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("apk", Collections
.singletonList("application/vnd.android.package-archive"));
270 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("arw", Collections
.singletonList("image/x-dcraw"));
271 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("avi", Collections
.singletonList("video/x-msvideo"));
272 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bash", Collections
.singletonList("text/x-shellscript"));
273 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("blend", Collections
.singletonList("application/x-blender"));
274 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bin", Collections
.singletonList("application/x-bin"));
275 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bmp", Collections
.singletonList("image/bmp"));
276 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("bpg", Collections
.singletonList("image/bpg"));
277 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cb7", Collections
.singletonList("application/x-cbr"));
278 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cba", Collections
.singletonList("application/x-cbr"));
279 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbr", Collections
.singletonList("application/x-cbr"));
280 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbt", Collections
.singletonList("application/x-cbr"));
281 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbtc", Collections
.singletonList("application/x-cbr"));
282 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cbz", Collections
.singletonList("application/x-cbr"));
283 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cc", Collections
.singletonList("text/x-c"));
284 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cdr", Collections
.singletonList("application/coreldraw"));
285 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cnf", Collections
.singletonList("text/plain"));
286 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("conf", Collections
.singletonList("text/plain"));
287 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cpp", Collections
.singletonList("text/x-c++src"));
288 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cr2", Collections
.singletonList("image/x-dcraw"));
289 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("css", Collections
.singletonList("text/css"));
290 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("csv", Collections
.singletonList("text/csv"));
291 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("cvbdl", Collections
.singletonList("application/x-cbr"));
292 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("c", Collections
.singletonList("text/x-c"));
293 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("c++", Collections
.singletonList("text/x-c++src"));
294 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dcr", Collections
.singletonList("image/x-dcraw"));
295 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("deb", Collections
.singletonList("application/x-deb"));
296 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dng", Collections
.singletonList("image/x-dcraw"));
297 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("doc", Collections
.singletonList("application/msword"));
298 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("docm", Collections
.singletonList("application/vnd.ms-word.document.macroEnabled.12"));
299 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("docx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
300 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dot", Collections
.singletonList("application/msword"));
301 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dotx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.wordprocessingml.template"));
302 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("dv", Collections
.singletonList("video/dv"));
303 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("eot", Collections
.singletonList("application/vnd.ms-fontobject"));
304 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("epub", Collections
.singletonList("application/epub+zip"));
305 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("eps", Collections
.singletonList("application/postscript"));
306 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("erf", Collections
.singletonList("image/x-dcraw"));
307 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("exe", Collections
.singletonList("application/x-ms-dos-executable"));
308 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("flac", Collections
.singletonList("audio/flac"));
309 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("flv", Collections
.singletonList("video/x-flv"));
310 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gif", Collections
.singletonList("image/gif"));
311 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gz", Collections
.singletonList("application/x-gzip"));
312 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gzip", Collections
.singletonList("application/x-gzip"));
313 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("h", Collections
.singletonList("text/x-h"));
314 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("hh", Collections
.singletonList("text/x-h"));
315 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("html", Arrays
.asList("text/html", "text/plain"));
316 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("htm", Arrays
.asList("text/html", "text/plain"));
317 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ical", Collections
.singletonList("text/calendar"));
318 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ics", Collections
.singletonList("text/calendar"));
319 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("iiq", Collections
.singletonList("image/x-dcraw"));
320 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("impress", Collections
.singletonList("text/impress"));
321 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jpeg", Collections
.singletonList("image/jpeg"));
322 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jpg", Collections
.singletonList("image/jpeg"));
323 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("jps", Collections
.singletonList("image/jpeg"));
324 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("js", Arrays
.asList("application/javascript", "text/plain"));
325 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("json", Arrays
.asList("application/json", "text/plain"));
326 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("k25", Collections
.singletonList("image/x-dcraw"));
327 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("kdc", Collections
.singletonList("image/x-dcraw"));
328 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("key", Collections
.singletonList("application/x-iwork-keynote-sffkey"));
329 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("keynote", Collections
.singletonList("application/x-iwork-keynote-sffkey"));
330 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("kra", Collections
.singletonList("application/x-krita"));
331 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("m2t", Collections
.singletonList("video/mp2t"));
332 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("m4v", Collections
.singletonList("video/mp4"));
333 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("markdown", Collections
.singletonList("text/markdown"));
334 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdown", Collections
.singletonList("text/markdown"));
335 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("md", Collections
.singletonList("text/markdown"));
336 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdb", Collections
.singletonList("application/msaccess"));
337 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mdwn", Collections
.singletonList("text/markdown"));
338 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mkd", Collections
.singletonList("text/markdown"));
339 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mef", Collections
.singletonList("image/x-dcraw"));
340 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mkv", Collections
.singletonList("video/x-matroska"));
341 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mobi", Collections
.singletonList("application/x-mobipocket-ebook"));
342 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mov", Collections
.singletonList("video/quicktime"));
343 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mp3", Collections
.singletonList("audio/mpeg"));
344 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mp4", Collections
.singletonList("video/mp4"));
345 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpeg", Collections
.singletonList("video/mpeg"));
346 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpg", Collections
.singletonList("video/mpeg"));
347 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mpo", Collections
.singletonList("image/jpeg"));
348 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("msi", Collections
.singletonList("application/x-msi"));
349 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mts", Collections
.singletonList("video/MP2T"));
350 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("mt2s", Collections
.singletonList("video/MP2T"));
351 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("nef", Collections
.singletonList("image/x-dcraw"));
352 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("numbers", Collections
.singletonList("application/x-iwork-numbers-sffnumbers"));
353 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odf", Collections
.singletonList("application/vnd.oasis.opendocument.formula"));
354 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odg", Collections
.singletonList("application/vnd.oasis.opendocument.graphics"));
355 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odp", Collections
.singletonList("application/vnd.oasis.opendocument.presentation"));
356 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ods", Collections
.singletonList("application/vnd.oasis.opendocument.spreadsheet"));
357 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("odt", Collections
.singletonList("application/vnd.oasis.opendocument.text"));
358 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("oga", Collections
.singletonList("audio/ogg"));
359 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ogg", Collections
.singletonList("audio/ogg"));
360 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ogv", Collections
.singletonList("video/ogg"));
361 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("opus", Collections
.singletonList("audio/ogg"));
362 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("orf", Collections
.singletonList("image/x-dcraw"));
363 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("otf", Collections
.singletonList("application/font-sfnt"));
364 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pages", Collections
.singletonList("application/x-iwork-pages-sffpages"));
365 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pdf", Collections
.singletonList("application/pdf"));
366 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pfb", Collections
.singletonList("application/x-font"));
367 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pef", Collections
.singletonList("image/x-dcraw"));
368 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("php", Collections
.singletonList("application/x-php"));
369 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pl", Collections
.singletonList("application/x-perl"));
370 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("png", Collections
.singletonList("image/png"));
371 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pot", Collections
.singletonList("application/vnd.ms-powerpoint"));
372 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("potm", Collections
.singletonList("application/vnd.ms-powerpoint.template.macroEnabled.12"));
373 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("potx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.template"));
374 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppa", Collections
.singletonList("application/vnd.ms-powerpoint"));
375 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppam", Collections
.singletonList("application/vnd.ms-powerpoint.addin.macroEnabled.12"));
376 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pps", Collections
.singletonList("application/vnd.ms-powerpoint"));
377 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppsm", Collections
.singletonList("application/vnd.ms-powerpoint.slideshow.macroEnabled.12"));
378 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppsx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.slideshow"));
379 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ppt", Collections
.singletonList("application/vnd.ms-powerpoint"));
380 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pptm", Collections
.singletonList("application/vnd.ms-powerpoint.presentation.macroEnabled.12"));
381 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("pptx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.presentationml.presentation"));
382 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ps", Collections
.singletonList("application/postscript"));
383 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("psd", Collections
.singletonList("application/x-photoshop"));
384 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("py", Collections
.singletonList("text/x-python"));
385 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("raf", Collections
.singletonList("image/x-dcraw"));
386 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rar", Collections
.singletonList("application/x-rar-compressed"));
387 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("reveal", Collections
.singletonList("text/reveal"));
388 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rtf", Collections
.singletonList("application/rtf"));
389 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("rw2", Collections
.singletonList("image/x-dcraw"));
390 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sgf", Collections
.singletonList("application/sgf"));
391 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sh-lib", Collections
.singletonList("text/x-shellscript"));
392 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sh", Collections
.singletonList("text/x-shellscript"));
393 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("srf", Collections
.singletonList("image/x-dcraw"));
394 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("sr2", Collections
.singletonList("image/x-dcraw"));
395 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("svg", Arrays
.asList("image/svg+xml", "text/plain"));
396 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("swf", Arrays
.asList("application/x-shockwave-flash", "application/octet-stream"));
397 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tar", Collections
.singletonList("application/x-tar"));
398 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("gz", Collections
.singletonList("application/x-compressed"));
399 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tex", Collections
.singletonList("application/x-tex"));
400 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tgz", Collections
.singletonList("application/x-compressed"));
401 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tiff", Collections
.singletonList("image/tiff"));
402 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("tif", Collections
.singletonList("image/tiff"));
403 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("ttf", Collections
.singletonList("application/font-sfnt"));
404 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("txt", Collections
.singletonList("text/plain"));
405 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vcard", Collections
.singletonList("text/vcard"));
406 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vcf", Collections
.singletonList("text/vcard"));
407 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("vob", Collections
.singletonList("video/dvd"));
408 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("wav", Collections
.singletonList("audio/wav"));
409 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("webm", Collections
.singletonList("video/webm"));
410 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("woff", Collections
.singletonList("application/font-woff"));
411 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("wmv", Collections
.singletonList("video/x-ms-wmv"));
412 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xcf", Collections
.singletonList("application/x-gimp"));
413 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xla", Collections
.singletonList("application/vnd.ms-excel"));
414 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlam", Collections
.singletonList("application/vnd.ms-excel.addin.macroEnabled.12"));
415 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xls", Collections
.singletonList("application/vnd.ms-excel"));
416 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsb", Collections
.singletonList("application/vnd.ms-excel.sheet.binary.macroEnabled.12"));
417 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsm", Collections
.singletonList("application/vnd.ms-excel.sheet.macroEnabled.12"));
418 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlsx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
419 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xlt", Collections
.singletonList("application/vnd.ms-excel"));
420 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xltm", Collections
.singletonList("application/vnd.ms-excel.template.macroEnabled.12"));
421 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xltx", Collections
.singletonList("application/vnd.openxmlformats-officedocument.spreadsheetml.template"));
422 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xml", Arrays
.asList("application/xml", "text/plain"));
423 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("xrf", Collections
.singletonList("image/x-dcraw"));
424 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("yaml", Arrays
.asList("application/yaml", "text/plain"));
425 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("yml", Arrays
.asList("application/yaml", "text/plain"));
426 FILE_EXTENSION_TO_MIMETYPE_MAPPING
.put("zip", Collections
.singletonList("application/zip"));