From f1c7b8b2b01512ee243f0c493932d325af0afd76 Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Sun, 3 Sep 2023 03:59:20 +0530 Subject: [PATCH 1/6] Add getting Extension from MIME type of a file --- core-java-modules/core-java-io/pom.xml | 11 +++++ .../ExtensionFromMimeTypeUnitTest.java | 47 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml index 59952c2d9e..53762d7547 100644 --- a/core-java-modules/core-java-io/pom.xml +++ b/core-java-modules/core-java-io/pom.xml @@ -43,6 +43,17 @@ ${angus-activation.version} test + + org.jodd + jodd-util + 6.2.1 + + + com.j256.simplemagic + simplemagic + 1.17 + + diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java new file mode 100644 index 0000000000..0a22e2defb --- /dev/null +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -0,0 +1,47 @@ +package com.baeldung.extension; + +import static org.junit.Assert.assertEquals; +import java.util.HashMap; +import java.util.Map; + +import org.apache.tika.mime.MimeType; +import org.apache.tika.mime.MimeTypeException; +import org.apache.tika.mime.MimeTypes; +import org.junit.Test; + +import com.j256.simplemagic.ContentInfo; + +public class ExtensionFromMimeTypeUnitTest { + public static final String PNG_EXT = "image/png"; + @Test + public void whenUsingTika_thenGetFileExtension() throws MimeTypeException { + MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); + MimeType type = allTypes.forName(PNG_EXT); + String extension = type.getExtension(); + assertEquals(".png", extension); + } + + @Test + public void whenUsingJodd_thenGetFileExtension() { + String fileExtension = jodd.net.MimeTypes.findExtensionsByMimeTypes(PNG_EXT,false)[0]; + assertEquals("png", fileExtension); + } + + @Test + public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() { + ContentInfo contentInfo = new ContentInfo("", PNG_EXT, "", true); + String[] fileExtensions = contentInfo.getFileExtensions(); + assertEquals("png", fileExtensions[0]); + } + + @Test + public void whenUsingCustomLogic_thenGetFileExtension() { + Map mimeToExtensionMap = new HashMap<>(); + mimeToExtensionMap.put("application/pdf", "pdf"); + mimeToExtensionMap.put("image/jpeg", "jpg"); + mimeToExtensionMap.put("image/png", "png"); + String fileExtension = mimeToExtensionMap.get(PNG_EXT); + if (fileExtension!= null) + assertEquals("png", fileExtension); + } +} From 869b931e730e54f076d297c087c036fdceb8824d Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Wed, 6 Sep 2023 02:12:57 +0530 Subject: [PATCH 2/6] Update Tests to get multiple extensions --- .../ExtensionFromMimeTypeUnitTest.java | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java index 0a22e2defb..cc7b781e30 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -1,8 +1,14 @@ package com.baeldung.extension; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; + +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.tika.mime.MimeType; import org.apache.tika.mime.MimeTypeException; @@ -12,36 +18,47 @@ import org.junit.Test; import com.j256.simplemagic.ContentInfo; public class ExtensionFromMimeTypeUnitTest { - public static final String PNG_EXT = "image/png"; + public static final String JPEG_EXT = "image/jpeg"; @Test public void whenUsingTika_thenGetFileExtension() throws MimeTypeException { + List SUPPORTED_EXTENSIONS = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi"); MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); - MimeType type = allTypes.forName(PNG_EXT); + MimeType type = allTypes.forName(JPEG_EXT); String extension = type.getExtension(); - assertEquals(".png", extension); + assertEquals(".jpg", extension); + List supportedExtensions = type.getExtensions(); + assertEquals(SUPPORTED_EXTENSIONS, supportedExtensions); } @Test public void whenUsingJodd_thenGetFileExtension() { - String fileExtension = jodd.net.MimeTypes.findExtensionsByMimeTypes(PNG_EXT,false)[0]; - assertEquals("png", fileExtension); + String[] supportedExtensions = {"jpeg","jpg","jpe"}; + String[] extensionsByMimeTypes = jodd.net.MimeTypes.findExtensionsByMimeTypes(JPEG_EXT, false); + assertArrayEquals(supportedExtensions, extensionsByMimeTypes); } @Test public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() { - ContentInfo contentInfo = new ContentInfo("", PNG_EXT, "", true); + String[] supportedExtensions = {"jpeg","jpg","jpe"}; + ContentInfo contentInfo = new ContentInfo("", JPEG_EXT, "", true); String[] fileExtensions = contentInfo.getFileExtensions(); - assertEquals("png", fileExtensions[0]); + assertArrayEquals(supportedExtensions, fileExtensions); } @Test public void whenUsingCustomLogic_thenGetFileExtension() { - Map mimeToExtensionMap = new HashMap<>(); - mimeToExtensionMap.put("application/pdf", "pdf"); - mimeToExtensionMap.put("image/jpeg", "jpg"); - mimeToExtensionMap.put("image/png", "png"); - String fileExtension = mimeToExtensionMap.get(PNG_EXT); - if (fileExtension!= null) - assertEquals("png", fileExtension); + Map> mimeExtensionsMap = new HashMap<>(); + Set supportedExtensions = new HashSet<>(Arrays.asList(".jpeg",".jpg",".jpe")); + addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpeg"); + addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpg"); + addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpe"); + + String mimeTypeToLookup = "image/jpeg"; + Set extensions = mimeExtensionsMap.get(mimeTypeToLookup); + assertEquals(supportedExtensions, extensions); + } + + private void addMimeExtensions(Map> map, String mimeType, String extension) { + map.computeIfAbsent(mimeType, k -> new HashSet<>()).add(extension); } } From d7367094f3d541152f2c9c59e71757df0df3470d Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Wed, 6 Sep 2023 02:17:39 +0530 Subject: [PATCH 3/6] Address review comments --- .../extension/ExtensionFromMimeTypeUnitTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java index cc7b781e30..4df1ec451d 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -12,18 +12,18 @@ import java.util.Set; import org.apache.tika.mime.MimeType; import org.apache.tika.mime.MimeTypeException; -import org.apache.tika.mime.MimeTypes; + import org.junit.Test; import com.j256.simplemagic.ContentInfo; public class ExtensionFromMimeTypeUnitTest { - public static final String JPEG_EXT = "image/jpeg"; + private static final String IMG_MIME_TYPE = "image/jpeg"; @Test public void whenUsingTika_thenGetFileExtension() throws MimeTypeException { List SUPPORTED_EXTENSIONS = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi"); - MimeTypes allTypes = MimeTypes.getDefaultMimeTypes(); - MimeType type = allTypes.forName(JPEG_EXT); + org.apache.tika.mime.MimeTypes allTypes = org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(); + MimeType type = allTypes.forName(IMG_MIME_TYPE); String extension = type.getExtension(); assertEquals(".jpg", extension); List supportedExtensions = type.getExtensions(); @@ -33,14 +33,14 @@ public class ExtensionFromMimeTypeUnitTest { @Test public void whenUsingJodd_thenGetFileExtension() { String[] supportedExtensions = {"jpeg","jpg","jpe"}; - String[] extensionsByMimeTypes = jodd.net.MimeTypes.findExtensionsByMimeTypes(JPEG_EXT, false); + String[] extensionsByMimeTypes = jodd.net.MimeTypes.findExtensionsByMimeTypes(IMG_MIME_TYPE, false); assertArrayEquals(supportedExtensions, extensionsByMimeTypes); } @Test public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() { String[] supportedExtensions = {"jpeg","jpg","jpe"}; - ContentInfo contentInfo = new ContentInfo("", JPEG_EXT, "", true); + ContentInfo contentInfo = new ContentInfo("", IMG_MIME_TYPE, "", true); String[] fileExtensions = contentInfo.getFileExtensions(); assertArrayEquals(supportedExtensions, fileExtensions); } From d7f6dfff1ce01a4b3952fc73bf3a3986ff05c825 Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Wed, 6 Sep 2023 02:18:51 +0530 Subject: [PATCH 4/6] Address review comments --- .../com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java index 4df1ec451d..86b3bf2308 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.apache.tika.mime.MimeType; import org.apache.tika.mime.MimeTypeException; import org.junit.Test; @@ -23,7 +22,7 @@ public class ExtensionFromMimeTypeUnitTest { public void whenUsingTika_thenGetFileExtension() throws MimeTypeException { List SUPPORTED_EXTENSIONS = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi"); org.apache.tika.mime.MimeTypes allTypes = org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(); - MimeType type = allTypes.forName(IMG_MIME_TYPE); + org.apache.tika.mime.MimeType type = allTypes.forName(IMG_MIME_TYPE); String extension = type.getExtension(); assertEquals(".jpg", extension); List supportedExtensions = type.getExtensions(); From 982a592fc6ac367bd8e89df310406f0677382936 Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Wed, 6 Sep 2023 23:27:10 +0530 Subject: [PATCH 5/6] Address review comments --- .../ExtensionFromMimeTypeUnitTest.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java index 86b3bf2308..b476a56df8 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.extension; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -17,44 +18,44 @@ import org.junit.Test; import com.j256.simplemagic.ContentInfo; public class ExtensionFromMimeTypeUnitTest { - private static final String IMG_MIME_TYPE = "image/jpeg"; + private static final String IMAGE_JPEG_MIME_TYPE = "image/jpeg"; @Test public void whenUsingTika_thenGetFileExtension() throws MimeTypeException { - List SUPPORTED_EXTENSIONS = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi"); + List expectedExtensions = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi"); org.apache.tika.mime.MimeTypes allTypes = org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(); - org.apache.tika.mime.MimeType type = allTypes.forName(IMG_MIME_TYPE); - String extension = type.getExtension(); - assertEquals(".jpg", extension); - List supportedExtensions = type.getExtensions(); - assertEquals(SUPPORTED_EXTENSIONS, supportedExtensions); + org.apache.tika.mime.MimeType type = allTypes.forName(IMAGE_JPEG_MIME_TYPE); + String primaryExtension = type.getExtension(); + assertEquals(".jpg", primaryExtension); + List detectedExtensions = type.getExtensions(); + assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions); } @Test public void whenUsingJodd_thenGetFileExtension() { - String[] supportedExtensions = {"jpeg","jpg","jpe"}; - String[] extensionsByMimeTypes = jodd.net.MimeTypes.findExtensionsByMimeTypes(IMG_MIME_TYPE, false); - assertArrayEquals(supportedExtensions, extensionsByMimeTypes); + String[] expectedExtensions = {"jpeg","jpg","jpe"}; + String[] detectedExtensions = jodd.net.MimeTypes.findExtensionsByMimeTypes(IMAGE_JPEG_MIME_TYPE, false); + assertThat(detectedExtensions).containsExactly(expectedExtensions); } @Test public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() { - String[] supportedExtensions = {"jpeg","jpg","jpe"}; - ContentInfo contentInfo = new ContentInfo("", IMG_MIME_TYPE, "", true); - String[] fileExtensions = contentInfo.getFileExtensions(); - assertArrayEquals(supportedExtensions, fileExtensions); + String[] expectedExtensions = {"jpeg","jpg","jpe"}; + ContentInfo contentInfo = new ContentInfo("", IMAGE_JPEG_MIME_TYPE, "", true); + String[] detectedExtensions = contentInfo.getFileExtensions(); + assertThat(detectedExtensions).containsExactly(expectedExtensions); } @Test public void whenUsingCustomLogic_thenGetFileExtension() { Map> mimeExtensionsMap = new HashMap<>(); - Set supportedExtensions = new HashSet<>(Arrays.asList(".jpeg",".jpg",".jpe")); + Set expectedExtensions = new HashSet<>(Arrays.asList(".jpeg",".jpg",".jpe")); addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpeg"); addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpg"); addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpe"); String mimeTypeToLookup = "image/jpeg"; - Set extensions = mimeExtensionsMap.get(mimeTypeToLookup); - assertEquals(supportedExtensions, extensions); + Set detectedExtensions = mimeExtensionsMap.get(mimeTypeToLookup); + assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions); } private void addMimeExtensions(Map> map, String mimeType, String extension) { From 2b5199a2c6d8d51e214f2ff07f7a19c96ef0c7e8 Mon Sep 17 00:00:00 2001 From: rajatgarg Date: Thu, 7 Sep 2023 22:48:08 +0530 Subject: [PATCH 6/6] Address review comments --- .../extension/ExtensionFromMimeTypeUnitTest.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java index b476a56df8..f8f42861cc 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java @@ -1,7 +1,6 @@ package com.baeldung.extension; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import java.util.Arrays; @@ -32,29 +31,28 @@ public class ExtensionFromMimeTypeUnitTest { @Test public void whenUsingJodd_thenGetFileExtension() { - String[] expectedExtensions = {"jpeg","jpg","jpe"}; + List expectedExtensions = Arrays.asList("jpeg", "jpg", "jpe"); String[] detectedExtensions = jodd.net.MimeTypes.findExtensionsByMimeTypes(IMAGE_JPEG_MIME_TYPE, false); - assertThat(detectedExtensions).containsExactly(expectedExtensions); + assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions); } @Test public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() { - String[] expectedExtensions = {"jpeg","jpg","jpe"}; + List expectedExtensions = Arrays.asList("jpeg", "jpg", "jpe"); ContentInfo contentInfo = new ContentInfo("", IMAGE_JPEG_MIME_TYPE, "", true); String[] detectedExtensions = contentInfo.getFileExtensions(); - assertThat(detectedExtensions).containsExactly(expectedExtensions); + assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions); } @Test public void whenUsingCustomLogic_thenGetFileExtension() { Map> mimeExtensionsMap = new HashMap<>(); - Set expectedExtensions = new HashSet<>(Arrays.asList(".jpeg",".jpg",".jpe")); - addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpeg"); + List expectedExtensions = Arrays.asList(".jpg", ".jpe", ".jpeg"); addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpg"); addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpe"); + addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpeg"); - String mimeTypeToLookup = "image/jpeg"; - Set detectedExtensions = mimeExtensionsMap.get(mimeTypeToLookup); + Set detectedExtensions = mimeExtensionsMap.get(IMAGE_JPEG_MIME_TYPE); assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions); }