1
2
3
4
5
6
7
8
9
10
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
101
102
103
104
105 suffixToContentType.put( "talk", "text/x-speech" );
106 suffixToContentType.put( "css", "text/css" );
107
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
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
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
139 suffixToContentType.put( "dxf", "image/vnd.dxf" );
140
141 suffixToContentType.put( "svf", "image/vnd.svf" );
142
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
160 suffixToContentType.put( "mmid", "x-music/x-midi" );
161 suffixToContentType.put( "skp", "application/vnd.koan" );
162
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
176 suffixToContentType.put( "pac", "application/x-ns-proxy-autoconfig" );
177
178
179
180
181 suffixToContentType.put( "ice", "x-conference/x-cooltalk" );
182
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
189 suffixToContentType.put( "mif", "application/vnd.mif" );
190
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
203 suffixToContentType.put( "doc", "application/msword" );
204
205
206 suffixToContentType.put( "oda", "application/oda" );
207 suffixToContentType.put( "evy", "application/envoy" );
208
209
210
211
212 suffixToContentType.put( "fm", "application/vnd.framemaker" );
213 suffixToContentType.put( "frm", "application/vnd.framemaker" );
214 suffixToContentType.put( "frame", "application/vnd.framemaker" );
215
216
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
239
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
245
246
247
248
249 suffixToContentType.put( "spl", "application/futuresplash" );
250 suffixToContentType.put( "mbd", "application/mbedlet" );
251
252
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
265
266 suffixToContentType.put( "pcn", "application/x-pcn" );
267
268
269
270 suffixToContentType.put( "ppt", "application/vnd.ms-powerpoint" );
271
272
273
274
275
276 suffixToContentType.put( "svd", "application/vnd.svd" );
277
278 suffixToContentType.put( "ins", "application/x-net-install" );
279 suffixToContentType.put( "ccv", "application/ccv" );
280 suffixToContentType.put( "vts", "workbook/formulaone" );
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
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
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 }