From 2b5635c1425f7a4e31d2d0aedb892f2d8d033f92 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 3 Aug 2025 09:36:04 +0100 Subject: Remove type argument from HasChildren --- .../internal/conversion/DocumentToHtml.java | 35 +++++++++++----------- .../mammoth/internal/conversion/RawText.java | 6 ++-- .../mammoth/internal/documents/Document.java | 9 ++++-- .../internal/documents/DocumentElementVisitor.java | 2 ++ .../mammoth/internal/documents/HasChildren.java | 5 ++-- .../mammoth/internal/documents/HasGetChildren.java | 7 ----- .../mammoth/internal/documents/Hyperlink.java | 4 +-- .../mammoth/internal/documents/Paragraph.java | 4 +-- .../zwobble/mammoth/internal/documents/Run.java | 4 +-- .../zwobble/mammoth/internal/documents/Table.java | 4 +-- .../mammoth/internal/documents/TableCell.java | 4 +-- .../mammoth/internal/documents/TableRow.java | 4 +-- .../internal/docx/StatefulBodyXmlReader.java | 8 ++--- 13 files changed, 49 insertions(+), 47 deletions(-) delete mode 100644 src/main/java/org/zwobble/mammoth/internal/documents/HasGetChildren.java diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java index 6186cdb..dbbe3c3 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/DocumentToHtml.java @@ -81,22 +81,6 @@ public class DocumentToHtml { this.comments = Maps.toMapWithKey(comments, Comment::getCommentId); } - private List convertToHtml(Document document, Context context) { - List mainBody = convertChildrenToHtml(document, context); - // TODO: can you have note references inside a note? - List notes = findNotes(document, noteReferences); - - List noteNodes = notes.isEmpty() - ? list() - : list(Html.element("ol", eagerMap(notes, note -> convertToHtml(note, context)))); - - List commentNodes = referencedComments.isEmpty() - ? list() - : list(Html.element("dl", eagerFlatMap(referencedComments, comment -> convertToHtml(comment, context)))); - - return eagerConcat(mainBody, noteNodes, commentNodes); - } - private HtmlNode convertToHtml(Note note, Context context) { String id = generateNoteHtmlId(note.getNoteType(), note.getId()); String referenceId = generateNoteRefHtmlId(note.getNoteType(), note.getId()); @@ -135,11 +119,28 @@ public class DocumentToHtml { ); } - private List convertChildrenToHtml(HasChildren element, Context context) { + private List convertChildrenToHtml(HasChildren element, Context context) { return convertToHtml(element.getChildren(), context); } private class ElementConverterVisitor implements DocumentElementVisitor, Context> { + @Override + public List visit(Document document, Context context) { + List mainBody = convertChildrenToHtml(document, context); + // TODO: can you have note references inside a note? + List notes = findNotes(document, noteReferences); + + List noteNodes = notes.isEmpty() + ? list() + : list(Html.element("ol", eagerMap(notes, note -> convertToHtml(note, context)))); + + List commentNodes = referencedComments.isEmpty() + ? list() + : list(Html.element("dl", eagerFlatMap(referencedComments, comment -> convertToHtml(comment, context)))); + + return eagerConcat(mainBody, noteNodes, commentNodes); + } + @Override public List visit(Paragraph paragraph, Context context) { Supplier> children = () -> { diff --git a/src/main/java/org/zwobble/mammoth/internal/conversion/RawText.java b/src/main/java/org/zwobble/mammoth/internal/conversion/RawText.java index e784840..5bfeb83 100644 --- a/src/main/java/org/zwobble/mammoth/internal/conversion/RawText.java +++ b/src/main/java/org/zwobble/mammoth/internal/conversion/RawText.java @@ -13,7 +13,7 @@ public class RawText { return extractRawTextOfChildren(document); } - private static String extractRawTextOfChildren(HasChildren parent) { + private static String extractRawTextOfChildren(HasChildren parent) { return extractRawText(parent.getChildren()); } @@ -27,8 +27,8 @@ public class RawText { } else if (node instanceof Tab) { return "\t"; } else { - List children = tryCast(HasGetChildren.class, node) - .map(HasGetChildren::getChildren) + List children = tryCast(HasChildren.class, node) + .map(HasChildren::getChildren) .orElse(list()); String suffix = tryCast(Paragraph.class, node).map(paragraph -> "\n\n").orElse(""); return extractRawText(children) + suffix; diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Document.java b/src/main/java/org/zwobble/mammoth/internal/documents/Document.java index b1807d5..44d4db0 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Document.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Document.java @@ -2,7 +2,7 @@ package org.zwobble.mammoth.internal.documents; import java.util.List; -public class Document implements HasChildren { +public class Document implements DocumentElement, HasChildren { private final List children; private final Notes notes; private final List comments; @@ -19,10 +19,15 @@ public class Document implements HasChildren { } @Override - public Document replaceChildren(List newChildren) { + public DocumentElement replaceChildren(List newChildren) { return new Document(newChildren, this.notes, this.comments); } + @Override + public T accept(DocumentElementVisitor visitor, U context) { + return visitor.visit(this, context); + } + public Notes getNotes() { return notes; } diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java index ea67113..de288b9 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java @@ -1,6 +1,8 @@ package org.zwobble.mammoth.internal.documents; public interface DocumentElementVisitor { + T visit(Document document, U context); + T visit(Paragraph paragraph, U context); T visit(Run run, U context); T visit(Text text, U context); diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java b/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java index 3b5ad4b..1d01141 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java @@ -2,6 +2,7 @@ package org.zwobble.mammoth.internal.documents; import java.util.List; -public interface HasChildren extends HasGetChildren { - T replaceChildren(List newChildren); +public interface HasChildren { + List getChildren(); + DocumentElement replaceChildren(List newChildren); } diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/HasGetChildren.java b/src/main/java/org/zwobble/mammoth/internal/documents/HasGetChildren.java deleted file mode 100644 index 18d39fc..0000000 --- a/src/main/java/org/zwobble/mammoth/internal/documents/HasGetChildren.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.zwobble.mammoth.internal.documents; - -import java.util.List; - -public interface HasGetChildren { - List getChildren(); -} diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java index bf86ffe..6191986 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java @@ -3,7 +3,7 @@ package org.zwobble.mammoth.internal.documents; import java.util.List; import java.util.Optional; -public class Hyperlink implements DocumentElement, HasChildren { +public class Hyperlink implements DocumentElement, HasChildren { public static Hyperlink href(String href, Optional targetFrame, List children) { return new Hyperlink(Optional.of(href), Optional.empty(), targetFrame, children); } @@ -42,7 +42,7 @@ public class Hyperlink implements DocumentElement, HasChildren { } @Override - public Hyperlink replaceChildren(List newChildren) { + public DocumentElement replaceChildren(List newChildren) { return new Hyperlink(this.href, this.anchor, this.targetFrame, newChildren); } diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java index c9859b6..d3967c9 100644 --- a/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java +++ b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java @@ -3,7 +3,7 @@ package org.zwobble.mammoth.internal.documents; import java.util.List; import java.util.Optional; -public class Paragraph implements DocumentElement, HasChildren { +public class Paragraph implements DocumentElement, HasChildren { private final Optional