diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-02 16:04:33 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-02 16:04:33 +0100 |
| commit | b367d011903e5c249c6bbf614cdc429ca6dd8604 (patch) | |
| tree | e2654f763fd343ed726eb543472e76aca4fd54d7 /src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java | |
| parent | 19ac187ad24015aede1ac1af35bdf31cdc04bb6d (diff) | |
Split out path relative file reader
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java | 45 |
1 files changed, 45 insertions, 0 deletions
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> path; + + public PathRelativeFileReader(Optional<Path> path) { + this.path = path; + } + + @Override + public InputStream getInputStream(String uri) throws IOException { + try { + Optional<URI> 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<URI> asAbsoluteUri(String uriString) { + try { + URI uri = new URI(uriString); + return uri.isAbsolute() ? Optional.of(uri) : Optional.empty(); + } catch (URISyntaxException exception) { + return Optional.empty(); + } + } +} |
