summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/docx/CommentXmlReader.java
blob: 1b6a171d2abc5dadb5f4bd3ac3ee98b01950ad36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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;
import java.util.Optional;

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,
                readOptionalAttribute(element, "w:author"),
                readOptionalAttribute(element, "w:initials")
            ));
    }

    private Optional<String> readOptionalAttribute(XmlElement element, String name) {
        String value = element.getAttributeOrNone(name).orElse("").trim();
        if (value.isEmpty()) {
            return Optional.empty();
        } else {
            return Optional.of(value);
        }
    }
}