diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-06-04 14:54:27 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-06-04 14:54:27 +0100 |
| commit | db126d0087963aad877efca233fb1123e9872051 (patch) | |
| tree | 92abe9ecb381f28002e77a2f9177872c28af4dbf /src | |
| parent | b2c22b0696487284ce1ae9cc908f3f333bcde6d5 (diff) | |
Return optional element from findChild
Diffstat (limited to 'src')
7 files changed, 28 insertions, 5 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java index 117ae34..ca8c3dc 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java @@ -4,6 +4,7 @@ import org.zwobble.mammoth.internal.documents.Document; import org.zwobble.mammoth.internal.documents.Notes; import org.zwobble.mammoth.internal.results.InternalResult; import org.zwobble.mammoth.internal.xml.XmlElement; +import org.zwobble.mammoth.internal.xml.XmlElementLike; public class DocumentXmlReader { private final BodyXmlReader bodyReader; @@ -15,7 +16,7 @@ public class DocumentXmlReader { } public InternalResult<Document> readElement(XmlElement element) { - XmlElement body = element.findChild("w:body"); + XmlElementLike body = element.findChildOrEmpty("w:body"); return bodyReader.readElements(body.getChildren()) .toResult() .map(children -> new Document(children, notes)); diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java index 1f2fd41..fa1941f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java @@ -51,7 +51,7 @@ public class NumberingXml { ) { // TODO: in python-mammoth, we allow None here. Check whether that's actually possible or not String numId = numElement.getAttribute("w:numId"); - String abstractNumId = numElement.findChild("w:abstractNumId").getAttribute("w:val"); + String abstractNumId = numElement.findChild("w:abstractNumId").get().getAttribute("w:val"); return entry(numId, lookup(abstractNums, abstractNumId).get()); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java index e38f2f2..cbb1ab0 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java @@ -33,7 +33,7 @@ public class OfficeXml { @Override public List<XmlNode> visit(XmlElement element) { if (element.getName().equals("mc:AlternateContent")) { - return element.findChild("mc:Fallback").getChildren(); + return element.findChildOrEmpty("mc:Fallback").getChildren(); } else { XmlElement collapsedElement = new XmlElement( element.getName(), diff --git a/src/main/java/org/zwobble/mammoth/internal/util/Iterables.java b/src/main/java/org/zwobble/mammoth/internal/util/Iterables.java index e9246c3..cb2ac36 100644 --- a/src/main/java/org/zwobble/mammoth/internal/util/Iterables.java +++ b/src/main/java/org/zwobble/mammoth/internal/util/Iterables.java @@ -26,6 +26,15 @@ public class Iterables { }; } + public static <T> Optional<T> getFirst(Iterable<? extends T> iterable) { + Iterator<? extends T> iterator = iterable.iterator(); + if (iterator.hasNext()) { + return Optional.of(iterator.next()); + } else { + return Optional.empty(); + } + } + public static <T> T getFirst(Iterable<? extends T> iterable, T defaultValue) { Iterator<? extends T> iterator = iterable.iterator(); if (iterator.hasNext()) { diff --git a/src/main/java/org/zwobble/mammoth/internal/xml/NullXmlElement.java b/src/main/java/org/zwobble/mammoth/internal/xml/NullXmlElement.java index ecc7971..4d32d38 100644 --- a/src/main/java/org/zwobble/mammoth/internal/xml/NullXmlElement.java +++ b/src/main/java/org/zwobble/mammoth/internal/xml/NullXmlElement.java @@ -1,7 +1,10 @@ package org.zwobble.mammoth.internal.xml; +import java.util.List; import java.util.Optional; +import static org.zwobble.mammoth.internal.util.Lists.list; + public class NullXmlElement implements XmlElementLike { public static final XmlElementLike INSTANCE = new NullXmlElement(); @@ -22,4 +25,9 @@ public class NullXmlElement implements XmlElementLike { public Optional<String> getAttributeOrNone(String name) { return Optional.empty(); } + + @Override + public List<XmlNode> getChildren() { + return list(); + } } diff --git a/src/main/java/org/zwobble/mammoth/internal/xml/XmlElement.java b/src/main/java/org/zwobble/mammoth/internal/xml/XmlElement.java index cd72494..0a1665c 100644 --- a/src/main/java/org/zwobble/mammoth/internal/xml/XmlElement.java +++ b/src/main/java/org/zwobble/mammoth/internal/xml/XmlElement.java @@ -1,5 +1,7 @@ package org.zwobble.mammoth.internal.xml; +import org.zwobble.mammoth.internal.util.Iterables; + import java.util.List; import java.util.Map; import java.util.Optional; @@ -47,6 +49,7 @@ public class XmlElement implements XmlNode, XmlElementLike { return visitor.visit(this); } + @Override public List<XmlNode> getChildren() { return children; } @@ -61,8 +64,8 @@ public class XmlElement implements XmlNode, XmlElementLike { return new XmlElementList(toList(findChildrenIterable(name))); } - public XmlElement findChild(String name) { - return findChildrenIterable(name).iterator().next(); + public Optional<XmlElement> findChild(String name) { + return Iterables.getFirst(findChildrenIterable(name)); } @Override diff --git a/src/main/java/org/zwobble/mammoth/internal/xml/XmlElementLike.java b/src/main/java/org/zwobble/mammoth/internal/xml/XmlElementLike.java index bdb3cc8..41df49f 100644 --- a/src/main/java/org/zwobble/mammoth/internal/xml/XmlElementLike.java +++ b/src/main/java/org/zwobble/mammoth/internal/xml/XmlElementLike.java @@ -1,9 +1,11 @@ package org.zwobble.mammoth.internal.xml; +import java.util.List; import java.util.Optional; public interface XmlElementLike { boolean hasChild(String name); XmlElementLike findChildOrEmpty(String name); Optional<String> getAttributeOrNone(String name); + List<XmlNode> getChildren(); } |
