diff --git a/source/java/org/alfresco/repo/content/MimetypeMap.java b/source/java/org/alfresco/repo/content/MimetypeMap.java index 818f904ae9..89594ab2a1 100644 --- a/source/java/org/alfresco/repo/content/MimetypeMap.java +++ b/source/java/org/alfresco/repo/content/MimetypeMap.java @@ -26,16 +26,16 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.springframework.extensions.config.Config; -import org.springframework.extensions.config.ConfigElement; -import org.springframework.extensions.config.ConfigLookupContext; -import org.springframework.extensions.config.ConfigService; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.content.encoding.ContentCharsetFinder; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.util.PropertyCheck; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.config.Config; +import org.springframework.extensions.config.ConfigElement; +import org.springframework.extensions.config.ConfigLookupContext; +import org.springframework.extensions.config.ConfigService; /** * Provides a bidirectional mapping between well-known mimetypes and @@ -295,14 +295,27 @@ public class MimetypeMap implements MimetypeService public String getExtension(String mimetype) { String extension = extensionsByMimetype.get(mimetype); - if (extension == null) + return (extension == null ? EXTENSION_BINARY : extension); + } + + /** + * Get the mimetype for the specified extension + * + * @param extension a valid file extension + * @return Returns a valid mimetype if found, or {@link #MIMETYPE_BINARY binary} as default. + */ + public String getMimetype(String extension) + { + String mimetype = MIMETYPE_BINARY; + if (extension != null) { - return EXTENSION_BINARY; - } - else - { - return extension; + extension = extension.toLowerCase(); + if (mimetypesByExtension.containsKey(extension)) + { + mimetype = mimetypesByExtension.get(extension); + } } + return mimetype; } public Map getDisplaysByExtension() @@ -340,13 +353,12 @@ public class MimetypeMap implements MimetypeService */ public String guessMimetype(String filename) { - filename = filename.toLowerCase(); String mimetype = MIMETYPE_BINARY; // extract the extension int index = filename.lastIndexOf('.'); if (index > -1 && (index < filename.length() - 1)) { - String extension = filename.substring(index + 1); + String extension = filename.substring(index + 1).toLowerCase(); if (mimetypesByExtension.containsKey(extension)) { mimetype = mimetypesByExtension.get(extension); diff --git a/source/java/org/alfresco/repo/content/MimetypeMapTest.java b/source/java/org/alfresco/repo/content/MimetypeMapTest.java index ad39600ba9..460becc5c4 100644 --- a/source/java/org/alfresco/repo/content/MimetypeMapTest.java +++ b/source/java/org/alfresco/repo/content/MimetypeMapTest.java @@ -80,4 +80,23 @@ public class MimetypeMapTest extends TestCase assertNotNull("No charset finder", mimetypeService.getContentCharsetFinder()); } + public void testMimetypeFromExtension() throws Exception + { + // test known mimetype + assertEquals("application/msword", mimetypeService.getMimetype("doc")); + // test case insensitivity + assertEquals("application/msword", mimetypeService.getMimetype("DOC")); + + // test fallback for unknown and missing + assertEquals(MimetypeMap.MIMETYPE_BINARY, mimetypeService.getMimetype(null)); + assertEquals(MimetypeMap.MIMETYPE_BINARY, mimetypeService.getMimetype("unknownext")); + } + + public void testGuessMimetypeForFilename() throws Exception + { + assertEquals("application/msword", mimetypeService.guessMimetype("something.doc")); + assertEquals("application/msword", mimetypeService.guessMimetype("SOMETHING.DOC")); + assertEquals(MimetypeMap.MIMETYPE_BINARY, mimetypeService.guessMimetype("noextension")); + assertEquals(MimetypeMap.MIMETYPE_BINARY, mimetypeService.guessMimetype("file.unknownext")); + } } diff --git a/source/java/org/alfresco/service/cmr/repository/MimetypeService.java b/source/java/org/alfresco/service/cmr/repository/MimetypeService.java index a700d1da8a..fdeee160a5 100644 --- a/source/java/org/alfresco/service/cmr/repository/MimetypeService.java +++ b/source/java/org/alfresco/service/cmr/repository/MimetypeService.java @@ -31,7 +31,6 @@ import org.alfresco.service.PublicService; * This service interface provides support for Mimetypes. * * @author Derek Hulley - * */ @PublicService public interface MimetypeService @@ -41,11 +40,19 @@ public interface MimetypeService * * @param mimetype a valid mimetype * @return Returns the default extension for the mimetype - * @throws AlfrescoRuntimeException if the mimetype doesn't exist */ @NotAuditable public String getExtension(String mimetype); + /** + * Get the mimetype for the specified extension + * + * @param extension a valid file extension + * @return Returns a valid mimetype if found, or null if does not exist + */ + @NotAuditable + public String getMimetype(String extension); + /** * Get all human readable mimetype descriptions indexed by mimetype extension *