/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.support.editor.inspectors.attachments; import com.eviware.soapui.support.types.StringToStringMap; import java.util.HashMap; /** * Handles drop of files on the AttachementPanel * * @author ole.matzura */ public class ContentTypeHandler { private static final HashMap<String, String> suffixToContentType; public static final String DEFAULT_CONTENTTYPE = "application/octet-stream"; private static StringToStringMap contentTypeToSuffix; public static String getContentTypeFromFilename(String fileName) { String suffix = getSuffixFromFilename(fileName); if (suffixToContentType.containsKey(suffix)) { return suffixToContentType.get(suffix); } return DEFAULT_CONTENTTYPE; } public static String getSuffixFromFilename(String fileName) { if (fileName == null || fileName.length() == 0) { return ""; } int pos = fileName.lastIndexOf(".") + 1; int len = fileName.length(); String suffix = ""; if (pos < len) { suffix = fileName.substring(pos, len); } return suffix; } public static String getExtensionForContentType(String contentType) { contentType = contentType.toLowerCase(); int ix = contentType.indexOf(';'); if (ix > 0) { contentType = contentType.substring(0, ix); } if (contentTypeToSuffix.containsKey(contentType)) { return contentTypeToSuffix.get(contentType); } for (String key : suffixToContentType.keySet()) { if (key.length() == 3 && suffixToContentType.get(key).equals(contentType)) { return key; } } return "dat"; } static { contentTypeToSuffix = new StringToStringMap(); contentTypeToSuffix.put("text/html", "html"); contentTypeToSuffix.put("text/plain", "txt"); contentTypeToSuffix.put("text/xml", "xml"); contentTypeToSuffix.put("image/jpeg", "jpg"); contentTypeToSuffix.put("audio/x-aiff", "aif"); contentTypeToSuffix.put("video/mpeg", "mpg"); contentTypeToSuffix.put("application/postscript", "ps"); contentTypeToSuffix.put("application/octet-stream", "dat"); suffixToContentType = new HashMap<String, String>(); suffixToContentType.put("html", "text/html"); suffixToContentType.put("htm", "text/html"); suffixToContentType.put("txt", "text/plain"); suffixToContentType.put("xml", "text/xml"); suffixToContentType.put("wsdl", "text/xml"); suffixToContentType.put("xsd", "text/xml"); suffixToContentType.put("c", "text/plain"); suffixToContentType.put("c++", "text/plain"); suffixToContentType.put("pl", "text/plain"); suffixToContentType.put("c", "text/plain"); suffixToContentType.put("h", "text/plain"); // suffixToContentType.put("", "text/richtext"); // suffixToContentType.put("", "text/x-setext"); // suffixToContentType.put("", "text/enriched"); // suffixToContentType.put("", "text/tab-separated-values"); // suffixToContentType.put("", "text/sgml"); suffixToContentType.put("talk", "text/x-speech"); suffixToContentType.put("css", "text/css"); // suffixToContentType.put("", "application/dsssl"); suffixToContentType.put("gif", "image/gif"); suffixToContentType.put("xbm", "image/x-xbitmap"); suffixToContentType.put("xpm", "image/x-xpixmap"); suffixToContentType.put("png", "image/x-png"); suffixToContentType.put("ief", "image/ief"); suffixToContentType.put("jpeg", "image/jpeg"); suffixToContentType.put("jpg", "image/jpeg"); suffixToContentType.put("tiff tif", "image/tiff"); suffixToContentType.put("tif", "image/tiff"); suffixToContentType.put("rgb", "image/rgb"); // suffixToContentType.put("", "image/x-rgb"); suffixToContentType.put("g3f ", "image/g3fax"); suffixToContentType.put("xwd ", "image/x-xwindowdump"); suffixToContentType.put("pict", "image/x-pict"); suffixToContentType.put("ppm", "image/x-portable-pixmap"); suffixToContentType.put("pgm", "image/x-portable-graymap"); suffixToContentType.put("pbm", "image/x-portable-bitmap"); suffixToContentType.put("pnm", "image/x-portable-anymap"); suffixToContentType.put("bmp", "image/x-ms-bmp"); suffixToContentType.put("ras", "image/x-cmu-raster"); suffixToContentType.put("pcd", "image/x-photo-cd"); suffixToContentType.put("cgm", "image/cgm"); // suffixToContentType.put("", "image/naplps"); suffixToContentType.put("mil", "image/x-cals"); suffixToContentType.put("cal", "image/x-cals"); suffixToContentType.put("fif", "image/fif"); suffixToContentType.put("dsf", "image/x-mgx-dsf"); suffixToContentType.put("cmx", "image/x-cmx"); suffixToContentType.put("wi", "image/wavelet"); suffixToContentType.put("dwg", "image/vnd.dwg"); // suffixToContentType.put("", "image/x-dwg"); suffixToContentType.put("dxf", "image/vnd.dxf"); // suffixToContentType.put("", "image/x-dxf"); suffixToContentType.put("svf", "image/vnd.svf"); // suffixToContentType.put("", "also vector/x-svf"); suffixToContentType.put("au snd", "audio/basic"); suffixToContentType.put("snd", "audio/basic"); suffixToContentType.put("aif", "audio/x-aiff"); suffixToContentType.put("aiff", "audio/x-aiff"); suffixToContentType.put("aifc", "audio/x-aiff"); suffixToContentType.put("wav", "audio/x-wav"); suffixToContentType.put("mpa", "audio/x-mpeg"); suffixToContentType.put("abs", "audio/x-mpeg"); suffixToContentType.put("mpega", "audio/x-mpeg"); suffixToContentType.put("mp2a", "audio/x-mpeg-2"); suffixToContentType.put("mpa2", "audio/x-mpeg-2"); suffixToContentType.put("es", "audio/echospeech"); suffixToContentType.put("vox", "audio/voxware"); suffixToContentType.put("lcc", "application/fastman"); suffixToContentType.put("ra", "application/x-pn-realaudio"); suffixToContentType.put("ram", "application/x-pn-realaudio"); // suffixToContentType.put("", "application/vnd.music-niff"); suffixToContentType.put("mmid", "x-music/x-midi"); suffixToContentType.put("skp", "application/vnd.koan"); // suffixToContentType.put("", "application/x-koan"); suffixToContentType.put("talk", "text/x-speech"); suffixToContentType.put("mpeg", "video/mpeg"); suffixToContentType.put("mpg", "video/mpeg"); suffixToContentType.put("mpe", "video/mpeg"); suffixToContentType.put("mpv2", "video/mpeg-2"); suffixToContentType.put("mp2v", "video/mpeg-2"); suffixToContentType.put("qt", "video/quicktime"); suffixToContentType.put("mov", "video/quicktime"); suffixToContentType.put("avi", "video/x-msvideo"); suffixToContentType.put("movie", "video/x-sgi-movie"); suffixToContentType.put("vdo", "video/vdo"); suffixToContentType.put("viv", "video/vnd.vivo"); // suffixToContentType.put("", "video/vivo"); suffixToContentType.put("pac", "application/x-ns-proxy-autoconfig"); // suffixToContentType.put("", "application/x-www-form-urlencoded"); // suffixToContentType.put("", "application/x-www-local-exec"); // suffixToContentType.put("", "multipart/x-mixed-replace"); // suffixToContentType.put("", "multipart/form-data"); suffixToContentType.put("ice", "x-conference/x-cooltalk"); // suffixToContentType.put("", "application/x-chat"); suffixToContentType.put("ai", "application/postscript"); suffixToContentType.put("eps", "application/postscript"); suffixToContentType.put("ps", "application/postscript"); suffixToContentType.put("rtf", "application/rtf"); suffixToContentType.put("pdf", "application/pdf"); // suffixToContentType.put("", "application/x-pdf"); suffixToContentType.put("mif", "application/vnd.mif"); // suffixToContentType.put("", "application/x-mif"); suffixToContentType.put("t", "application/x-troff"); suffixToContentType.put("tr", "application/x-troff"); suffixToContentType.put("roff", "application/x-troff"); suffixToContentType.put("man", "application/x-troff-man"); suffixToContentType.put("me", "application/x-troff-me"); suffixToContentType.put("ms", "application/x-troff-ms"); suffixToContentType.put("latex", "application/x-latex"); suffixToContentType.put("tex", "application/x-tex"); suffixToContentType.put("texinfo", "application/x-texinfo"); suffixToContentType.put("texi ", "application/x-texinfo"); suffixToContentType.put("dvi", "application/x-dvi"); // suffixToContentType.put("", "application/macwriteii"); suffixToContentType.put("doc", "application/msword"); // suffixToContentType.put("", "application/wordperfect5.1"); // suffixToContentType.put("", "application/sgml"); suffixToContentType.put("oda", "application/oda"); suffixToContentType.put("evy", "application/envoy"); // suffixToContentType.put("", "application/wita"); // suffixToContentType.put("", "application/dec-dx"); // suffixToContentType.put("", "application/dca-rft"); // suffixToContentType.put("", "application/commonground"); suffixToContentType.put("fm", "application/vnd.framemaker"); suffixToContentType.put("frm", "application/vnd.framemaker"); suffixToContentType.put("frame", "application/vnd.framemaker"); // suffixToContentType.put("", "application/x-framemaker"); // suffixToContentType.put("", "application/remote-printing"); suffixToContentType.put("gtar", "application/x-gtar"); suffixToContentType.put("tar", "application/x-tar"); suffixToContentType.put("ustar", "application/x-ustar"); suffixToContentType.put("bcpio", "application/x-bcpio"); suffixToContentType.put("cpio", "application/x-cpio"); suffixToContentType.put("shar", "application/x-shar"); suffixToContentType.put("zip", "application/zip"); suffixToContentType.put("hqx", "application/mac-binhex40"); suffixToContentType.put("sit", "application/x-stuffit"); suffixToContentType.put("sea", "application/x-stuffit"); suffixToContentType.put("fif", "application/fractals"); suffixToContentType.put("bin", "application/octet-stream"); suffixToContentType.put("uu", "application/octet-stream"); suffixToContentType.put("exe", "application/octet-stream"); suffixToContentType.put("src", "application/x-wais-source"); suffixToContentType.put("wsrc", "application/x-wais-source"); suffixToContentType.put("hdf", "application/hdf"); suffixToContentType.put("js", "text/javascript"); suffixToContentType.put("json", "text/javascript"); suffixToContentType.put("ls", "text/javascript"); suffixToContentType.put("mocha", "text/javascript"); // suffixToContentType.put("", "application/x-javascript"); // suffixToContentType.put("", "text/vbscript"); suffixToContentType.put("sh", "application/x-sh"); suffixToContentType.put("csh", "application/x-csh"); suffixToContentType.put("pl", "application/x-perl"); suffixToContentType.put("tcl ", "application/x-tcl"); // suffixToContentType.put("", "application/atomicmail"); // suffixToContentType.put("", "application/slate"); // suffixToContentType.put("", "application/octet-stream"); // suffixToContentType.put("", "application/riscos"); // suffixToContentType.put("", "application/andrew-inset"); suffixToContentType.put("spl", "application/futuresplash"); suffixToContentType.put("mbd", "application/mbedlet"); // suffixToContentType.put("", "application/x-director"); // suffixToContentType.put("", "application/x-sprite"); suffixToContentType.put("rad", "application/x-rad-powermedia"); suffixToContentType.put("ppz", "application/mspowerpoint"); suffixToContentType.put("asp", "application/x-asap"); suffixToContentType.put("asn", "application/astound"); suffixToContentType.put("axs", "application/x-olescript"); suffixToContentType.put("ods", "application/x-oleobject"); suffixToContentType.put("opp", "x-form/x-openscape"); suffixToContentType.put("wba", "application/x-webbasic"); suffixToContentType.put("frm", "application/x-alpha-form"); suffixToContentType.put("wfx", "x-script/x-wfxclient"); suffixToContentType.put("pcn", "application/x-pcn"); suffixToContentType.put("ppt", "application/vnd.ms-powerpoint"); suffixToContentType.put("svd", "application/vnd.svd"); suffixToContentType.put("ins", "application/x-net-install"); suffixToContentType.put("ccv", "application/ccv"); suffixToContentType.put("vts", "workbook/formulaone"); suffixToContentType.put("wrl", "x-world/x-vrml"); suffixToContentType.put("vrml", "x-world/x-vrml"); suffixToContentType.put("vrw", "x-world/x-vream"); suffixToContentType.put("p3d", "application/x-p3d"); suffixToContentType.put("svr", "x-world/x-svr"); suffixToContentType.put("wvr", "x-world/x-wvr"); suffixToContentType.put("3dmf", "x-world/x-3dmf"); suffixToContentType.put("ma", "application/mathematica"); suffixToContentType.put("msh", "x-model/x-mesh"); suffixToContentType.put("v5d", "application/vis5d"); suffixToContentType.put("igs", "application/iges"); suffixToContentType.put("dwf ", "drawing/x-dwf"); suffixToContentType.put("showcase", "application/x-showcase"); suffixToContentType.put("slides", "application/x-showcase"); suffixToContentType.put("sc", "application/x-showcase"); suffixToContentType.put("show", "application/x-showcase"); suffixToContentType.put("swf", "application/x-shockwave-flash"); suffixToContentType.put("ins", "application/x-insight"); suffixToContentType.put("insight", "application/x-insight"); suffixToContentType.put("ano", "application/x-annotator"); suffixToContentType.put("dir", "application/x-dirview"); suffixToContentType.put("lic", "application/x-enterlicense"); suffixToContentType.put("faxmgr", "application/x-fax-manager"); suffixToContentType.put("faxmgrjob", "application/x-fax-manager-job"); suffixToContentType.put("icnbk", "application/x-iconbook"); suffixToContentType.put("wb", "application/x-inpview"); suffixToContentType.put("inst ", "application/x-install"); suffixToContentType.put("mail", "application/x-mailfolder"); suffixToContentType.put("pp ppages", "application/x-ppages"); suffixToContentType.put("sgi-lpr", "application/x-sgi-lpr"); suffixToContentType.put("tardist", "application/x-tardist"); suffixToContentType.put("ztardist", "application/x-ztardist"); suffixToContentType.put("wkz", "application/x-wingz"); suffixToContentType.put("iv", "graphics/x-inventor"); suffixToContentType.put("dat", DEFAULT_CONTENTTYPE); } }