From b28d0c121cf4d2751610522d5d0b106b4fba911f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 31 Aug 2022 21:46:07 +0100 Subject: Extract notion of InternalImageConverter --- .../mammoth/internal/InternalImageConverter.java | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java (limited to 'src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java') diff --git a/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java b/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java new file mode 100644 index 0000000..dee5b9d --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/InternalImageConverter.java @@ -0,0 +1,58 @@ +package org.zwobble.mammoth.internal; + +import org.zwobble.mammoth.images.ImageConverter; +import org.zwobble.mammoth.internal.documents.Image; +import org.zwobble.mammoth.internal.html.Html; +import org.zwobble.mammoth.internal.html.HtmlNode; +import org.zwobble.mammoth.internal.util.PassThroughException; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.zwobble.mammoth.internal.util.Lists.list; + +public class InternalImageConverter { + private final ImageConverter.ImgElement imgElement; + + public static InternalImageConverter imgElement(ImageConverter.ImgElement imgElement) { + return new InternalImageConverter(imgElement); + } + + private InternalImageConverter(ImageConverter.ImgElement imgElement) { + this.imgElement = imgElement; + } + + public List convert(Image internalImage) throws IOException { + // TODO: handle empty content type + return PassThroughException.unwrap(() -> { + return internalImage.getContentType() + .map(contentType -> { + org.zwobble.mammoth.images.Image image = new org.zwobble.mammoth.images.Image() { + @Override + public Optional getAltText() { + return internalImage.getAltText(); + } + + @Override + public String getContentType() { + return contentType; + } + + @Override + public InputStream getInputStream() throws IOException { + return internalImage.open(); + } + }; + + Map attributes = new HashMap<>(PassThroughException.wrap(() -> imgElement.convert(image))); + internalImage.getAltText().ifPresent(altText -> attributes.put("alt", altText)); + return list(Html.element("img", attributes)); + }) + .orElse(list()); + }); + } +} -- cgit v1.2.3