From b367d011903e5c249c6bbf614cdc429ca6dd8604 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Apr 2016 16:04:33 +0100 Subject: Split out path relative file reader --- couscous.json | 3 +- .../mammoth/internal/docx/DocumentReader.java | 31 +-------------- .../internal/docx/PathRelativeFileReader.java | 45 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 31 deletions(-) create mode 100644 src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java diff --git a/couscous.json b/couscous.json index 811c9a7..81d2895 100644 --- a/couscous.json +++ b/couscous.json @@ -7,7 +7,8 @@ "src/main/java/org/zwobble/mammoth/internal/docx", "!src/main/java/org/zwobble/mammoth/internal/docx/ZippedDocxFile.java", "!src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java", - "!src/main/java/org/zwobble/mammoth/internal/docx/InMemoryDocxFile.java" + "!src/main/java/org/zwobble/mammoth/internal/docx/InMemoryDocxFile.java", + "!src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java" ], "output": "_dotnet" } 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 f302c6d..4a0bb7d 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java @@ -7,9 +7,6 @@ import org.zwobble.mammoth.internal.util.Lists; import org.zwobble.mammoth.internal.xml.XmlElement; import java.io.IOException; -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; import java.nio.file.Path; import java.util.Optional; @@ -25,20 +22,7 @@ public class DocumentReader { Styles styles = readStyles(zipFile); Numbering numbering = readNumbering(zipFile); ContentTypes contentTypes = readContentTypes(zipFile); - FileReader fileReader = uri -> { - try { - Optional absoluteUri = asAbsoluteUri(uri); - if (absoluteUri.isPresent()) { - return open(absoluteUri.get()); - } else if (path.isPresent()) { - return open(path.get().toUri().resolve(uri)); - } else { - throw new IOException("path of document is unknown, but is required for relative URI"); - } - } catch (IOException exception) { - throw new IOException("could not open external image '" + uri + "': " + exception.getMessage()); - } - }; + FileReader fileReader = new PathRelativeFileReader(path); BodyReaders bodyReaders = name -> { Relationships relationships = readRelationships(zipFile, name); return new BodyXmlReader(styles, numbering, relationships, contentTypes, zipFile, fileReader); @@ -50,19 +34,6 @@ public class DocumentReader { }); } - private static InputStream open(URI uri) throws IOException { - return uri.toURL().openStream(); - } - - private static Optional asAbsoluteUri(String uriString) { - try { - URI uri = new URI(uriString); - return uri.isAbsolute() ? Optional.of(uri) : Optional.empty(); - } catch (URISyntaxException exception) { - return Optional.empty(); - } - } - private static InternalResult readNotes(DocxFile file, BodyReaders bodyReaders) { return InternalResult.map( tryParseOfficeXml(file, "word/footnotes.xml") diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java new file mode 100644 index 0000000..ebee416 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java @@ -0,0 +1,45 @@ +package org.zwobble.mammoth.internal.docx; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.util.Optional; + +public class PathRelativeFileReader implements FileReader { + private final Optional path; + + public PathRelativeFileReader(Optional path) { + this.path = path; + } + + @Override + public InputStream getInputStream(String uri) throws IOException { + try { + Optional absoluteUri = asAbsoluteUri(uri); + if (absoluteUri.isPresent()) { + return open(absoluteUri.get()); + } else if (path.isPresent()) { + return open(path.get().toUri().resolve(uri)); + } else { + throw new IOException("path of document is unknown, but is required for relative URI"); + } + } catch (IOException exception) { + throw new IOException("could not open external image '" + uri + "': " + exception.getMessage()); + } + } + + private static InputStream open(URI uri) throws IOException { + return uri.toURL().openStream(); + } + + private static Optional asAbsoluteUri(String uriString) { + try { + URI uri = new URI(uriString); + return uri.isAbsolute() ? Optional.of(uri) : Optional.empty(); + } catch (URISyntaxException exception) { + return Optional.empty(); + } + } +} -- cgit v1.2.3