View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.support.editor.inspectors.attachments;
14  
15  import java.util.HashMap;
16  
17  /***
18   * Handles drop of files on the AttachementPanel
19   * 
20   * @author ole.matzura
21   */
22  
23  public class ContentTypeHandler
24  {
25  	private static final HashMap<String, String> suffixToContentType;
26  	public static final String DEFAULT_CONTENTTYPE = "application/octet-stream";
27  
28  	public static String getContentTypeFromFilename( String fileName )
29  	{
30  		String suffix = getSuffixFromFilename( fileName );
31  
32  		if( suffixToContentType.containsKey( suffix ) )
33  			return suffixToContentType.get( suffix );
34  
35  		return DEFAULT_CONTENTTYPE;
36  	}
37  
38  	public static String getSuffixFromFilename( String fileName )
39  	{
40  		if( fileName == null || fileName.length() == 0 )
41  			return "";
42  
43  		int pos = fileName.lastIndexOf( "." ) + 1;
44  		int len = fileName.length();
45  
46  		String suffix = "";
47  		if( pos < len )
48  			suffix = fileName.substring( pos, len );
49  
50  		return suffix;
51  
52  	}
53  
54  	public static String getExtensionForContentType( String contentType )
55  	{
56  		int ix = contentType.indexOf( ';' );
57  		if( ix > 0 )
58  			contentType = contentType.substring( 0, ix );
59  
60  		for( String key : suffixToContentType.keySet() )
61  		{
62  			if( suffixToContentType.get( key ).equals( contentType ) )
63  				return key;
64  		}
65  
66  		return "dat";
67  	}
68  
69  	static
70  	{
71  		suffixToContentType = new HashMap<String, String>();
72  		suffixToContentType.put( "html", "text/html" );
73  		suffixToContentType.put( "htm", "text/html" );
74  		suffixToContentType.put( "txt", "text/plain" );
75  		suffixToContentType.put( "xml", "text/xml" );
76  		suffixToContentType.put( "wsdl", "text/xml" );
77  		suffixToContentType.put( "xsd", "text/xml" );
78  		suffixToContentType.put( "c", "text/plain" );
79  		suffixToContentType.put( "c++", "text/plain" );
80  		suffixToContentType.put( "pl", "text/plain" );
81  		suffixToContentType.put( "c", "text/plain" );
82  		suffixToContentType.put( "h", "text/plain" );
83  		// suffixToContentType.put("", "text/richtext");
84  		// suffixToContentType.put("", "text/x-setext");
85  		// suffixToContentType.put("", "text/enriched");
86  		// suffixToContentType.put("", "text/tab-separated-values");
87  		// suffixToContentType.put("", "text/sgml");
88  		suffixToContentType.put( "talk", "text/x-speech" );
89  		suffixToContentType.put( "css", "text/css" );
90  		// suffixToContentType.put("", "application/dsssl");
91  		suffixToContentType.put( "gif", "image/gif" );
92  		suffixToContentType.put( "xbm", "image/x-xbitmap" );
93  		suffixToContentType.put( "xpm", "image/x-xpixmap" );
94  		suffixToContentType.put( "png", "image/x-png" );
95  		suffixToContentType.put( "ief", "image/ief" );
96  		suffixToContentType.put( "jpeg", "image/jpeg" );
97  		suffixToContentType.put( "jpg", "image/jpeg" );
98  		suffixToContentType.put( "jpe", "image/jpeg" );
99  		suffixToContentType.put( "tiff tif", "image/tiff" );
100 		suffixToContentType.put( "tif", "image/tiff" );
101 		suffixToContentType.put( "rgb", "image/rgb" );
102 		// suffixToContentType.put("", "image/x-rgb");
103 		suffixToContentType.put( "g3f ", "image/g3fax" );
104 		suffixToContentType.put( "xwd ", "image/x-xwindowdump" );
105 		suffixToContentType.put( "pict", "image/x-pict" );
106 		suffixToContentType.put( "ppm", "image/x-portable-pixmap" );
107 		suffixToContentType.put( "pgm", "image/x-portable-graymap" );
108 		suffixToContentType.put( "pbm", "image/x-portable-bitmap" );
109 		suffixToContentType.put( "pnm", "image/x-portable-anymap" );
110 		suffixToContentType.put( "bmp", "image/x-ms-bmp" );
111 		suffixToContentType.put( "ras", "image/x-cmu-raster" );
112 		suffixToContentType.put( "pcd", "image/x-photo-cd" );
113 		suffixToContentType.put( "cgm", "image/cgm" );
114 		// suffixToContentType.put("", "image/naplps");
115 		suffixToContentType.put( "mil", "image/x-cals" );
116 		suffixToContentType.put( "cal", "image/x-cals" );
117 		suffixToContentType.put( "fif", "image/fif" );
118 		suffixToContentType.put( "dsf", "image/x-mgx-dsf" );
119 		suffixToContentType.put( "cmx", "image/x-cmx" );
120 		suffixToContentType.put( "wi", "image/wavelet" );
121 		suffixToContentType.put( "dwg", "image/vnd.dwg" );
122 		// suffixToContentType.put("", "image/x-dwg");
123 		suffixToContentType.put( "dxf", "image/vnd.dxf" );
124 		// suffixToContentType.put("", "image/x-dxf");
125 		suffixToContentType.put( "svf", "image/vnd.svf" );
126 		// suffixToContentType.put("", "also vector/x-svf");
127 		suffixToContentType.put( "au snd", "audio/basic" );
128 		suffixToContentType.put( "snd", "audio/basic" );
129 		suffixToContentType.put( "aif", "audio/x-aiff" );
130 		suffixToContentType.put( "aiff", "audio/x-aiff" );
131 		suffixToContentType.put( "aifc", "audio/x-aiff" );
132 		suffixToContentType.put( "wav", "audio/x-wav" );
133 		suffixToContentType.put( "mpa", "audio/x-mpeg" );
134 		suffixToContentType.put( "abs", "audio/x-mpeg" );
135 		suffixToContentType.put( "mpega", "audio/x-mpeg" );
136 		suffixToContentType.put( "mp2a", "audio/x-mpeg-2" );
137 		suffixToContentType.put( "mpa2", "audio/x-mpeg-2" );
138 		suffixToContentType.put( "es", "audio/echospeech" );
139 		suffixToContentType.put( "vox", "audio/voxware" );
140 		suffixToContentType.put( "lcc", "application/fastman" );
141 		suffixToContentType.put( "ra", "application/x-pn-realaudio" );
142 		suffixToContentType.put( "ram", "application/x-pn-realaudio" );
143 		// suffixToContentType.put("", "application/vnd.music-niff");
144 		suffixToContentType.put( "mmid", "x-music/x-midi" );
145 		suffixToContentType.put( "skp", "application/vnd.koan" );
146 		// suffixToContentType.put("", "application/x-koan");
147 		suffixToContentType.put( "talk", "text/x-speech" );
148 		suffixToContentType.put( "mpeg", "video/mpeg" );
149 		suffixToContentType.put( "mpg", "video/mpeg" );
150 		suffixToContentType.put( "mpe", "video/mpeg" );
151 		suffixToContentType.put( "mpv2", "video/mpeg-2" );
152 		suffixToContentType.put( "mp2v", "video/mpeg-2" );
153 		suffixToContentType.put( "qt", "video/quicktime" );
154 		suffixToContentType.put( "mov", "video/quicktime" );
155 		suffixToContentType.put( "avi", "video/x-msvideo" );
156 		suffixToContentType.put( "movie", "video/x-sgi-movie" );
157 		suffixToContentType.put( "vdo", "video/vdo" );
158 		suffixToContentType.put( "viv", "video/vnd.vivo" );
159 		// suffixToContentType.put("", "video/vivo");
160 		suffixToContentType.put( "pac", "application/x-ns-proxy-autoconfig" );
161 		// suffixToContentType.put("", "application/x-www-form-urlencoded");
162 		// suffixToContentType.put("", "application/x-www-local-exec");
163 		// suffixToContentType.put("", "multipart/x-mixed-replace");
164 		// suffixToContentType.put("", "multipart/form-data");
165 		suffixToContentType.put( "ice", "x-conference/x-cooltalk" );
166 		// suffixToContentType.put("", "application/x-chat");
167 		suffixToContentType.put( "ai", "application/postscript" );
168 		suffixToContentType.put( "eps", "application/postscript" );
169 		suffixToContentType.put( "ps", "application/postscript" );
170 		suffixToContentType.put( "rtf", "application/rtf" );
171 		suffixToContentType.put( "pdf", "application/pdf" );
172 		// suffixToContentType.put("", "application/x-pdf");
173 		suffixToContentType.put( "mif", "application/vnd.mif" );
174 		// suffixToContentType.put("", "application/x-mif");
175 		suffixToContentType.put( "t", "application/x-troff" );
176 		suffixToContentType.put( "tr", "application/x-troff" );
177 		suffixToContentType.put( "roff", "application/x-troff" );
178 		suffixToContentType.put( "man", "application/x-troff-man" );
179 		suffixToContentType.put( "me", "application/x-troff-me" );
180 		suffixToContentType.put( "ms", "application/x-troff-ms" );
181 		suffixToContentType.put( "latex", "application/x-latex" );
182 		suffixToContentType.put( "tex", "application/x-tex" );
183 		suffixToContentType.put( "texinfo", "application/x-texinfo" );
184 		suffixToContentType.put( "texi ", "application/x-texinfo" );
185 		suffixToContentType.put( "dvi", "application/x-dvi" );
186 		// suffixToContentType.put("", "application/macwriteii");
187 		suffixToContentType.put( "doc", "application/msword" );
188 		// suffixToContentType.put("", "application/wordperfect5.1");
189 		// suffixToContentType.put("", "application/sgml");
190 		suffixToContentType.put( "oda", "application/oda" );
191 		suffixToContentType.put( "evy", "application/envoy" );
192 		// suffixToContentType.put("", "application/wita");
193 		// suffixToContentType.put("", "application/dec-dx");
194 		// suffixToContentType.put("", "application/dca-rft");
195 		// suffixToContentType.put("", "application/commonground");
196 		suffixToContentType.put( "fm", "application/vnd.framemaker" );
197 		suffixToContentType.put( "frm", "application/vnd.framemaker" );
198 		suffixToContentType.put( "frame", "application/vnd.framemaker" );
199 		// suffixToContentType.put("", "application/x-framemaker");
200 		// suffixToContentType.put("", "application/remote-printing");
201 		suffixToContentType.put( "gtar", "application/x-gtar" );
202 		suffixToContentType.put( "tar", "application/x-tar" );
203 		suffixToContentType.put( "ustar", "application/x-ustar" );
204 		suffixToContentType.put( "bcpio", "application/x-bcpio" );
205 		suffixToContentType.put( "cpio", "application/x-cpio" );
206 		suffixToContentType.put( "shar", "application/x-shar" );
207 		suffixToContentType.put( "zip", "application/zip" );
208 		suffixToContentType.put( "hqx", "application/mac-binhex40" );
209 		suffixToContentType.put( "sit", "application/x-stuffit" );
210 		suffixToContentType.put( "sea", "application/x-stuffit" );
211 		suffixToContentType.put( "fif", "application/fractals" );
212 		suffixToContentType.put( "bin", "application/octet-stream" );
213 		suffixToContentType.put( "uu", "application/octet-stream" );
214 		suffixToContentType.put( "exe", "application/octet-stream" );
215 		suffixToContentType.put( "src", "application/x-wais-source" );
216 		suffixToContentType.put( "wsrc", "application/x-wais-source" );
217 		suffixToContentType.put( "hdf", "application/hdf" );
218 		suffixToContentType.put( "js", "text/javascript" );
219 		suffixToContentType.put( "json", "text/javascript" );
220 		suffixToContentType.put( "ls", "text/javascript" );
221 		suffixToContentType.put( "mocha", "text/javascript" );
222 		// suffixToContentType.put("", "application/x-javascript");
223 		// suffixToContentType.put("", "text/vbscript");
224 		suffixToContentType.put( "sh", "application/x-sh" );
225 		suffixToContentType.put( "csh", "application/x-csh" );
226 		suffixToContentType.put( "pl", "application/x-perl" );
227 		suffixToContentType.put( "tcl ", "application/x-tcl" );
228 		// suffixToContentType.put("", "application/atomicmail");
229 		// suffixToContentType.put("", "application/slate");
230 		// suffixToContentType.put("", "application/octet-stream");
231 		// suffixToContentType.put("", "application/riscos");
232 		// suffixToContentType.put("", "application/andrew-inset");
233 		suffixToContentType.put( "spl", "application/futuresplash" );
234 		suffixToContentType.put( "mbd", "application/mbedlet" );
235 		// suffixToContentType.put("", "application/x-director");
236 		// suffixToContentType.put("", "application/x-sprite");
237 		suffixToContentType.put( "rad", "application/x-rad-powermedia" );
238 		suffixToContentType.put( "ppz", "application/mspowerpoint" );
239 		suffixToContentType.put( "css", "application/x-pointplus" );
240 		suffixToContentType.put( "asp", "application/x-asap" );
241 		suffixToContentType.put( "asn", "application/astound" );
242 		suffixToContentType.put( "axs", "application/x-olescript" );
243 		suffixToContentType.put( "ods", "application/x-oleobject" );
244 		suffixToContentType.put( "opp", "x-form/x-openscape" );
245 		suffixToContentType.put( "wba", "application/x-webbasic" );
246 		suffixToContentType.put( "frm", "application/x-alpha-form" );
247 		suffixToContentType.put( "wfx", "x-script/x-wfxclient" );
248 		// suffixToContentType.put("", "application/octet-stream");
249 		// suffixToContentType.put("", "application/cals-1840");
250 		suffixToContentType.put( "pcn", "application/x-pcn" );
251 		// suffixToContentType.put("", "application/vnd.ms-excel");
252 		// suffixToContentType.put("", "application/x-msexcel");
253 		// suffixToContentType.put("", "application/ms-excel");
254 		suffixToContentType.put( "ppt", "application/vnd.ms-powerpoint" );
255 		// suffixToContentType.put("", "application/ms-powerpoint");
256 		// suffixToContentType.put("", "application/vnd.ms-project");
257 		// suffixToContentType.put("", "application/vnd.ms-works");
258 		// suffixToContentType.put("", "application/vnd.ms-tnef");
259 		// suffixToContentType.put("", "application/vnd.artgalry");
260 		suffixToContentType.put( "svd", "application/vnd.svd" );
261 		// suffixToContentType.put("", "application/vnd.truedoc");
262 		suffixToContentType.put( "ins", "application/x-net-install" );
263 		suffixToContentType.put( "ccv", "application/ccv" );
264 		suffixToContentType.put( "vts", "workbook/formulaone" );
265 		// suffixToContentType.put("", "application/cybercash");
266 		// suffixToContentType.put("", "application/applefile");
267 		// suffixToContentType.put("", "application/activemessage");
268 		// suffixToContentType.put("", "application/x400-bp");
269 		// suffixToContentType.put("", "application/news-message-id");
270 		// suffixToContentType.put("", "application/news-transmission");
271 		// suffixToContentType.put("", "multipart/mixed");
272 		// suffixToContentType.put("", "multipart/alternative");
273 		// suffixToContentType.put("", "multipart/related");
274 		// suffixToContentType.put("", "multipart/digest");
275 		// suffixToContentType.put("", "multipart/report");
276 		// suffixToContentType.put("", "multipart/parallel");
277 		// suffixToContentType.put("", "multipart/appledouble");
278 		// suffixToContentType.put("", "multipart/header-set");
279 		// suffixToContentType.put("", "multipart/voice-message");
280 		// suffixToContentType.put("", "multipart/form-data");
281 		// suffixToContentType.put("", "multipart/x-mixed-replace");
282 		// suffixToContentType.put("", "message/rfc822");
283 		// suffixToContentType.put("", "message/partial");
284 		// suffixToContentType.put("", "message/external-body");
285 		// suffixToContentType.put("", "message/news");
286 		// suffixToContentType.put("", "message/http");
287 		suffixToContentType.put( "wrl", "x-world/x-vrml" );
288 		suffixToContentType.put( "vrml", "x-world/x-vrml" );
289 		suffixToContentType.put( "vrw", "x-world/x-vream" );
290 		suffixToContentType.put( "p3d", "application/x-p3d" );
291 		suffixToContentType.put( "svr", "x-world/x-svr" );
292 		suffixToContentType.put( "wvr", "x-world/x-wvr" );
293 		suffixToContentType.put( "3dmf", "x-world/x-3dmf" );
294 		// suffixToContentType.put("", "chemical/*");
295 		suffixToContentType.put( "ma", "application/mathematica" );
296 		suffixToContentType.put( "msh", "x-model/x-mesh" );
297 		suffixToContentType.put( "v5d", "application/vis5d" );
298 		suffixToContentType.put( "igs", "application/iges" );
299 		suffixToContentType.put( "dwf ", "drawing/x-dwf" );
300 		suffixToContentType.put( "showcase", "application/x-showcase" );
301 		suffixToContentType.put( "slides", "application/x-showcase" );
302 		suffixToContentType.put( "sc", "application/x-showcase" );
303 		suffixToContentType.put( "show", "application/x-showcase" );
304 		suffixToContentType.put( "ins", "application/x-insight" );
305 		suffixToContentType.put( "insight", "application/x-insight" );
306 		suffixToContentType.put( "ano", "application/x-annotator" );
307 		suffixToContentType.put( "dir", "application/x-dirview" );
308 		suffixToContentType.put( "lic", "application/x-enterlicense" );
309 		suffixToContentType.put( "faxmgr", "application/x-fax-manager" );
310 		suffixToContentType.put( "faxmgrjob", "application/x-fax-manager-job" );
311 		suffixToContentType.put( "icnbk", "application/x-iconbook" );
312 		suffixToContentType.put( "wb", "application/x-inpview" );
313 		suffixToContentType.put( "inst ", "application/x-install" );
314 		suffixToContentType.put( "mail", "application/x-mailfolder" );
315 		suffixToContentType.put( "pp ppages", "application/x-ppages" );
316 		suffixToContentType.put( "sgi-lpr", "application/x-sgi-lpr" );
317 		suffixToContentType.put( "tardist", "application/x-tardist" );
318 		suffixToContentType.put( "ztardist", "application/x-ztardist" );
319 		suffixToContentType.put( "wkz", "application/x-wingz" );
320 		suffixToContentType.put( "iv", "graphics/x-inventor" );
321 		suffixToContentType.put( "dat", DEFAULT_CONTENTTYPE );
322 	}
323 
324 }