AbstractDefaultThymeleafEmailConfigurer.java

1
package fr.sii.ogham.template.thymeleaf.common.configure;
2
3
import org.slf4j.Logger;
4
5
import fr.sii.ogham.core.builder.MessagingBuilder;
6
import fr.sii.ogham.core.builder.configurer.DefaultMessagingConfigurer;
7
import fr.sii.ogham.core.builder.configurer.MessagingConfigurer;
8
import fr.sii.ogham.core.builder.configurer.MessagingConfigurerAdapter;
9
import fr.sii.ogham.core.builder.env.EnvironmentBuilder;
10
import fr.sii.ogham.core.builder.resolution.ResourceResolutionBuilder;
11
import fr.sii.ogham.core.message.content.EmailVariant;
12
import fr.sii.ogham.template.thymeleaf.common.buider.AbstractThymeleafMultiContentBuilder;
13
14
/**
15
 * Default configurer for Thymeleaf template engine that is automatically
16
 * applied every time a {@link MessagingBuilder} instance is created through
17
 * {@link MessagingBuilder#standard()} or {@link MessagingBuilder#minimal()}.
18
 * 
19
 * <p>
20
 * The configurer has a priority of 90000 in order to be applied after global
21
 * configurer but before any sender implementation.
22
 * </p>
23
 * 
24
 * This configurer is applied only if {@code org.thymeleaf.TemplateEngine} is
25
 * present in the classpath. If not present, template engine is not registered
26
 * at all.
27
 * 
28
 * <p>
29
 * This configurer inherits environment configuration (see
30
 * {@link EnvironmentBuilder})
31
 * </p>
32
 * <p>
33
 * It also copies resource resolution configuration of
34
 * {@link DefaultMessagingConfigurer} to inherit resource resolution lookups
35
 * (see {@link ResourceResolutionBuilder}).
36
 * </p>
37
 * 
38
 * <p>
39
 * This configurer applies the following configuration:
40
 * <ul>
41
 * <li>Configures template prefix/suffix paths:
42
 * <ul>
43
 * <li>Uses the first property that has a value for classpath resolution prefix:
44
 * <ol>
45
 * <li>"ogham.email.thymeleaf.classpath.path-prefix"</li>
46
 * <li>"ogham.email.template.classpath.path-prefix"</li>
47
 * <li>"ogham.email.thymeleaf.path-prefix"</li>
48
 * <li>"ogham.email.template.path-prefix"</li>
49
 * <li>"ogham.template.path-prefix"</li>
50
 * </ol>
51
 * </li>
52
 * <li>Uses the first property that has a value for classpath resolution suffix:
53
 * <ol>
54
 * <li>"ogham.email.thymeleaf.classpath.path-suffix"</li>
55
 * <li>"ogham.email.template.classpath.path-suffix"</li>
56
 * <li>"ogham.email.thymeleaf.path-suffix"</li>
57
 * <li>"ogham.email.template.path-suffix"</li>
58
 * <li>"ogham.template.path-suffix"</li>
59
 * </ol>
60
 * </li>
61
 * <li>Uses the first property that has a value for file resolution prefix:
62
 * <ol>
63
 * <li>"ogham.email.thymeleaf.file.path-prefix"</li>
64
 * <li>"ogham.email.template.file.path-prefix"</li>
65
 * <li>"ogham.email.thymeleaf.path-prefix"</li>
66
 * <li>"ogham.email.template.path-prefix"</li>
67
 * <li>"ogham.template.path-prefix"</li>
68
 * </ol>
69
 * </li>
70
 * <li>Uses the first property that has a value for file resolution suffix:
71
 * <ol>
72
 * <li>"ogham.email.thymeleaf.file.path-suffix"</li>
73
 * <li>"ogham.email.template.file.path-suffix"</li>
74
 * <li>"ogham.email.thymeleaf.path-suffix"</li>
75
 * <li>"ogham.email.template.path-suffix"</li>
76
 * <li>"ogham.template.path-suffix"</li>
77
 * </ol>
78
 * </li>
79
 * </ul>
80
 * </li>
81
 * <li>Configures email alternative content:
82
 * <ul>
83
 * <li>Automatically loads HTML template if extension is .html</li>
84
 * <li>Automatically loads text template if extension is .txt</li>
85
 * </ul>
86
 * </li>
87
 * <li>Configures template detection:
88
 * <ul>
89
 * <li>Uses ThymeleafTemplateDetector to detect if templates are
90
 * parseable by Thymeleaf</li>
91
 * </ul>
92
 * </li>
93
 * </ul>
94
 * 
95
 * @author Aurélien Baudet
96
 *
97
 */
