From 7bc069e050e740432f86a780e13feae99968c831 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 31 Dec 2015 16:49:02 +0000 Subject: Add fallback image content types --- .../org/zwobble/mammoth/docx/ContentTypes.java | 18 ++++++++++++++- .../java/org/zwobble/mammoth/xml/XmlNodes.java | 4 ++++ .../mammoth/tests/docx/ContentTypesXmlTests.java | 27 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java index bd61763..f36ca49 100644 --- a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java +++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java @@ -1,11 +1,22 @@ package org.zwobble.mammoth.docx; +import com.google.common.collect.ImmutableMap; import com.google.common.io.Files; import java.util.Map; import java.util.Optional; public class ContentTypes { + private static final Map imageExtensions = ImmutableMap.builder() + .put("png", "png") + .put("gif", "gif") + .put("jpeg", "jpeg") + .put("jpg", "jpeg") + .put("bmp", "bmp") + .put("tif", "tiff") + .put("tiff", "tiff") + .build(); + private final Map extensionDefaults; private final Map overrides; @@ -19,7 +30,12 @@ public class ContentTypes { return Optional.ofNullable(overrides.get(path)); } else { String extension = Files.getFileExtension(path); - return Optional.ofNullable(extensionDefaults.get(extension)); + if (extensionDefaults.containsKey(extension)) { + return Optional.ofNullable(extensionDefaults.get(extension)); + } else { + return Optional.ofNullable(imageExtensions.get(extension.toLowerCase())) + .map(imageType -> "image/" + imageType); + } } } } diff --git a/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java b/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java index 272a710..ce36615 100644 --- a/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java +++ b/src/main/java/org/zwobble/mammoth/xml/XmlNodes.java @@ -7,6 +7,10 @@ import java.util.List; import java.util.Map; public class XmlNodes { + public static XmlElement element(String name) { + return element(name, ImmutableList.of()); + } + public static XmlElement element(String name, Map attributes) { return element(name, attributes, ImmutableList.of()); } diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java index 573103b..51273de 100644 --- a/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java +++ b/src/test/java/org/zwobble/mammoth/tests/docx/ContentTypesXmlTests.java @@ -39,4 +39,31 @@ public class ContentTypesXmlTests { Optional.of("image/hat"), contentTypes.findContentType("word/media/hat.png")); } + + @Test + public void fallbackContentTypesHaveCommonImageTypes() { + XmlElement element = element("content-types:Types"); + ContentTypes contentTypes = readContentTypesXmlElement(element); + assertEquals( + Optional.of("image/png"), + contentTypes.findContentType("word/media/hat.png")); + assertEquals( + Optional.of("image/gif"), + contentTypes.findContentType("word/media/hat.gif")); + assertEquals( + Optional.of("image/jpeg"), + contentTypes.findContentType("word/media/hat.jpg")); + assertEquals( + Optional.of("image/jpeg"), + contentTypes.findContentType("word/media/hat.jpeg")); + assertEquals( + Optional.of("image/bmp"), + contentTypes.findContentType("word/media/hat.bmp")); + assertEquals( + Optional.of("image/tiff"), + contentTypes.findContentType("word/media/hat.tif")); + assertEquals( + Optional.of("image/tiff"), + contentTypes.findContentType("word/media/hat.tiff")); + } } -- cgit v1.2.3