summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-06-04 14:54:27 +0100
committerMichael Williamson <mike@zwobble.org>2016-06-04 14:54:27 +0100
commitdb126d0087963aad877efca233fb1123e9872051 (patch)
tree92abe9ecb381f28002e77a2f9177872c28af4dbf /src/main/java
parentb2c22b0696487284ce1ae9cc908f3f333bcde6d5 (diff)
Return optional element from findChild
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java3
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/NumberingXml.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/OfficeXml.java2
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/util/Iterables.java9
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/xml/NullXmlElement.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/xml/XmlElement.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/xml/XmlElementLike.java2
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();
}