98
public abstract class AbstractDefaultThymeleafEmailConfigurer implements MessagingConfigurer {
99
	private final Logger log;
100
	private final MessagingConfigurerAdapter delegate;
101
102
	public AbstractDefaultThymeleafEmailConfigurer(Logger log) {
103
		this(log, new DefaultMessagingConfigurer());
104
	}
105
106
	public AbstractDefaultThymeleafEmailConfigurer(Logger log, MessagingConfigurerAdapter delegate) {
107
		super();
108
		this.log = log;
109
		this.delegate = delegate;
110
	}
111
112
	@Override
113
	public void configure(MessagingBuilder msgBuilder) {
114 4 1. configure : negated conditional → NO_COVERAGE
2. configure : negated conditional → TIMED_OUT
3. configure : negated conditional → KILLED
4. configure : negated conditional → KILLED
		if (!canUseThymeleaf()) {
115
			log.debug("[{}] skip configuration", this);
116
			return;
117
		}
118
		log.debug("[{}] apply configuration", this);
119
		AbstractThymeleafMultiContentBuilder<?, ?, ?> builder = msgBuilder.email().template(getBuilderClass());
120
		// apply default resource resolution configuration
121 4 1. configure : negated conditional → NO_COVERAGE
2. configure : negated conditional → KILLED
3. configure : negated conditional → KILLED
4. configure : negated conditional → KILLED
		if (delegate != null) {
122 4 1. configure : removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → NO_COVERAGE
2. configure : removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED
3. configure : removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED
4. configure : removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED
			delegate.configure(builder);
123
		}
124
		// @formatter:off
125
		builder
126
			.classpath()
127
				.pathPrefix()
128
					.properties("${ogham.email.thymeleaf.classpath.path-prefix}", 
129
								"${ogham.email.template.classpath.path-prefix}", 
130
								"${ogham.email.thymeleaf.path-prefix}", 
131
								"${ogham.email.template.path-prefix}", 
132
								"${ogham.template.path-prefix}")
133
					.and()
134
				.pathSuffix()
135
					.properties("${ogham.email.thymeleaf.classpath.path-suffix}", 
136
								"${ogham.email.template.classpath.path-suffix}", 
137
								"${ogham.email.thymeleaf.path-suffix}", 
138
								"${ogham.email.template.path-suffix}", 
139
								"${ogham.template.path-suffix}")
140
					.and()
141
				.and()
142
			.file()
143
				.pathPrefix()
144
					.properties("${ogham.email.thymeleaf.file.path-prefix}", 
145
								"${ogham.email.template.file.path-prefix}", 
146
								"${ogham.email.thymeleaf.path-prefix}", 
147
								"${ogham.email.template.path-prefix}", 
148
								"${ogham.template.path-prefix}")
149
					.and()
150
				.pathSuffix()
151
					.properties("${ogham.email.thymeleaf.file.path-suffix}", 
152
								"${ogham.email.template.file.path-suffix}", 
153
								"${ogham.email.thymeleaf.path-suffix}", 
154
								"${ogham.email.template.path-suffix}", 
155
								"${ogham.template.path-suffix}")
156
					.and()
157
				.and()
158
			.string()
159
				.and()
160
			.variant(EmailVariant.HTML, "html")
161
			.variant(EmailVariant.HTML, "xhtml")
162
			.variant(EmailVariant.TEXT, "txt")
163
			.cache()
164
				.properties("${ogham.email.thymeleaf.cache}",
165
							"${ogham.email.template.cache}",
166
							"${ogham.template.cache}");
167
		// @formatter:on
168
	}
169
170
	protected abstract Class<? extends AbstractThymeleafMultiContentBuilder<?, ?, ?>> getBuilderClass();
171
172
	protected abstract boolean canUseThymeleaf();
173
174
}

Mutations

114

1.1
Location : configure
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

2.2
Location : configure
Killed by : none
negated conditional → TIMED_OUT

3.3
Location : configure
Killed by : none
negated conditional → NO_COVERAGE

4.4
Location : configure
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.missingBeanErrorUsingThymeleaf(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
negated conditional → KILLED

121

1.1
Location : configure
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
negated conditional → KILLED

2.2
Location : configure
Killed by : none
negated conditional → NO_COVERAGE

3.3
Location : configure
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.missingBeanErrorUsingThymeleaf(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
negated conditional → KILLED

4.4
Location : configure
Killed by : oghamspringbootv2autoconfigure.it.SpringBeanResolutionTest.missingBeanErrorUsingThymeleaf(oghamspringbootv2autoconfigure.it.SpringBeanResolutionTest)
negated conditional → KILLED

122

1.1
Location : configure
Killed by : none
removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → NO_COVERAGE

2.2
Location : configure
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.missingBeanErrorUsingThymeleaf(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED

3.3
Location : configure
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.externalStyles(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED

4.4
Location : configure
Killed by : oghamspringbootv2autoconfigure.it.SpringBeanResolutionTest.missingBeanErrorUsingThymeleaf(oghamspringbootv2autoconfigure.it.SpringBeanResolutionTest)
removed call to fr/sii/ogham/core/builder/configurer/MessagingConfigurerAdapter::configure → KILLED

Active mutators

Tests examined


Report generated by PIT OGHAM