aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Comment.java21
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java32
-rw-r--r--src/test/java/org/zwobble/mammoth/tests/docx/CommentXmlTests.java38
3 files changed, 91 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Comment.java b/src/main/java/org/zwobble/mammoth/internal/documents/Comment.java
new file mode 100644
index 0000000..f3c76ea
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Comment.java
@@ -0,0 +1,21 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class Comment {
+ private final String commentId;
+ private final List<DocumentElement> body;
+
+ public Comment(String commentId, List<DocumentElement> body) {
+ this.commentId = commentId;
+ this.body = body;
+ }
+
+ public String getCommentId() {
+ return commentId;
+ }
+
+ public List<DocumentElement> getBody() {
+ return body;
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java
new file mode 100644
index 0000000..4cacf08
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java
@@ -0,0 +1,32 @@
+package org.zwobble.mammoth.internal.docx;
+
+import org.zwobble.mammoth.internal.documents.Comment;
+import org.zwobble.mammoth.internal.results.InternalResult;
+import org.zwobble.mammoth.internal.xml.XmlElement;
+
+import java.util.List;
+
+public class CommentXmlReader {
+ private final BodyXmlReader bodyReader;
+
+ public CommentXmlReader(BodyXmlReader bodyReader) {
+ this.bodyReader = bodyReader;
+ }
+
+ public InternalResult<List<Comment>> readElement(XmlElement element) {
+ return InternalResult.flatMap(
+ element.findChildren("w:comment"),
+ this::readCommentElement
+ );
+ }
+
+ private InternalResult<Comment> readCommentElement(XmlElement element) {
+ String commentId = element.getAttribute("w:id");
+ return bodyReader.readElements(element.getChildren())
+ .toResult()
+ .map(children -> new Comment(
+ commentId,
+ children
+ ));
+ }
+}
diff --git a/src/test/java/org/zwobble/mammoth/tests/docx/CommentXmlTests.java b/src/test/java/org/zwobble/mammoth/tests/docx/CommentXmlTests.java
new file mode 100644
index 0000000..e7f9994
--- /dev/null
+++ b/src/test/java/org/zwobble/mammoth/tests/docx/CommentXmlTests.java
@@ -0,0 +1,38 @@
+package org.zwobble.mammoth.tests.docx;
+
+import org.junit.Test;
+import org.zwobble.mammoth.internal.documents.Comment;
+import org.zwobble.mammoth.internal.docx.CommentXmlReader;
+import org.zwobble.mammoth.internal.results.InternalResult;
+import org.zwobble.mammoth.internal.xml.XmlNode;
+
+import java.util.List;
+
+import static com.natpryce.makeiteasy.MakeItEasy.a;
+import static com.natpryce.makeiteasy.MakeItEasy.make;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.zwobble.mammoth.internal.util.Lists.list;
+import static org.zwobble.mammoth.internal.util.Maps.map;
+import static org.zwobble.mammoth.internal.xml.XmlNodes.element;
+import static org.zwobble.mammoth.tests.DeepReflectionMatcher.deepEquals;
+import static org.zwobble.mammoth.tests.ResultMatchers.isInternalSuccess;
+import static org.zwobble.mammoth.tests.documents.DocumentElementMakers.PARAGRAPH;
+import static org.zwobble.mammoth.tests.docx.BodyXmlReaderMakers.bodyReader;
+
+public class CommentXmlTests {
+ @Test
+ public void idAndBodyOfCommentIsRead() {
+ List<XmlNode> body = list(element("w:p"));
+ CommentXmlReader reader = new CommentXmlReader(make(a(bodyReader)));
+ InternalResult<List<Comment>> result = reader.readElement(element("w:comments", list(
+ element("w:comment", map("w:id", "1"), body)
+ )));
+ assertThat(
+ result,
+ isInternalSuccess(contains(
+ deepEquals(new Comment("1", list(make(a(PARAGRAPH)))))
+ ))
+ );
+ }
+}