ImageResolver.java

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
Location : resolve
Killed by : pro.verron.officestamper.test.ImageDeduplicationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ImageDeduplicationTest]/[method:testImageDeduplicationDisabled()]
replaced return value with null for pro/verron/officestamper/preset/resolvers/image/ImageResolver::resolve → KILLED

2.2
Location : resolve
Killed by : pro.verron.officestamper.test.ImageDeduplicationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ImageDeduplicationTest]/[method:testImageDeduplicationDisabled()]
negated conditional → KILLED

40

1.1
Location : canResolve
Killed by : pro.verron.officestamper.test.DefaultTests.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.DefaultTests]/[test-template:features(pro.verron.officestamper.api.OfficeStamperConfiguration, java.lang.Object, org.docx4j.openpackaging.packages.WordprocessingMLPackage, java.lang.String)]/[test-template-invocation:#5]
replaced boolean return with true for pro/verron/officestamper/preset/resolvers/image/ImageResolver::canResolve → KILLED

2.2
Location : canResolve
Killed by : pro.verron.officestamper.test.ImageDeduplicationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ImageDeduplicationTest]/[method:testImageDeduplicationDisabled()]
replaced boolean return with false for pro/verron/officestamper/preset/resolvers/image/ImageResolver::canResolve → KILLED

60

1.1
Location : resolve
Killed by : pro.verron.officestamper.test.ImageDeduplicationTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.ImageDeduplicationTest]/[method:testImageDeduplicationDisabled()]
replaced return value with null for pro/verron/officestamper/preset/resolvers/image/ImageResolver::resolve → KILLED

Active mutators

Tests examined


Report generated by PIT 1.25.5 support