| 1 | package pro.verron.officestamper.preset.resolvers.image; | |
| 2 | ||
| 3 | import org.docx4j.openpackaging.packages.WordprocessingMLPackage; | |
| 4 | import org.jspecify.annotations.Nullable; | |
| 5 | import pro.verron.officestamper.api.DocxPart; | |
| 6 | import pro.verron.officestamper.api.Insert; | |
| 7 | import pro.verron.officestamper.api.ObjectResolver; | |
| 8 | import pro.verron.officestamper.api.OfficeStamperException; | |
| 9 | import pro.verron.officestamper.preset.Image; | |
| 10 | import pro.verron.officestamper.utils.image.ImageRunOptions; | |
| 11 | import pro.verron.officestamper.utils.openpackaging.OpenPackage; | |
| 12 | import pro.verron.officestamper.utils.openpackaging.OpenpackagingUtils; | |
| 13 | ||
| 14 | import java.util.function.Supplier; | |
| 15 | ||
| 16 | /// This [ObjectResolver] allows context objects to return objects of type [Image]. An expression that resolves to an | |
| 17 | /// [Image] object will be replaced by an actual image in the resulting .docx document. The image will be put as an | |
| 18 | /// inline into the surrounding paragraph of text. | |
| 19 | /// | |
| 20 | /// @author Joseph Verron | |
| 21 | /// @since 1.6.7 | |
| 22 | public class ImageResolver | |
| 23 | implements ObjectResolver { | |
| 24 | ||
| 25 | private final boolean deduplicate; | |
| 26 | ||
| 27 | public ImageResolver(boolean deduplicate) { | |
| 28 | this.deduplicate = deduplicate; | |
| 29 | } | |
| 30 | ||
| 31 | @Override | |
| 32 | public Insert resolve(DocxPart part, String expression, @Nullable Object object) { | |
| 33 |
2
1. resolve : replaced return value with null for pro/verron/officestamper/preset/resolvers/image/ImageResolver::resolve → KILLED 2. resolve : negated conditional → KILLED |
if (object instanceof Image image) return resolve(part, image); |
| 34 | String message = "Expected %s to be an Image".formatted(object); | |
| 35 | throw new OfficeStamperException(message); | |
| 36 | } | |
| 37 | ||
| 38 | @Override | |
| 39 | public boolean canResolve(@Nullable Object object) { | |
| 40 |
2
1. canResolve : replaced boolean return with true for pro/verron/officestamper/preset/resolvers/image/ImageResolver::canResolve → KILLED 2. canResolve : replaced boolean return with false for pro/verron/officestamper/preset/resolvers/image/ImageResolver::canResolve → KILLED |
return object instanceof Image; |
| 41 | } | |
| 42 | ||
| 43 | /// Resolves an image and adds it to a [WordprocessingMLPackage] document. | |
| 44 | /// | |
| 45 | /// @param image The image to be resolved and added | |
| 46 | /// @return The run containing the added image | |
| 47 | /// @throws OfficeStamperException If an error occurs while adding the image to the document | |
| 48 | private Insert resolve(DocxPart part, Image image) { | |
| 49 | try { | |
| 50 | var document = part.document(); | |
| 51 | var imagePart = part.part(); | |
| 52 | var openPackage = OpenPackage.getOrCreate(document, imagePart); | |
| 53 | var supplier = (Supplier<byte[]>) image::getBytes; | |
| 54 | var altText = image.getAltText(); | |
| 55 | var filenameHint = image.getFilenameHint(); | |
| 56 | var maxWidth = image.getMaxWidth() | |
| 57 | .orElse(null); | |
| 58 | var imageOptions = new ImageRunOptions(altText, filenameHint, maxWidth, deduplicate); | |
| 59 | var imageRun = OpenpackagingUtils.newImageRun(openPackage, supplier, imageOptions); | |
| 60 |
1
1. resolve : replaced return value with null for pro/verron/officestamper/preset/resolvers/image/ImageResolver::resolve → KILLED |
return new Insert(imageRun); |
| 61 | } catch (Exception e) { | |
| 62 | throw new OfficeStamperException("Error while adding image to document!", e); | |
| 63 | } | |
| 64 | } | |
| 65 | ||
| 66 | } | |
Mutations | ||
| 33 |
1.1 2.2 |
|
| 40 |
1.1 2.2 |
|
| 60 |
1.1 |