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