From 6e7b019fe842788247d0ff97950122c4ce456c86 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 28 Aug 2016 21:41:20 +0100 Subject: Add reader for comments.xml --- .../mammoth/internal/documents/Comment.java | 21 ++++++++++++ .../mammoth/internal/docx/CommentXmlReader.java | 32 ++++++++++++++++++ .../mammoth/tests/docx/CommentXmlTests.java | 38 ++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/internal/documents/Comment.java create mode 100644 src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java create mode 100644 src/test/java/org/zwobble/mammoth/tests/docx/CommentXmlTests.java (limited to 'src') 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 body; + + public Comment(String commentId, List body) { + this.commentId = commentId; + this.body = body; + } + + public String getCommentId() { + return commentId; + } + + public List 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> readElement(XmlElement element) { + return InternalResult.flatMap( + element.findChildren("w:comment"), + this::readCommentElement + ); + } + + private InternalResult 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 body = list(element("w:p")); + CommentXmlReader reader = new CommentXmlReader(make(a(bodyReader))); + InternalResult> 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))))) + )) + ); + } +} -- cgit v1.2.3