aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java12
-rw-r--r--src/main/java/org/zwobble/mammoth/util/MammothOptionals.java18
2 files changed, 23 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
index 7a235a2..334f925 100644
--- a/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/docx/BodyXmlReader.java
@@ -2,6 +2,7 @@ package org.zwobble.mammoth.docx;
import com.google.common.collect.ImmutableList;
import org.zwobble.mammoth.documents.*;
+import org.zwobble.mammoth.util.MammothOptionals;
import org.zwobble.mammoth.xml.XmlElement;
import org.zwobble.mammoth.xml.XmlElementLike;
import org.zwobble.mammoth.xml.XmlNode;
@@ -63,13 +64,10 @@ public class BodyXmlReader {
private Optional<NumberingLevel> readNumbering(XmlElementLike properties) {
XmlElementLike numberingProperties = properties.findChildOrEmpty("w:numPr");
- Optional<String> numId = readVal(numberingProperties, "w:numId");
- Optional<String> levelIndex = readVal(numberingProperties, "w:ilvl");
- if (numId.isPresent() && levelIndex.isPresent()) {
- return numbering.findLevel(numId.get(), levelIndex.get());
- } else {
- return Optional.empty();
- }
+ return MammothOptionals.flatMap(
+ readVal(numberingProperties, "w:numId"),
+ readVal(numberingProperties, "w:ilvl"),
+ numbering::findLevel);
}
private Optional<String> readVal(XmlElementLike element, String name) {
diff --git a/src/main/java/org/zwobble/mammoth/util/MammothOptionals.java b/src/main/java/org/zwobble/mammoth/util/MammothOptionals.java
new file mode 100644
index 0000000..e0e4876
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/util/MammothOptionals.java
@@ -0,0 +1,18 @@
+package org.zwobble.mammoth.util;
+
+import java.util.Optional;
+import java.util.function.BiFunction;
+
+public class MammothOptionals {
+ public static <T1, T2, R> Optional<R> flatMap(
+ Optional<T1> first,
+ Optional<T2> second,
+ BiFunction<T1, T2, Optional<R>> function)
+ {
+ if (first.isPresent() && second.isPresent()) {
+ return function.apply(first.get(), second.get());
+ } else {
+ return Optional.empty();
+ }
+ }
+}