diff options
| author | Michael Williamson <mike@zwobble.org> | 2018-01-27 18:03:31 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2018-01-27 18:03:31 +0000 |
| commit | 55cb0a60880baf74636f563ee66695a5466a10f9 (patch) | |
| tree | e220a09332130d1e48ceeaf34af175a12c93eda0 /src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java | |
| parent | f7759a47067afc709383b42043c57f70744f2029 (diff) | |
Extract code for finding part paths
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java | 69 |
1 files changed, 53 insertions, 16 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java index b506d99..44f28fa 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java @@ -26,11 +26,10 @@ public class DocumentReader { } public static InternalResult<Document> readDocument(Optional<Path> path, Archive zipFile) { - Relationships packageRelationships = readPackageRelationships(zipFile); - String documentFilename = findDocumentFilename(zipFile, packageRelationships); + PartPaths partPaths = findPartPaths(zipFile); - Styles styles = readStyles(zipFile); - Numbering numbering = readNumbering(zipFile); + Styles styles = readStyles(zipFile, partPaths); + Numbering numbering = readNumbering(zipFile, partPaths); ContentTypes contentTypes = readContentTypes(zipFile); FileReader fileReader = new PathRelativeFileReader(path); PartWithBodyReader partReader = new PartWithBodyReader() { @@ -48,16 +47,54 @@ public class DocumentReader { } }; return InternalResult.flatMap( - readNotes(partReader), - readComments(partReader), + readNotes(partReader, partPaths), + readComments(partReader, partPaths), (notes, comments) -> partReader.readPart( - documentFilename, + partPaths.getMainDocument(), (element, bodyReader) -> new DocumentXmlReader(bodyReader, notes, comments).readElement(element), Optional.empty() ) ); } + public static class PartPaths { + private final String mainDocument; + + public PartPaths(String mainDocument) { + this.mainDocument = mainDocument; + } + + public String getMainDocument() { + return mainDocument; + } + + public String getComments() { + return "word/comments.xml"; + } + + public String getEndnotes() { + return "word/endnotes.xml"; + } + + public String getFootnotes() { + return "word/footnotes.xml"; + } + + public String getNumbering() { + return "word/numbering.xml"; + } + + public String getStyles() { + return "word/styles.xml"; + } + } + + private static PartPaths findPartPaths(Archive archive) { + Relationships packageRelationships = readPackageRelationships(archive); + String documentFilename = findDocumentFilename(archive, packageRelationships); + return new PartPaths(documentFilename); + } + private static Relationships readPackageRelationships(Archive archive) { return readRelationships(archive, "_rels/.rels"); } @@ -78,37 +115,37 @@ public class DocumentReader { )); } - private static InternalResult<List<Comment>> readComments(PartWithBodyReader partReader) { + private static InternalResult<List<Comment>> readComments(PartWithBodyReader partReader, PartPaths partPaths) { return partReader.readPart( - "word/comments.xml", + partPaths.getComments(), (root, bodyReader) -> new CommentXmlReader(bodyReader).readElement(root), Optional.of(InternalResult.success(list())) ); } - private static InternalResult<Notes> readNotes(PartWithBodyReader partReader) { + private static InternalResult<Notes> readNotes(PartWithBodyReader partReader, PartPaths partPaths) { return InternalResult.map( partReader.readPart( - "word/footnotes.xml", + partPaths.getFootnotes(), (root, bodyReader) -> NotesXmlReader.footnote(bodyReader).readElement(root), Optional.of(InternalResult.success(list())) ), partReader.readPart( - "word/endnotes.xml", + partPaths.getEndnotes(), (root, bodyReader) -> NotesXmlReader.endnote(bodyReader).readElement(root), Optional.of(InternalResult.success(list())) ), Lists::eagerConcat).map(Notes::new); } - private static Styles readStyles(Archive file) { - return tryParseOfficeXml(file, "word/styles.xml") + private static Styles readStyles(Archive file, PartPaths partPaths) { + return tryParseOfficeXml(file, partPaths.getStyles()) .map(StylesXml::readStylesXmlElement) .orElse(Styles.EMPTY); } - private static Numbering readNumbering(Archive file) { - return tryParseOfficeXml(file, "word/numbering.xml") + private static Numbering readNumbering(Archive file, PartPaths partPaths) { + return tryParseOfficeXml(file, partPaths.getNumbering()) .map(NumberingXml::readNumberingXmlElement) .orElse(Numbering.EMPTY); } |
