PowerpointVisitor.java

1
package pro.verron.officestamper.experimental;
2
3
import org.docx4j.dml.CTRegularTextRun;
4
import org.docx4j.dml.CTTextBody;
5
import org.docx4j.dml.CTTextParagraph;
6
import org.docx4j.openpackaging.exceptions.Docx4JException;
7
import org.docx4j.openpackaging.packages.PresentationMLPackage;
8
import org.docx4j.openpackaging.parts.*;
9
import org.docx4j.openpackaging.parts.PresentationML.*;
10
import org.docx4j.openpackaging.parts.WordprocessingML.ImageJpegPart;
11
import org.pptx4j.pml.*;
12
import org.slf4j.Logger;
13
import org.slf4j.LoggerFactory;
14
import org.springframework.lang.Nullable;
15
import pro.verron.officestamper.api.OfficeStamperException;
16
17
import java.util.List;
18
import java.util.Map;
19
import java.util.Set;
20
21
import static java.util.Arrays.stream;
22
23
abstract class PowerpointVisitor {
24
25
    private static final Logger logger = LoggerFactory.getLogger(PowerpointVisitor.class);
26
27
    private static void unexpectedVisit(Object object) {
28
        var env = System.getenv();
29
        var throwOnUnexpectedVisit = Boolean.parseBoolean(env.getOrDefault("throw-on-unexpected-visit", "false"));
30
        var message = "Unknown case : %s %s".formatted(object, object.getClass());
31 1 1. unexpectedVisit : negated conditional → NO_COVERAGE
        if (throwOnUnexpectedVisit)
32
            throw new OfficeStamperException(message);
33
        else
34
            logger.debug(message);
35
    }
36
37
    private static void ignore(@Nullable Object ignored) {
38
        logger.trace("ignored visit of '{}' object", ignored);
39
    }
40
41
    /**
42
     * Signal the visited object through the before method,
43
     * then apply logic to know the visit next elements or ignore deeper nesting
44
     * based on the object type.
45
     *
46
     * @param object the object to visit
47
     */
48
    public final void visit(@Nullable Object object) {
49 1 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::before → KILLED
        before(object);
50
        try {
51 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
2. visit : negated conditional → KILLED
            if (object instanceof PresentationMLPackage element) visit(element.getParts());
52 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof PartName ignored) ignore(ignored);
53 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
2. visit : negated conditional → KILLED
            else if (object instanceof Parts element) visit(element.getParts());
54 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof SlideLayoutPart ignored) ignore(ignored);
55 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof ImageJpegPart ignored) ignore(ignored);
56 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof ThemePart ignored) ignore(ignored);
57 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof DocPropsCorePart ignored) ignore(ignored);
58 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof DocPropsExtendedPart ignored) ignore(ignored);
59 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof SlideMasterPart ignored) ignore(ignored);
60 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof ViewPropertiesPart ignored) ignore(ignored);
61 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof PresentationPropertiesPart ignored) ignore(ignored);
62 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof TableStylesPart ignored) ignore(ignored);
63 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof MainPresentationPart element) visit(element.getContents());
64
65 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof SlidePart element) visit(element.getContents());
66 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
2. visit : negated conditional → KILLED
            else if (object instanceof Sld element) visit(element.getCSld());
67 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof CommonSlideData element) visit(element.getSpTree());
68 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof GroupShape element) visit(element.getSpOrGrpSpOrGraphicFrame());
69 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
2. visit : negated conditional → KILLED
            else if (object instanceof Shape element) visit(element.getTxBody());
70 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof CTTextBody element) visit(element.getP());
71 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof CTTextParagraph element) visit(element.getEGTextRun());
72 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof CTRegularTextRun ignored) ignore(ignored);
73 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → NO_COVERAGE
2. visit : negated conditional → KILLED
            else if (object instanceof Presentation.SldSz ignored) ignore(ignored);
74 2 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
2. visit : negated conditional → KILLED
            else if (object instanceof Presentation ignored) ignore(ignored);
75
76 2 1. visit : negated conditional → KILLED
2. visit : removed call to java/util/List::forEach → KILLED
            else if (object instanceof List<?> element) element.forEach(this::visit);
77 2 1. visit : removed call to java/util/Set::forEach → KILLED
2. visit : negated conditional → KILLED
            else if (object instanceof Set<?> element) element.forEach(this::visit);
78 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof Map<?, ?> element) visit(element.entrySet());
79 2 1. visit : negated conditional → KILLED
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED
            else if (object instanceof Map.Entry<?, ?> element) visit(element.getKey(), element.getValue());
80
81 2 1. visit : negated conditional → NO_COVERAGE
2. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → NO_COVERAGE
            else if (object == null) ignore(null);
82 1 1. visit : removed call to pro/verron/officestamper/experimental/PowerpointVisitor::unexpectedVisit → NO_COVERAGE
            else unexpectedVisit(object);
83
        } catch (Docx4JException e) {
84
            throw new OfficeStamperException(e);
85
        }
86
    }
87
88
    private void visit(Object... objs) {
89 1 1. visit : removed call to java/util/stream/Stream::forEach → KILLED
        stream(objs).forEach(this::visit);
90
    }
91
92
    /**
93
     * This abstract method is responsible for executing some tasks before a specific operation.
94
     * It is intended to be implemented by subclasses.
95
     *
96
     * @param object The optional object that can be used as a parameter for the pre-operation tasks.
97
     */
98
    protected abstract void before(@Nullable Object object);
99
100
}

Mutations

31

1.1
Location : unexpectedVisit
Killed by : none
negated conditional → NO_COVERAGE

49

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::before → KILLED

51

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

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

52

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

53

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

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

54

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

55

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

56

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

57

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

58

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

59

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

60

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

61

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

62

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

63

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → SURVIVED
Covering tests

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

65

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

66

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

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

67

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

68

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

69

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

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

70

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

71

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → SURVIVED
Covering tests

72

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

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

73

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → NO_COVERAGE

74

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → SURVIVED
Covering tests

76

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to java/util/List::forEach → KILLED

77

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to java/util/Set::forEach → KILLED

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

78

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

79

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
negated conditional → KILLED

2.2
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::visit → KILLED

81

1.1
Location : visit
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::ignore → NO_COVERAGE

82

1.1
Location : visit
Killed by : none
removed call to pro/verron/officestamper/experimental/PowerpointVisitor::unexpectedVisit → NO_COVERAGE

89

1.1
Location : visit
Killed by : pro.verron.officestamper.test.BasicPowerpointTest.[engine:junit-jupiter]/[class:pro.verron.officestamper.test.BasicPowerpointTest]/[method:testStamper()]
removed call to java/util/stream/Stream::forEach → KILLED

Active mutators

Tests examined


Report generated by PIT 1.17.0