aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/ContentTypes.java12
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java19
-rw-r--r--src/main/java/org/zwobble/mammoth/util/MammothStrings.java11
3 files changed, 36 insertions, 6 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
index 18aa8e4..bd61763 100644
--- a/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
+++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypes.java
@@ -7,13 +7,19 @@ import java.util.Optional;
public class ContentTypes {
private final Map<String, String> extensionDefaults;
+ private final Map<String, String> overrides;
- public ContentTypes(Map<String, String> extensionDefaults) {
+ public ContentTypes(Map<String, String> extensionDefaults, Map<String, String> overrides) {
this.extensionDefaults = extensionDefaults;
+ this.overrides = overrides;
}
public Optional<String> findContentType(String path) {
- String extension = Files.getFileExtension(path);
- return Optional.ofNullable(extensionDefaults.get(extension));
+ if (overrides.containsKey(path)) {
+ return Optional.ofNullable(overrides.get(path));
+ } else {
+ String extension = Files.getFileExtension(path);
+ return Optional.ofNullable(extensionDefaults.get(extension));
+ }
}
}
diff --git a/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java b/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java
index 6ecf8e2..afcc6c0 100644
--- a/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java
+++ b/src/main/java/org/zwobble/mammoth/docx/ContentTypesXml.java
@@ -3,14 +3,17 @@ package org.zwobble.mammoth.docx;
import org.zwobble.mammoth.xml.XmlElement;
import org.zwobble.mammoth.xml.XmlElementList;
-import java.util.AbstractMap;
import java.util.Map;
+import static com.google.common.collect.Maps.immutableEntry;
import static org.zwobble.mammoth.util.MammothMaps.toMap;
+import static org.zwobble.mammoth.util.MammothStrings.trimLeft;
public class ContentTypesXml {
public static ContentTypes readContentTypesXmlElement(XmlElement element) {
- return new ContentTypes(readDefaults(element.findChildren("content-types:Default")));
+ return new ContentTypes(
+ readDefaults(element.findChildren("content-types:Default")),
+ readOverrides(element.findChildren("content-types:Override")));
}
private static Map<String, String> readDefaults(XmlElementList children) {
@@ -18,8 +21,18 @@ public class ContentTypesXml {
}
private static Map.Entry<String, String> readDefault(XmlElement element) {
- return new AbstractMap.SimpleImmutableEntry<>(
+ return immutableEntry(
element.getAttribute("Extension"),
element.getAttribute("ContentType"));
}
+
+ private static Map<String, String> readOverrides(XmlElementList children) {
+ return toMap(children, ContentTypesXml::readOverride);
+ }
+
+ private static Map.Entry<String, String> readOverride(XmlElement element) {
+ return immutableEntry(
+ trimLeft(element.getAttribute("PartName"), '/'),
+ element.getAttribute("ContentType"));
+ }
}
diff --git a/src/main/java/org/zwobble/mammoth/util/MammothStrings.java b/src/main/java/org/zwobble/mammoth/util/MammothStrings.java
new file mode 100644
index 0000000..bdd826c
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/util/MammothStrings.java
@@ -0,0 +1,11 @@
+package org.zwobble.mammoth.util;
+
+public class MammothStrings {
+ public static String trimLeft(String value, char character) {
+ int index = 0;
+ while (index < value.length() && value.charAt(index) == character) {
+ index++;
+ }
+ return value.substring(index);
+ }
+}