whitespace fixups
[jSite2.git] / src / net / pterodactylus / util / io / MimeTypes.java
1 /*
2  * jSite2 - MIMETypes.java -
3  * Copyright © 2008 David Roden
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 package net.pterodactylus.util.io;
21
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
28 /**
29  * Handles MIME types and maps them to file extensions.
30  *
31  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
32  */
33 public class MimeTypes {
34
35         /** The default MIME type for unknown extensions. */
36         public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
37
38         /** List of all MIME types. */
39         private static final List<String> mimeTypes = new ArrayList<String>();
40
41         /** Maps from MIME types to registered extensions. */
42         private static final Map<String, List<String>> mimeTypeExtensions = new HashMap<String, List<String>>();
43
44         /** Maps from extensions to registered MIME types. */
45         private static final Map<String, List<String>> extensionMimeTypes = new HashMap<String, List<String>>();
46
47         /* MIME type list generated from my /etc/mime.types. */
48         static {
49                 addMimeType("application/activemessage");
50                 addMimeType("application/andrew-inset", "ez");
51                 addMimeType("application/applefile");
52                 addMimeType("application/atomicmail");
53                 addMimeType("application/batch-SMTP");
54                 addMimeType("application/beep+xml");
55                 addMimeType("application/cals-1840");
56                 addMimeType("application/commonground");
57                 addMimeType("application/cu-seeme", "cu");
58                 addMimeType("application/cybercash");
59                 addMimeType("application/dca-rft");
60                 addMimeType("application/dec-dx");
61                 addMimeType("application/docbook+xml");
62                 addMimeType("application/dsptype", "tsp");
63                 addMimeType("application/dvcs");
64                 addMimeType("application/edi-consent");
65                 addMimeType("application/edi-x12");
66                 addMimeType("application/edifact");
67                 addMimeType("application/eshop");
68                 addMimeType("application/font-tdpfr");
69                 addMimeType("application/futuresplash", "spl");
70                 addMimeType("application/ghostview");
71                 addMimeType("application/hta", "hta");
72                 addMimeType("application/http");
73                 addMimeType("application/hyperstudio");
74                 addMimeType("application/iges");
75                 addMimeType("application/index");
76                 addMimeType("application/index.cmd");
77                 addMimeType("application/index.obj");
78                 addMimeType("application/index.response");
79                 addMimeType("application/index.vnd");
80                 addMimeType("application/iotp");
81                 addMimeType("application/ipp");
82                 addMimeType("application/isup");
83                 addMimeType("application/java-archive", "jar");
84                 addMimeType("application/java-serialized-object", "ser");
85                 addMimeType("application/java-vm", "class");
86                 addMimeType("application/mac-binhex40", "hqx");
87                 addMimeType("application/mac-compactpro", "cpt");
88                 addMimeType("application/macwriteii");
89                 addMimeType("application/marc");
90                 addMimeType("application/mathematica", "nb");
91                 addMimeType("application/mathematica-old");
92                 addMimeType("application/msaccess", "mdb");
93                 addMimeType("application/msword", "doc", "dot");
94                 addMimeType("application/news-message-id");
95                 addMimeType("application/news-transmission");
96                 addMimeType("application/ocsp-request");
97                 addMimeType("application/ocsp-response");
98                 addMimeType("application/octet-stream", "bin");
99                 addMimeType("application/oda", "oda");
100                 addMimeType("application/ogg", "ogg");
101                 addMimeType("application/parityfec");
102                 addMimeType("application/pdf", "pdf");
103                 addMimeType("application/pgp-encrypted");
104                 addMimeType("application/pgp-keys", "key");
105                 addMimeType("application/pgp-signature", "pgp");
106                 addMimeType("application/pics-rules", "prf");
107                 addMimeType("application/pkcs10");
108                 addMimeType("application/pkcs7-mime");
109                 addMimeType("application/pkcs7-signature");
110                 addMimeType("application/pkix-cert");
111                 addMimeType("application/pkix-crl");
112                 addMimeType("application/pkixcmp");
113                 addMimeType("application/postscript", "ps", "ai", "eps");
114                 addMimeType("application/prs.alvestrand.titrax-sheet");
115                 addMimeType("application/prs.cww");
116                 addMimeType("application/prs.nprend");
117                 addMimeType("application/qsig");
118                 addMimeType("application/rar", "rar");
119                 addMimeType("application/rdf+xml", "rdf");
120                 addMimeType("application/remote-printing");
121                 addMimeType("application/riscos");
122                 addMimeType("application/rss+xml", "rss");
123                 addMimeType("application/rtf");
124                 addMimeType("application/sdp");
125                 addMimeType("application/set-payment");
126                 addMimeType("application/set-payment-initiation");
127                 addMimeType("application/set-registration");
128                 addMimeType("application/set-registration-initiation");
129                 addMimeType("application/sgml");
130                 addMimeType("application/sgml-open-catalog");
131                 addMimeType("application/sieve");
132                 addMimeType("application/slate");
133                 addMimeType("application/smil", "smi", "smil");
134                 addMimeType("application/timestamp-query");
135                 addMimeType("application/timestamp-reply");
136                 addMimeType("application/vemmi");
137                 addMimeType("application/whoispp-query");
138                 addMimeType("application/whoispp-response");
139                 addMimeType("application/wita");
140                 addMimeType("application/wordperfect", "wpd");
141                 addMimeType("application/wordperfect5.1", "wp5");
142                 addMimeType("application/x400-bp");
143                 addMimeType("application/xhtml+xml", "xhtml", "xht");
144                 addMimeType("application/xml", "xml", "xsl");
145                 addMimeType("application/xml-dtd");
146                 addMimeType("application/xml-external-parsed-entity");
147                 addMimeType("application/zip", "zip");
148                 addMimeType("application/vnd.3M.Post-it-Notes");
149                 addMimeType("application/vnd.accpac.simply.aso");
150                 addMimeType("application/vnd.accpac.simply.imp");
151                 addMimeType("application/vnd.acucobol");
152                 addMimeType("application/vnd.aether.imp");
153                 addMimeType("application/vnd.anser-web-certificate-issue-initiation");
154                 addMimeType("application/vnd.anser-web-funds-transfer-initiation");
155                 addMimeType("application/vnd.audiograph");
156                 addMimeType("application/vnd.bmi");
157                 addMimeType("application/vnd.businessobjects");
158                 addMimeType("application/vnd.canon-cpdl");
159                 addMimeType("application/vnd.canon-lips");
160                 addMimeType("application/vnd.cinderella", "cdy");
161                 addMimeType("application/vnd.claymore");
162                 addMimeType("application/vnd.commerce-battelle");
163                 addMimeType("application/vnd.commonspace");
164                 addMimeType("application/vnd.comsocaller");
165                 addMimeType("application/vnd.contact.cmsg");
166                 addMimeType("application/vnd.cosmocaller");
167                 addMimeType("application/vnd.ctc-posml");
168                 addMimeType("application/vnd.cups-postscript");
169                 addMimeType("application/vnd.cups-raster");
170                 addMimeType("application/vnd.cups-raw");
171                 addMimeType("application/vnd.cybank");
172                 addMimeType("application/vnd.dna");
173                 addMimeType("application/vnd.dpgraph");
174                 addMimeType("application/vnd.dxr");
175                 addMimeType("application/vnd.ecdis-update");
176                 addMimeType("application/vnd.ecowin.chart");
177                 addMimeType("application/vnd.ecowin.filerequest");
178                 addMimeType("application/vnd.ecowin.fileupdate");
179                 addMimeType("application/vnd.ecowin.series");
180                 addMimeType("application/vnd.ecowin.seriesrequest");
181                 addMimeType("application/vnd.ecowin.seriesupdate");
182                 addMimeType("application/vnd.enliven");
183                 addMimeType("application/vnd.epson.esf");
184                 addMimeType("application/vnd.epson.msf");
185                 addMimeType("application/vnd.epson.quickanime");
186                 addMimeType("application/vnd.epson.salt");
187                 addMimeType("application/vnd.epson.ssf");
188                 addMimeType("application/vnd.ericsson.quickcall");
189                 addMimeType("application/vnd.eudora.data");
190                 addMimeType("application/vnd.fdf");
191                 addMimeType("application/vnd.ffsns");
192                 addMimeType("application/vnd.flographit");
193                 addMimeType("application/vnd.framemaker");
194                 addMimeType("application/vnd.fsc.weblaunch");
195                 addMimeType("application/vnd.fujitsu.oasys");
196                 addMimeType("application/vnd.fujitsu.oasys2");
197                 addMimeType("application/vnd.fujitsu.oasys3");
198                 addMimeType("application/vnd.fujitsu.oasysgp");
199                 addMimeType("application/vnd.fujitsu.oasysprs");
200                 addMimeType("application/vnd.fujixerox.ddd");
201                 addMimeType("application/vnd.fujixerox.docuworks");
202                 addMimeType("application/vnd.fujixerox.docuworks.binder");
203                 addMimeType("application/vnd.fut-misnet");
204                 addMimeType("application/vnd.grafeq");
205                 addMimeType("application/vnd.groove-account");
206                 addMimeType("application/vnd.groove-identity-message");
207                 addMimeType("application/vnd.groove-injector");
208                 addMimeType("application/vnd.groove-tool-message");
209                 addMimeType("application/vnd.groove-tool-template");
210                 addMimeType("application/vnd.groove-vcard");
211                 addMimeType("application/vnd.hhe.lesson-player");
212                 addMimeType("application/vnd.hp-HPGL");
213                 addMimeType("application/vnd.hp-PCL");
214                 addMimeType("application/vnd.hp-PCLXL");
215                 addMimeType("application/vnd.hp-hpid");
216                 addMimeType("application/vnd.hp-hps");
217                 addMimeType("application/vnd.httphone");
218                 addMimeType("application/vnd.hzn-3d-crossword");
219                 addMimeType("application/vnd.ibm.MiniPay");
220                 addMimeType("application/vnd.ibm.afplinedata");
221                 addMimeType("application/vnd.ibm.modcap");
222                 addMimeType("application/vnd.informix-visionary");
223                 addMimeType("application/vnd.intercon.formnet");
224                 addMimeType("application/vnd.intertrust.digibox");
225                 addMimeType("application/vnd.intertrust.nncp");
226                 addMimeType("application/vnd.intu.qbo");
227                 addMimeType("application/vnd.intu.qfx");
228                 addMimeType("application/vnd.irepository.package+xml");
229                 addMimeType("application/vnd.is-xpr");
230                 addMimeType("application/vnd.japannet-directory-service");
231                 addMimeType("application/vnd.japannet-jpnstore-wakeup");
232                 addMimeType("application/vnd.japannet-payment-wakeup");
233                 addMimeType("application/vnd.japannet-registration");
234                 addMimeType("application/vnd.japannet-registration-wakeup");
235                 addMimeType("application/vnd.japannet-setstore-wakeup");
236                 addMimeType("application/vnd.japannet-verification");
237                 addMimeType("application/vnd.japannet-verification-wakeup");
238                 addMimeType("application/vnd.koan");
239                 addMimeType("application/vnd.lotus-1-2-3");
240                 addMimeType("application/vnd.lotus-approach");
241                 addMimeType("application/vnd.lotus-freelance");
242                 addMimeType("application/vnd.lotus-notes");
243                 addMimeType("application/vnd.lotus-organizer");
244                 addMimeType("application/vnd.lotus-screencam");
245                 addMimeType("application/vnd.lotus-wordpro");
246                 addMimeType("application/vnd.mcd");
247                 addMimeType("application/vnd.mediastation.cdkey");
248                 addMimeType("application/vnd.meridian-slingshot");
249                 addMimeType("application/vnd.mif");
250                 addMimeType("application/vnd.minisoft-hp3000-save");
251                 addMimeType("application/vnd.mitsubishi.misty-guard.trustweb");
252                 addMimeType("application/vnd.mobius.daf");
253                 addMimeType("application/vnd.mobius.dis");
254                 addMimeType("application/vnd.mobius.msl");
255                 addMimeType("application/vnd.mobius.plc");
256                 addMimeType("application/vnd.mobius.txf");
257                 addMimeType("application/vnd.motorola.flexsuite");
258                 addMimeType("application/vnd.motorola.flexsuite.adsi");
259                 addMimeType("application/vnd.motorola.flexsuite.fis");
260                 addMimeType("application/vnd.motorola.flexsuite.gotap");
261                 addMimeType("application/vnd.motorola.flexsuite.kmr");
262                 addMimeType("application/vnd.motorola.flexsuite.ttc");
263                 addMimeType("application/vnd.motorola.flexsuite.wem");
264                 addMimeType("application/vnd.mozilla.xul+xml", "xul");
265                 addMimeType("application/vnd.ms-artgalry");
266                 addMimeType("application/vnd.ms-asf");
267                 addMimeType("application/vnd.ms-excel", "xls", "xlb", "xlt");
268                 addMimeType("application/vnd.ms-lrm");
269                 addMimeType("application/vnd.ms-pki.seccat", "cat");
270                 addMimeType("application/vnd.ms-pki.stl", "stl");
271                 addMimeType("application/vnd.ms-powerpoint", "ppt", "pps");
272                 addMimeType("application/vnd.ms-project");
273                 addMimeType("application/vnd.ms-tnef");
274                 addMimeType("application/vnd.ms-works");
275                 addMimeType("application/vnd.mseq");
276                 addMimeType("application/vnd.msign");
277                 addMimeType("application/vnd.music-niff");
278                 addMimeType("application/vnd.musician");
279                 addMimeType("application/vnd.netfpx");
280                 addMimeType("application/vnd.noblenet-directory");
281                 addMimeType("application/vnd.noblenet-sealer");
282                 addMimeType("application/vnd.noblenet-web");
283                 addMimeType("application/vnd.novadigm.EDM");
284                 addMimeType("application/vnd.novadigm.EDX");
285                 addMimeType("application/vnd.novadigm.EXT");
286                 addMimeType("application/vnd.oasis.opendocument.chart", "odc");
287                 addMimeType("application/vnd.oasis.opendocument.database", "odb");
288                 addMimeType("application/vnd.oasis.opendocument.formula", "odf");
289                 addMimeType("application/vnd.oasis.opendocument.graphics", "odg");
290                 addMimeType("application/vnd.oasis.opendocument.graphics-template", "otg");
291                 addMimeType("application/vnd.oasis.opendocument.image", "odi");
292                 addMimeType("application/vnd.oasis.opendocument.presentation", "odp");
293                 addMimeType("application/vnd.oasis.opendocument.presentation-template", "otp");
294                 addMimeType("application/vnd.oasis.opendocument.spreadsheet", "ods");
295                 addMimeType("application/vnd.oasis.opendocument.spreadsheet-template", "ots");
296                 addMimeType("application/vnd.oasis.opendocument.text", "odt");
297                 addMimeType("application/vnd.oasis.opendocument.text-master", "odm");
298                 addMimeType("application/vnd.oasis.opendocument.text-template", "ott");
299                 addMimeType("application/vnd.oasis.opendocument.text-web", "oth");
300                 addMimeType("application/vnd.osa.netdeploy");
301                 addMimeType("application/vnd.palm");
302                 addMimeType("application/vnd.pg.format");
303                 addMimeType("application/vnd.pg.osasli");
304                 addMimeType("application/vnd.powerbuilder6");
305                 addMimeType("application/vnd.powerbuilder6-s");
306                 addMimeType("application/vnd.powerbuilder7");
307                 addMimeType("application/vnd.powerbuilder7-s");
308                 addMimeType("application/vnd.powerbuilder75");
309                 addMimeType("application/vnd.powerbuilder75-s");
310                 addMimeType("application/vnd.previewsystems.box");
311                 addMimeType("application/vnd.publishare-delta-tree");
312                 addMimeType("application/vnd.pvi.ptid1");
313                 addMimeType("application/vnd.pwg-xhtml-print+xml");
314                 addMimeType("application/vnd.rapid");
315                 addMimeType("application/vnd.rim.cod", "cod");
316                 addMimeType("application/vnd.s3sms");
317                 addMimeType("application/vnd.seemail");
318                 addMimeType("application/vnd.shana.informed.formdata");
319                 addMimeType("application/vnd.shana.informed.formtemplate");
320                 addMimeType("application/vnd.shana.informed.interchange");
321                 addMimeType("application/vnd.shana.informed.package");
322                 addMimeType("application/vnd.smaf", "mmf");
323                 addMimeType("application/vnd.sss-cod");
324                 addMimeType("application/vnd.sss-dtf");
325                 addMimeType("application/vnd.sss-ntf");
326                 addMimeType("application/vnd.stardivision.calc", "sdc");
327                 addMimeType("application/vnd.stardivision.draw", "sda");
328                 addMimeType("application/vnd.stardivision.impress", "sdd", "sdp");
329                 addMimeType("application/vnd.stardivision.math", "smf");
330                 addMimeType("application/vnd.stardivision.writer", "sdw", "vor");
331                 addMimeType("application/vnd.stardivision.writer-global", "sgl");
332                 addMimeType("application/vnd.street-stream");
333                 addMimeType("application/vnd.sun.xml.calc", "sxc");
334                 addMimeType("application/vnd.sun.xml.calc.template", "stc");
335                 addMimeType("application/vnd.sun.xml.draw", "sxd");
336                 addMimeType("application/vnd.sun.xml.draw.template", "std");
337                 addMimeType("application/vnd.sun.xml.impress", "sxi");
338                 addMimeType("application/vnd.sun.xml.impress.template", "sti");
339                 addMimeType("application/vnd.sun.xml.math", "sxm");
340                 addMimeType("application/vnd.sun.xml.writer", "sxw");
341                 addMimeType("application/vnd.sun.xml.writer.global", "sxg");
342                 addMimeType("application/vnd.sun.xml.writer.template", "stw");
343                 addMimeType("application/vnd.svd");
344                 addMimeType("application/vnd.swiftview-ics");
345                 addMimeType("application/vnd.symbian.install", "sis");
346                 addMimeType("application/vnd.triscape.mxs");
347                 addMimeType("application/vnd.trueapp");
348                 addMimeType("application/vnd.truedoc");
349                 addMimeType("application/vnd.tve-trigger");
350                 addMimeType("application/vnd.ufdl");
351                 addMimeType("application/vnd.uplanet.alert");
352                 addMimeType("application/vnd.uplanet.alert-wbxml");
353                 addMimeType("application/vnd.uplanet.bearer-choice");
354                 addMimeType("application/vnd.uplanet.bearer-choice-wbxml");
355                 addMimeType("application/vnd.uplanet.cacheop");
356                 addMimeType("application/vnd.uplanet.cacheop-wbxml");
357                 addMimeType("application/vnd.uplanet.channel");
358                 addMimeType("application/vnd.uplanet.channel-wbxml");
359                 addMimeType("application/vnd.uplanet.list");
360                 addMimeType("application/vnd.uplanet.list-wbxml");
361                 addMimeType("application/vnd.uplanet.listcmd");
362                 addMimeType("application/vnd.uplanet.listcmd-wbxml");
363                 addMimeType("application/vnd.uplanet.signal");
364                 addMimeType("application/vnd.vcx");
365                 addMimeType("application/vnd.vectorworks");
366                 addMimeType("application/vnd.vidsoft.vidconference");
367                 addMimeType("application/vnd.visio", "vsd");
368                 addMimeType("application/vnd.vividence.scriptfile");
369                 addMimeType("application/vnd.wap.sic");
370                 addMimeType("application/vnd.wap.slc");
371                 addMimeType("application/vnd.wap.wbxml", "wbxml");
372                 addMimeType("application/vnd.wap.wmlc", "wmlc");
373                 addMimeType("application/vnd.wap.wmlscriptc", "wmlsc");
374                 addMimeType("application/vnd.webturbo");
375                 addMimeType("application/vnd.wrq-hp3000-labelled");
376                 addMimeType("application/vnd.wt.stf");
377                 addMimeType("application/vnd.xara");
378                 addMimeType("application/vnd.xfdl");
379                 addMimeType("application/vnd.yellowriver-custom-menu");
380                 addMimeType("application/x-123", "wk");
381                 addMimeType("application/x-abiword", "abw");
382                 addMimeType("application/x-apple-diskimage", "dmg");
383                 addMimeType("application/x-bcpio", "bcpio");
384                 addMimeType("application/x-bittorrent", "torrent");
385                 addMimeType("application/x-cdf", "cdf");
386                 addMimeType("application/x-cdlink", "vcd");
387                 addMimeType("application/x-chess-pgn", "pgn");
388                 addMimeType("application/x-core");
389                 addMimeType("application/x-cpio", "cpio");
390                 addMimeType("application/x-csh", "csh");
391                 addMimeType("application/x-debian-package", "deb", "udeb");
392                 addMimeType("application/x-director", "dcr", "dir", "dxr");
393                 addMimeType("application/x-dms", "dms");
394                 addMimeType("application/x-doom", "wad");
395                 addMimeType("application/x-dvi", "dvi");
396                 addMimeType("application/x-executable");
397                 addMimeType("application/x-flac", "flac");
398                 addMimeType("application/x-font", "pfa", "pfb", "gsf", "pcf", "pcf.Z");
399                 addMimeType("application/x-freemind", "mm");
400                 addMimeType("application/x-futuresplash", "spl");
401                 addMimeType("application/x-gnumeric", "gnumeric");
402                 addMimeType("application/x-go-sgf", "sgf");
403                 addMimeType("application/x-graphing-calculator", "gcf");
404                 addMimeType("application/x-gtar", "gtar", "tgz", "taz");
405                 addMimeType("application/x-hdf", "hdf");
406                 addMimeType("application/x-ica", "ica");
407                 addMimeType("application/x-internet-signup", "ins", "isp");
408                 addMimeType("application/x-iphone", "iii");
409                 addMimeType("application/x-iso9660-image", "iso");
410                 addMimeType("application/x-java-applet");
411                 addMimeType("application/x-java-bean");
412                 addMimeType("application/x-java-jnlp-file", "jnlp");
413                 addMimeType("application/x-javascript", "js");
414                 addMimeType("application/x-jmol", "jmz");
415                 addMimeType("application/x-kchart", "chrt");
416                 addMimeType("application/x-kdelnk");
417                 addMimeType("application/x-killustrator", "kil");
418                 addMimeType("application/x-koan", "skp", "skd", "skt", "skm");
419                 addMimeType("application/x-kpresenter", "kpr", "kpt");
420                 addMimeType("application/x-kspread", "ksp");
421                 addMimeType("application/x-kword", "kwd", "kwt");
422                 addMimeType("application/x-latex", "latex");
423                 addMimeType("application/x-lha", "lha");
424                 addMimeType("application/x-lzh", "lzh");
425                 addMimeType("application/x-lzx", "lzx");
426                 addMimeType("application/x-maker", "frm", "maker", "frame", "fm", "fb", "book", "fbdoc");
427                 addMimeType("application/x-mif", "mif");
428                 addMimeType("application/x-ms-wmd", "wmd");
429                 addMimeType("application/x-ms-wmz", "wmz");
430                 addMimeType("application/x-msdos-program", "com", "exe", "bat", "dll");
431                 addMimeType("application/x-msi", "msi");
432                 addMimeType("application/x-netcdf", "nc");
433                 addMimeType("application/x-ns-proxy-autoconfig", "pac");
434                 addMimeType("application/x-nwc", "nwc");
435                 addMimeType("application/x-object", "o");
436                 addMimeType("application/x-oz-application", "oza");
437                 addMimeType("application/x-pkcs7-certreqresp", "p7r");
438                 addMimeType("application/x-pkcs7-crl", "crl");
439                 addMimeType("application/x-python-code", "pyc", "pyo");
440                 addMimeType("application/x-quicktimeplayer", "qtl");
441                 addMimeType("application/x-redhat-package-manager", "rpm");
442                 addMimeType("application/x-rx");
443                 addMimeType("application/x-sh", "sh");
444                 addMimeType("application/x-shar", "shar");
445                 addMimeType("application/x-shellscript");
446                 addMimeType("application/x-shockwave-flash", "swf", "swfl");
447                 addMimeType("application/x-stuffit", "sit");
448                 addMimeType("application/x-sv4cpio", "sv4cpio");
449                 addMimeType("application/x-sv4crc", "sv4crc");
450                 addMimeType("application/x-tar", "tar");
451                 addMimeType("application/x-tcl", "tcl");
452                 addMimeType("application/x-tex-gf", "gf");
453                 addMimeType("application/x-tex-pk", "pk");
454                 addMimeType("application/x-texinfo", "texinfo", "texi");
455                 addMimeType("application/x-trash", "~", "%", "bak", "old", "sik");
456                 addMimeType("application/x-troff", "t", "tr", "roff");
457                 addMimeType("application/x-troff-man", "man");
458                 addMimeType("application/x-troff-me", "me");
459                 addMimeType("application/x-troff-ms", "ms");
460                 addMimeType("application/x-ustar", "ustar");
461                 addMimeType("application/x-videolan");
462                 addMimeType("application/x-wais-source", "src");
463                 addMimeType("application/x-wingz", "wz");
464                 addMimeType("application/x-x509-ca-cert", "crt");
465                 addMimeType("application/x-xcf", "xcf");
466                 addMimeType("application/x-xfig", "fig");
467                 addMimeType("application/x-xpinstall", "xpi");
468                 addMimeType("audio/32kadpcm");
469                 addMimeType("audio/basic", "au", "snd");
470                 addMimeType("audio/dvi4");
471                 addMimeType("audio/g.722.1");
472                 addMimeType("audio/g722");
473                 addMimeType("audio/g723");
474                 addMimeType("audio/g726-16");
475                 addMimeType("audio/g726-24");
476                 addMimeType("audio/g726-32");
477                 addMimeType("audio/g726-40");
478                 addMimeType("audio/g728");
479                 addMimeType("audio/g729");
480                 addMimeType("audio/g729d");
481                 addMimeType("audio/g729e");
482                 addMimeType("audio/gsm");
483                 addMimeType("audio/gsm-efr");
484                 addMimeType("audio/l8");
485                 addMimeType("audio/l16");
486                 addMimeType("audio/lpc");
487                 addMimeType("audio/midi", "mid", "midi", "kar");
488                 addMimeType("audio/mp4a-latm");
489                 addMimeType("audio/mpa");
490                 addMimeType("audio/mpa-robust");
491                 addMimeType("audio/mpeg", "mpga", "mpega", "mp2", "mp3", "m4a");
492                 addMimeType("audio/mpegurl", "m3u");
493                 addMimeType("audio/parityfec");
494                 addMimeType("audio/pcma");
495                 addMimeType("audio/pcmu");
496                 addMimeType("audio/prs.sid", "sid");
497                 addMimeType("audio/qcelp");
498                 addMimeType("audio/red");
499                 addMimeType("audio/telephone-event");
500                 addMimeType("audio/tone");
501                 addMimeType("audio/vdvi");
502                 addMimeType("audio/vnd.cisco.nse");
503                 addMimeType("audio/vnd.cns.anp1");
504                 addMimeType("audio/vnd.cns.inf1");
505                 addMimeType("audio/vnd.digital-winds");
506                 addMimeType("audio/vnd.everad.plj");
507                 addMimeType("audio/vnd.lucent.voice");
508                 addMimeType("audio/vnd.nortel.vbk");
509                 addMimeType("audio/vnd.nuera.ecelp4800");
510                 addMimeType("audio/vnd.nuera.ecelp7470");
511                 addMimeType("audio/vnd.nuera.ecelp9600");
512                 addMimeType("audio/vnd.octel.sbc");
513                 addMimeType("audio/vnd.qcelp");
514                 addMimeType("audio/vnd.rhetorex.32kadpcm");
515                 addMimeType("audio/vnd.vmx.cvsd");
516                 addMimeType("audio/x-aiff", "aif", "aiff", "aifc");
517                 addMimeType("audio/x-gsm", "gsm");
518                 addMimeType("audio/x-mpegurl", "m3u");
519                 addMimeType("audio/x-ms-wma", "wma");
520                 addMimeType("audio/x-ms-wax", "wax");
521                 addMimeType("audio/x-pn-realaudio-plugin");
522                 addMimeType("audio/x-pn-realaudio", "ra", "rm", "ram");
523                 addMimeType("audio/x-realaudio", "ra");
524                 addMimeType("audio/x-scpls", "pls");
525                 addMimeType("audio/x-sd2", "sd2");
526                 addMimeType("audio/x-wav", "wav");
527                 addMimeType("chemical/x-alchemy", "alc");
528                 addMimeType("chemical/x-cache", "cac", "cache");
529                 addMimeType("chemical/x-cache-csf", "csf");
530                 addMimeType("chemical/x-cactvs-binary", "cbin", "cascii", "ctab");
531                 addMimeType("chemical/x-cdx", "cdx");
532                 addMimeType("chemical/x-cerius", "cer");
533                 addMimeType("chemical/x-chem3d", "c3d");
534                 addMimeType("chemical/x-chemdraw", "chm");
535                 addMimeType("chemical/x-cif", "cif");
536                 addMimeType("chemical/x-cmdf", "cmdf");
537                 addMimeType("chemical/x-cml", "cml");
538                 addMimeType("chemical/x-compass", "cpa");
539                 addMimeType("chemical/x-crossfire", "bsd");
540                 addMimeType("chemical/x-csml", "csml", "csm");
541                 addMimeType("chemical/x-ctx", "ctx");
542                 addMimeType("chemical/x-cxf", "cxf", "cef");
543                 addMimeType("chemical/x-embl-dl-nucleotide", "emb", "embl");
544                 addMimeType("chemical/x-galactic-spc", "spc");
545                 addMimeType("chemical/x-gamess-input", "inp", "gam", "gamin");
546                 addMimeType("chemical/x-gaussian-checkpoint", "fch", "fchk");
547                 addMimeType("chemical/x-gaussian-cube", "cub");
548                 addMimeType("chemical/x-gaussian-input", "gau", "gjc", "gjf");
549                 addMimeType("chemical/x-gaussian-log", "gal");
550                 addMimeType("chemical/x-gcg8-sequence", "gcg");
551                 addMimeType("chemical/x-genbank", "gen");
552                 addMimeType("chemical/x-hin", "hin");
553                 addMimeType("chemical/x-isostar", "istr", "ist");
554                 addMimeType("chemical/x-jcamp-dx", "jdx", "dx");
555                 addMimeType("chemical/x-kinemage", "kin");
556                 addMimeType("chemical/x-macmolecule", "mcm");
557                 addMimeType("chemical/x-macromodel-input", "mmd", "mmod");
558                 addMimeType("chemical/x-mdl-molfile", "mol");
559                 addMimeType("chemical/x-mdl-rdfile", "rd");
560                 addMimeType("chemical/x-mdl-rxnfile", "rxn");
561                 addMimeType("chemical/x-mdl-sdfile", "sd", "sdf");
562                 addMimeType("chemical/x-mdl-tgf", "tgf");
563                 addMimeType("chemical/x-mmcif", "mcif");
564                 addMimeType("chemical/x-mol2", "mol2");
565                 addMimeType("chemical/x-molconn-Z", "b");
566                 addMimeType("chemical/x-mopac-graph", "gpt");
567                 addMimeType("chemical/x-mopac-input", "mop", "mopcrt", "mpc", "dat", "zmt");
568                 addMimeType("chemical/x-mopac-out", "moo");
569                 addMimeType("chemical/x-mopac-vib", "mvb");
570                 addMimeType("chemical/x-ncbi-asn1", "asn");
571                 addMimeType("chemical/x-ncbi-asn1-ascii", "prt", "ent");
572                 addMimeType("chemical/x-ncbi-asn1-binary", "val", "aso");
573                 addMimeType("chemical/x-ncbi-asn1-spec", "asn");
574                 addMimeType("chemical/x-pdb", "pdb", "ent");
575                 addMimeType("chemical/x-rosdal", "ros");
576                 addMimeType("chemical/x-swissprot", "sw");
577                 addMimeType("chemical/x-vamas-iso14976", "vms");
578                 addMimeType("chemical/x-vmd", "vmd");
579                 addMimeType("chemical/x-xtel", "xtel");
580                 addMimeType("chemical/x-xyz", "xyz");
581                 addMimeType("image/cgm");
582                 addMimeType("image/g3fax");
583                 addMimeType("image/gif", "gif");
584                 addMimeType("image/ief", "ief");
585                 addMimeType("image/jpeg", "jpeg", "jpg", "jpe");
586                 addMimeType("image/naplps");
587                 addMimeType("image/pcx", "pcx");
588                 addMimeType("image/png", "png");
589                 addMimeType("image/prs.btif");
590                 addMimeType("image/prs.pti");
591                 addMimeType("image/svg+xml", "svg", "svgz");
592                 addMimeType("image/tiff", "tiff", "tif");
593                 addMimeType("image/vnd.cns.inf2");
594                 addMimeType("image/vnd.djvu", "djvu", "djv");
595                 addMimeType("image/vnd.dwg");
596                 addMimeType("image/vnd.dxf");
597                 addMimeType("image/vnd.fastbidsheet");
598                 addMimeType("image/vnd.fpx");
599                 addMimeType("image/vnd.fst");
600                 addMimeType("image/vnd.fujixerox.edmics-mmr");
601                 addMimeType("image/vnd.fujixerox.edmics-rlc");
602                 addMimeType("image/vnd.mix");
603                 addMimeType("image/vnd.net-fpx");
604                 addMimeType("image/vnd.svf");
605                 addMimeType("image/vnd.wap.wbmp", "wbmp");
606                 addMimeType("image/vnd.xiff");
607                 addMimeType("image/x-cmu-raster", "ras");
608                 addMimeType("image/x-coreldraw", "cdr");
609                 addMimeType("image/x-coreldrawpattern", "pat");
610                 addMimeType("image/x-coreldrawtemplate", "cdt");
611                 addMimeType("image/x-corelphotopaint", "cpt");
612                 addMimeType("image/x-icon", "ico");
613                 addMimeType("image/x-jg", "art");
614                 addMimeType("image/x-jng", "jng");
615                 addMimeType("image/x-ms-bmp", "bmp");
616                 addMimeType("image/x-photoshop", "psd");
617                 addMimeType("image/x-portable-anymap", "pnm");
618                 addMimeType("image/x-portable-bitmap", "pbm");
619                 addMimeType("image/x-portable-graymap", "pgm");
620                 addMimeType("image/x-portable-pixmap", "ppm");
621                 addMimeType("image/x-rgb", "rgb");
622                 addMimeType("image/x-xbitmap", "xbm");
623                 addMimeType("image/x-xpixmap", "xpm");
624                 addMimeType("image/x-xwindowdump", "xwd");
625                 addMimeType("inode/chardevice");
626                 addMimeType("inode/blockdevice");
627                 addMimeType("inode/directory-locked");
628                 addMimeType("inode/directory");
629                 addMimeType("inode/fifo");
630                 addMimeType("inode/socket");
631                 addMimeType("message/delivery-status");
632                 addMimeType("message/disposition-notification");
633                 addMimeType("message/external-body");
634                 addMimeType("message/http");
635                 addMimeType("message/s-http");
636                 addMimeType("message/news");
637                 addMimeType("message/partial");
638                 addMimeType("message/rfc822");
639                 addMimeType("model/iges", "igs", "iges");
640                 addMimeType("model/mesh", "msh", "mesh", "silo");
641                 addMimeType("model/vnd.dwf");
642                 addMimeType("model/vnd.flatland.3dml");
643                 addMimeType("model/vnd.gdl");
644                 addMimeType("model/vnd.gs-gdl");
645                 addMimeType("model/vnd.gtw");
646                 addMimeType("model/vnd.mts");
647                 addMimeType("model/vnd.vtu");
648                 addMimeType("model/vrml", "wrl", "vrml");
649                 addMimeType("multipart/alternative");
650                 addMimeType("multipart/appledouble");
651                 addMimeType("multipart/byteranges");
652                 addMimeType("multipart/digest");
653                 addMimeType("multipart/encrypted");
654                 addMimeType("multipart/form-data");
655                 addMimeType("multipart/header-set");
656                 addMimeType("multipart/mixed");
657                 addMimeType("multipart/parallel");
658                 addMimeType("multipart/related");
659                 addMimeType("multipart/report");
660                 addMimeType("multipart/signed");
661                 addMimeType("multipart/voice-message");
662                 addMimeType("text/calendar", "ics", "icz");
663                 addMimeType("text/comma-separated-values", "csv");
664                 addMimeType("text/css", "css");
665                 addMimeType("text/directory");
666                 addMimeType("text/english");
667                 addMimeType("text/enriched");
668                 addMimeType("text/h323", "323");
669                 addMimeType("text/html", "html", "htm", "shtml");
670                 addMimeType("text/iuls", "uls");
671                 addMimeType("text/mathml", "mml");
672                 addMimeType("text/parityfec");
673                 addMimeType("text/plain", "asc", "txt", "text", "diff", "pot");
674                 addMimeType("text/prs.lines.tag");
675                 addMimeType("text/x-psp", "psp");
676                 addMimeType("text/rfc822-headers");
677                 addMimeType("text/richtext", "rtx");
678                 addMimeType("text/rtf", "rtf");
679                 addMimeType("text/scriptlet", "sct", "wsc");
680                 addMimeType("text/t140");
681                 addMimeType("text/texmacs", "tm", "ts");
682                 addMimeType("text/tab-separated-values", "tsv");
683                 addMimeType("text/uri-list");
684                 addMimeType("text/vnd.abc");
685                 addMimeType("text/vnd.curl");
686                 addMimeType("text/vnd.DMClientScript");
687                 addMimeType("text/vnd.flatland.3dml");
688                 addMimeType("text/vnd.fly");
689                 addMimeType("text/vnd.fmi.flexstor");
690                 addMimeType("text/vnd.in3d.3dml");
691                 addMimeType("text/vnd.in3d.spot");
692                 addMimeType("text/vnd.IPTC.NewsML");
693                 addMimeType("text/vnd.IPTC.NITF");
694                 addMimeType("text/vnd.latex-z");
695                 addMimeType("text/vnd.motorola.reflex");
696                 addMimeType("text/vnd.ms-mediapackage");
697                 addMimeType("text/vnd.sun.j2me.app-descriptor", "jad");
698                 addMimeType("text/vnd.wap.si");
699                 addMimeType("text/vnd.wap.sl");
700                 addMimeType("text/vnd.wap.wml", "wml");
701                 addMimeType("text/vnd.wap.wmlscript", "wmls");
702                 addMimeType("text/x-bibtex", "bib");
703                 addMimeType("text/x-c++hdr", "h++", "hpp", "hxx", "hh");
704                 addMimeType("text/x-c++src", "c++", "cpp", "cxx", "cc");
705                 addMimeType("text/x-chdr", "h");
706                 addMimeType("text/x-crontab");
707                 addMimeType("text/x-csh", "csh");
708                 addMimeType("text/x-csrc", "c");
709                 addMimeType("text/x-haskell", "hs");
710                 addMimeType("text/x-java", "java");
711                 addMimeType("text/x-literate-haskell", "lhs");
712                 addMimeType("text/x-makefile");
713                 addMimeType("text/x-moc", "moc");
714                 addMimeType("text/x-pascal", "p", "pas");
715                 addMimeType("text/x-pcs-gcd", "gcd");
716                 addMimeType("text/x-perl", "pl", "pm");
717                 addMimeType("text/x-python", "py");
718                 addMimeType("text/x-server-parsed-html");
719                 addMimeType("text/x-setext", "etx");
720                 addMimeType("text/x-sh", "sh");
721                 addMimeType("text/x-tcl", "tcl", "tk");
722                 addMimeType("text/x-tex", "tex", "ltx", "sty", "cls");
723                 addMimeType("text/x-vcalendar", "vcs");
724                 addMimeType("text/x-vcard", "vcf");
725                 addMimeType("video/bmpeg");
726                 addMimeType("video/bt656");
727                 addMimeType("video/celb");
728                 addMimeType("video/dl", "dl");
729                 addMimeType("video/dv", "dif", "dv");
730                 addMimeType("video/fli", "fli");
731                 addMimeType("video/gl", "gl");
732                 addMimeType("video/jpeg");
733                 addMimeType("video/h261");
734                 addMimeType("video/h263");
735                 addMimeType("video/h263-1998");
736                 addMimeType("video/h263-2000");
737                 addMimeType("video/mp1s");
738                 addMimeType("video/mp2p");
739                 addMimeType("video/mp2t");
740                 addMimeType("video/mp4", "mp4");
741                 addMimeType("video/mp4v-es");
742                 addMimeType("video/mpeg", "mpeg", "mpg", "mpe");
743                 addMimeType("video/mpv");
744                 addMimeType("video/nv");
745                 addMimeType("video/parityfec");
746                 addMimeType("video/pointer");
747                 addMimeType("video/quicktime", "qt", "mov");
748                 addMimeType("video/vnd.fvt");
749                 addMimeType("video/vnd.motorola.video");
750                 addMimeType("video/vnd.motorola.videop");
751                 addMimeType("video/vnd.mpegurl", "mxu");
752                 addMimeType("video/vnd.mts");
753                 addMimeType("video/vnd.nokia.interleaved-multimedia");
754                 addMimeType("video/vnd.vivo");
755                 addMimeType("video/x-la-asf", "lsf", "lsx");
756                 addMimeType("video/x-mng", "mng");
757                 addMimeType("video/x-ms-asf", "asf", "asx");
758                 addMimeType("video/x-ms-wm", "wm");
759                 addMimeType("video/x-ms-wmv", "wmv");
760                 addMimeType("video/x-ms-wmx", "wmx");
761                 addMimeType("video/x-ms-wvx", "wvx");
762                 addMimeType("video/x-msvideo", "avi");
763                 addMimeType("video/x-sgi-movie", "movie");
764                 addMimeType("video/x-flv", "flv");
765                 addMimeType("x-conference/x-cooltalk", "ice");
766                 addMimeType("x-world/x-vrml", "vrm", "vrml", "wrl");
767         }
768
769         /**
770          * Returns a list of all known MIME types.
771          *
772          * @return All known MIME types
773          */
774         public static List<String> getAllMimeTypes() {
775                 return new ArrayList<String>(mimeTypes);
776         }
777
778         /**
779          * Returns a list of MIME types that are registered for the given extension.
780          *
781          * @param extension
782          *            The extension to get the MIME types for
783          * @return A list of MIME types, or an empty list if there are no registered
784          *         MIME types for the extension
785          */
786         public static List<String> getMimeTypes(String extension) {
787                 if (extensionMimeTypes.containsKey(extension)) {
788                         return extensionMimeTypes.get(extension);
789                 }
790                 return Collections.emptyList();
791         }
792
793         /**
794          * Returns a default MIME type for the given extension. If the extension
795          * does not match a MIME type the default MIME typ
796          * “application/octet-stream” is returned.
797          *
798          * @param extension
799          *            The extension to get the MIME type for
800          * @return The MIME type for the extension, or the default MIME type
801          *         “application/octet-stream”
802          */
803         public static String getMimeType(String extension) {
804                 if (extensionMimeTypes.containsKey(extension)) {
805                         return extensionMimeTypes.get(extension).get(0);
806                 }
807                 return DEFAULT_CONTENT_TYPE;
808         }
809
810         //
811         // PRIVATE METHODS
812         //
813
814         /**
815          * Adds a MIME type and optional extensions.
816          *
817          * @param mimeType
818          *            The MIME type to add
819          * @param extensions
820          *            The extension the MIME type is registered for
821          */
822         private static void addMimeType(String mimeType, String... extensions) {
823                 mimeTypes.add(mimeType);
824                 for (String extension : extensions) {
825                         if (!mimeTypeExtensions.containsKey(mimeType)) {
826                                 mimeTypeExtensions.put(mimeType, new ArrayList<String>());
827                         }
828                         mimeTypeExtensions.get(mimeType).add(extension);
829                         if (!extensionMimeTypes.containsKey(extension)) {
830                                 extensionMimeTypes.put(extension, new ArrayList<String>());
831                         }
832                         extensionMimeTypes.get(extension).add(mimeType);
833                 }
834         }
835
836 }