View Javadoc

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