aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java31
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/PathRelativeFileReader.java45
2 files changed, 46 insertions, 30 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 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<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());
- }
- };
+ 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<URI> 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<Notes> 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> 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();
+ }
+ }
+}