/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/sam/trunk/samigo-services/src/java/org/sakaiproject/tool/assessment/util/MimeType.java $ * $Id: MimeType.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $ *********************************************************************************** * * Copyright (c) 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.tool.assessment.util; import java.util.HashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * In memory mime type lookup utility class. * We could also load from config file/table... * * @author esmiley@stanford.edu * @version $Id: MimeType.java 106463 2012-04-02 12:20:09Z david.horwitz@uct.ac.za $ */ public class MimeType { private static Log log = LogFactory.getLog(MimeType.class); private static HashMap extensionMime = new HashMap(); private static HashMap mimeExtension = new HashMap(); private static boolean loaded = false; private static final String UNKNOWN_EXTENSION = ".unknown_binary"; /** * command line unit test * @param args command line args */ public static void main(String[] args) { log.info("mime for BMP= " + get("BMP")); log.info("mime for .zip= " + get(".zip")); log.info("mime for .HTM= " + get (".HTM")); log.info("extension for application/x-tar= " + getExtension("application/x-tar")); log.info("extension for application/x-gzip= "+ getExtension("application/x-gzip")); } /** * get a mime type from an extension * @param extension the extension * @return the mime type */ public static String get(String extension){ if (!loaded) { init(); } if (extension == null) return ""; String ext = extension.toLowerCase(); if (! ext.startsWith(".")){ ext = "." + ext; } return "" + extensionMime.get(ext); } /** * get an extension form a mime type * @param mimeType the mime type * @return the extension */ public static String getExtension(String mimeType){ if (!loaded) { init(); } if (mimeType == null) return UNKNOWN_EXTENSION; String mime = mimeType.toLowerCase(); String extension = "" + mimeExtension.get(mime); if ("null".equals(extension)) extension = UNKNOWN_EXTENSION; return extension; } /** * loads the cross references */ private static void init() { extensionMime.put(".aif", "audio/x-aiff"); // Binary extensionMime.put(".aifc", "audio/x-aiff"); // Binary extensionMime.put(".aiff", "audio/x-aiff"); // Binary extensionMime.put(".au", "audio/basic"); // Binary extensionMime.put(".avi", "video/x-msvideo"); // Binary extensionMime.put(".bmp", "image/x-MS-bmp"); // Binary extensionMime.put(".cpio", "application/x-cpio"); // Binary extensionMime.put(".csh", "application/x-csh"); // Binary extensionMime.put(".dvi", "application/x-dvi"); // Binary extensionMime.put(".fif", "application/fractals"); // Binary extensionMime.put(".gif", "image/gif"); // Binary extensionMime.put(".gtar", "application/x-gtar"); // Binary extensionMime.put(".gz", "application/x-gzip"); // Binary extensionMime.put(".hqx", "application/mac-binhex40"); // Binary extensionMime.put(".htm", "text/html"); // Text extensionMime.put(".html", "text/html"); // Text extensionMime.put(".ief", "image/ief"); // Binary extensionMime.put(".jf", "application/x-javascript"); // Binary extensionMime.put(".latex", "application/x-latex"); // Binary extensionMime.put(".ls", "application/x-javascript"); // Binary extensionMime.put(".mocha", "application/x-javascript"); // Binary extensionMime.put(".mov", "video/quicktime"); // Binary extensionMime.put(".mpeg", "video/mpeg"); // Binary extensionMime.put(".pac", "application/x-ns-proxy-autoconfig"); // Binary extensionMime.put(".pbm", "image/x-portable-bitmap"); // Binary extensionMime.put(".pnm", "image/x-portable-anymap"); // Binary extensionMime.put(".ppm", "image/x-portable-pixmap"); // Binary extensionMime.put(".ps", "application/postscript"); // Binary extensionMime.put(".ras", "image/x-cmu-raster"); // Binary extensionMime.put(".rgb", "image/x-rgb"); // Binary extensionMime.put(".rtf", "application/rtf"); // Binary extensionMime.put(".shar", "appliation/x-shar"); // Binary extensionMime.put(".sit", "application/x-stuffit"); // Binary extensionMime.put(".tar", "application/x-tar"); // Binary extensionMime.put(".tcl", "application/x-tcl"); // Binary extensionMime.put(".tex", "application/x-tex"); // Binary extensionMime.put(".tif", "image/tiff"); // Binary extensionMime.put(".tiff", "image/tiff"); // Binary extensionMime.put(".txt", "text/plain"); // Text extensionMime.put(".xhtml", "text/xhtml"); // Text extensionMime.put(".xml", "text/xml"); // Text extensionMime.put(".xsd", "text/xml"); // Text extensionMime.put(".xsl", "text/xml"); // Text extensionMime.put(".xslt", "text/xml"); // Text extensionMime.put(".wav", "audio/x-wav"); // Binary extensionMime.put(".xbm", "image/x-bitmap"); // Binary extensionMime.put(".xpm", "image/x-pixmap"); // Binary extensionMime.put(".xwd", "image/xwindowdump"); // Binary extensionMime.put(".z", "application/x-compress"); // Binary extensionMime.put(".zip", "application/x-zip-compressed"); // Binary mimeExtension.put("application/x-shar", ".shar"); mimeExtension.put("application/fractals", ".fif"); mimeExtension.put("application/mac-binhex40", ".hqx"); mimeExtension.put("application/postscript", ".ps"); mimeExtension.put("application/rtf", ".rtf"); mimeExtension.put("application/x-compress", ".z"); mimeExtension.put("application/x-cpio", ".cpio"); mimeExtension.put("application/x-csh", ".csh"); mimeExtension.put("application/x-dvi", ".dvi"); mimeExtension.put("application/x-gtar", ".gtar"); mimeExtension.put("application/x-gzip", ".gz"); mimeExtension.put("application/x-javascript", ".jf"); mimeExtension.put("application/x-javascript", ".ls"); mimeExtension.put("application/x-javascript", ".mocha"); mimeExtension.put("application/x-latex", ".latex"); mimeExtension.put("application/x-ns-proxy-autoconfig", ".pac"); mimeExtension.put("application/x-stuffit", ".sit"); mimeExtension.put("application/x-tar", ".tar"); mimeExtension.put("application/x-tcl", ".tcl"); mimeExtension.put("application/x-tex", ".tex"); mimeExtension.put("application/x-zip-compressed", ".zip"); mimeExtension.put("audio/basic", ".au"); mimeExtension.put("audio/x-aiff", ".aiff"); mimeExtension.put("audio/x-wav", ".wav"); mimeExtension.put("image/gif", ".gif"); mimeExtension.put("image/ief", ".ief"); mimeExtension.put("image/tiff", ".tif"); mimeExtension.put("image/x-MS-bmp", ".bmp"); mimeExtension.put("image/x-bitmap", ".xbm"); mimeExtension.put("image/x-cmu-raster", ".ras"); mimeExtension.put("image/x-pixmap", ".xpm"); mimeExtension.put("image/x-portable-anymap", ".pnm"); mimeExtension.put("image/x-portable-bitmap", ".pbm"); mimeExtension.put("image/x-portable-pixmap", ".ppm"); mimeExtension.put("image/x-rgb", ".rgb"); mimeExtension.put("image/xwindowdump", ".xwd"); mimeExtension.put("text/html", ".html"); mimeExtension.put("text/plain", ".txt"); mimeExtension.put("text/xhtml", ".xhtml"); mimeExtension.put("text/xml", ".xml"); mimeExtension.put("video/mpeg", ".mpeg"); mimeExtension.put("video/quicktime", ".mov"); mimeExtension.put("video/x-msvideo", ".avi"); } }