DataCodingSchemeBuilder.java

1
package fr.sii.ogham.sms.builder.cloudhopper;
2
3
import java.util.function.Supplier;
4
5
import com.cloudhopper.commons.charset.Charset;
6
import com.cloudhopper.commons.charset.CharsetUtil;
7
import com.cloudhopper.commons.gsm.DataCoding;
8
import com.cloudhopper.smpp.SmppConstants;
9
10
import fr.sii.ogham.core.builder.Builder;
11
import fr.sii.ogham.core.builder.configuration.ConfigurationValueBuilder;
12
import fr.sii.ogham.core.builder.configuration.ConfigurationValueBuilderHelper;
13
import fr.sii.ogham.core.builder.configurer.Configurer;
14
import fr.sii.ogham.core.builder.context.BuildContext;
15
import fr.sii.ogham.core.builder.env.EnvironmentBuilder;
16
import fr.sii.ogham.core.fluent.AbstractParent;
17
import fr.sii.ogham.sms.sender.impl.cloudhopper.preparator.CharsetMapToCharacterEncodingGroupDataCodingProvider;
18
import fr.sii.ogham.sms.sender.impl.cloudhopper.preparator.CharsetMapToGeneralGroupDataCodingProvider;
19
import fr.sii.ogham.sms.sender.impl.cloudhopper.preparator.DataCodingProvider;
20
import fr.sii.ogham.sms.sender.impl.cloudhopper.preparator.FirstSupportingDataCodingProvider;
21
import fr.sii.ogham.sms.sender.impl.cloudhopper.preparator.FixedByteValueDataCodingProvider;
22
23
/**
24
 * Data Coding Scheme is a one-octet field in Short Messages (SM) and Cell
25
 * Broadcast Messages (CB) which carries a basic information how the recipient
26
 * handset should process the received message. The information includes:
27
 * <ul>
28
 * <li>the character set or message coding which determines the encoding of the
29
 * message user data</li>
30
 * <li>the message class which determines to which component of the Mobile
31
 * Station (MS) or User Equipment (UE) should be the message delivered</li>
32
 * <li>the request to automatically delete the message after reading</li>
33
 * <li>the state of flags indicating presence of unread voicemail, fax, e-mail
34
 * or other messages</li>
35
 * <li>the indication that the message content is compressed</li>
36
 * <li>the language of the cell broadcast message</li>
37
 * </ul>
38
 * The field is described in 3GPP 23.040 and 3GPP 23.038 under the name TP-DCS
39
 * (see <a href=
40
 * "https://en.wikipedia.org/wiki/Data_Coding_Scheme#SMS_Data_Coding_Scheme">SMS
41
 * Data Coding Scheme</a>).
42
 * 
43
 * <p>
44
 * Configures how Cloudhopper determines the Data Coding Scheme to use:
45
 * <ul>
46
 * <li>Automatic mode:
47
 * <ul>
48
 * <li>If SMPP v3.3 is used then
49
 * {@link CharsetMapToGeneralGroupDataCodingProvider} generates a
50
 * {@link DataCoding} with
51
 * {@link DataCoding#createGeneralGroup(byte, Byte, boolean)}</li>
52
 * <li>If SMPP v3.4+ is used then
53
 * {@link CharsetMapToCharacterEncodingGroupDataCodingProvider} generates a
54
 * {@link DataCoding} with
55
 * {@link DataCoding#createCharacterEncodingGroup(byte)}</li>
56
 * </ul>
57
 * </li>
58
 * <li>Allow registration of custom {@link DataCodingProvider}</li>
59
 * </ul>
60
 * 
61
 * @author Aurélien Baudet
62
 */
63
public class DataCodingSchemeBuilder extends AbstractParent<CloudhopperBuilder> implements Builder<DataCodingProvider> {
64
	private final BuildContext buildContext;
65
	private final Supplier<Byte> interfaceVersionProvider;
66
	private final ConfigurationValueBuilderHelper<DataCodingSchemeBuilder, Boolean> autoValueBuilder;
67
	private final ConfigurationValueBuilderHelper<DataCodingSchemeBuilder, Byte> dcsValueBuilder;
68
	private DataCodingProvider custom;
69
70
	/**
71
	 * Initializes the builder with a parent builder. The parent builder is used
72
	 * when calling {@link #and()} method. The {@link EnvironmentBuilder} is
73
	 * used to evaluate properties when {@link #build()} method is called.
74
	 * 
75
	 * @param parent
76
	 *            the parent builder
77
	 * @param buildContext
78
	 *            for registering instances and property evaluation
79
	 * @param interfaceVersionProvider
80
	 *            A function used to retrieve the value of the interface
81
	 *            version. This is needed when {@link #auto(Boolean)} mode is
82
	 *            enabled.
83
	 */
84
	public DataCodingSchemeBuilder(CloudhopperBuilder parent, BuildContext buildContext, Supplier<Byte> interfaceVersionProvider) {
85
		super(parent);
86
		this.buildContext = buildContext;
87
		this.interfaceVersionProvider = interfaceVersionProvider;
88
		this.autoValueBuilder = buildContext.newConfigurationValueBuilder(this, Boolean.class);
89
		this.dcsValueBuilder = buildContext.newConfigurationValueBuilder(this, Byte.class);
90
	}
91
92
	/**
93
	 * * Enable/disable automatic mode based on SMPP interface version.
94
	 * 
95
	 * <p>
96
	 * {@link DataCodingProvider} implementation is selected based on SMPP
97
	 * interface version. SMPP v3.3 Data Coding Scheme values are defined in
98
	 * <a href=
99
	 * "https://en.wikipedia.org/wiki/Data_Coding_Scheme#SMS_Data_Coding_Scheme">SMS
100
	 * Data Coding Scheme</a>. SMPP 3.4 introduced a new list of data_coding
101
	 * values (<a href=
102
	 * "https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer#PDU_body">PDU
103
	 * body</a>).
104
	 * </p>
105
	 * 
106
	 * <strong>SMPP v3.3</strong>
107
	 * <p>
108
	 * The text message is encoded using {@link Charset}. According to that
109
	 * charset, the Data Coding Scheme is determined using the <strong>General
110
	 * Data Coding group</strong> table. Therefore, a simple mapping is applied:
111
	 * <ul>
112
	 * <li>{@link CharsetUtil#NAME_GSM7} {@literal ->}
113
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
114
	 * <li>{@link CharsetUtil#NAME_PACKED_GSM} {@literal ->}
115
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
116
	 * <li>{@link CharsetUtil#NAME_GSM} {@literal ->}
117
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
118
	 * <li>{@link CharsetUtil#NAME_GSM8} {@literal ->}
119
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
120
	 * <li>{@link CharsetUtil#NAME_UCS_2} {@literal ->}
121
	 * {@link DataCoding#CHAR_ENC_UCS2}</li>
122
	 * </ul>
123
	 * 
124
	 * 
125
	 * <strong>SMPP v3.4+</strong>
126
	 * <p>
127
	 * The text message is encoded using {@link Charset}. According to that
128
	 * charset, the Data Coding Scheme is determined using only the
129
	 * <strong>Alphabet</strong> table. Therefore, a simple mapping is applied:
130
	 * <ul>
131
	 * <li>{@link CharsetUtil#NAME_GSM7} {@literal ->}
132
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
133
	 * <li>{@link CharsetUtil#NAME_PACKED_GSM} {@literal ->}
134
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
135
	 * <li>{@link CharsetUtil#NAME_GSM} {@literal ->}
136
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
137
	 * <li>{@link CharsetUtil#NAME_GSM8} {@literal ->}
138
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
139
	 * <li>{@link CharsetUtil#NAME_ISO_8859_1} {@literal ->}
140
	 * {@link DataCoding#CHAR_ENC_LATIN1}</li>
141
	 * <li>{@link CharsetUtil#NAME_UCS_2} {@literal ->}
142
	 * {@link DataCoding#CHAR_ENC_UCS2}</li>
143
	 * </ul>
144
	 * 
145
	 * 
146
	 * <p>
147
	 * The value set using this method takes precedence over any property and
148
	 * default value configured using {@link #auto()}.
149
	 * 
150
	 * <pre>
151
	 * .auto(false)
152
	 * .auto()
153
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
154
	 *   .defaultValue(true)
155
	 * </pre>
156
	 * 
157
	 * <pre>
158
	 * .auto(false)
159
	 * .auto()
160
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
161
	 *   .defaultValue(true)
162
	 * </pre>
163
	 * 
164
	 * In both cases, {@code auto(false)} is used.
165
	 * 
166
	 * <p>
167
	 * If this method is called several times, only the last value is used.
168
	 * 
169
	 * <p>
170
	 * If {@code null} value is set, it is like not setting a value at all. The
171
	 * property/default value configuration is applied.
172
	 * 
173
	 * @param enable
174
	 *            enable or disable automatic Data Coding Scheme detection
175
	 * @return this instance for fluent chaining
176
	 */
177
	public DataCodingSchemeBuilder auto(Boolean enable) {
178 1 1. auto : removed call to fr/sii/ogham/core/builder/configuration/ConfigurationValueBuilderHelper::setValue → NO_COVERAGE
		autoValueBuilder.setValue(enable);
179 1 1. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → NO_COVERAGE
		return this;
180
	}
181
182
	/**
183
	 * Enable/disable automatic mode based on SMPP interface version.
184
	 * 
185
	 * <p>
186
	 * {@link DataCodingProvider} implementation is selected based on SMPP
187
	 * interface version. SMPP v3.3 Data Coding Scheme values are defined in
188
	 * <a href=
189
	 * "https://en.wikipedia.org/wiki/Data_Coding_Scheme#SMS_Data_Coding_Scheme">SMS
190
	 * Data Coding Scheme</a>. SMPP 3.4 introduced a new list of data_coding
191
	 * values (<a href=
192
	 * "https://en.wikipedia.org/wiki/Short_Message_Peer-to-Peer#PDU_body">PDU
193
	 * body</a>).
194
	 * </p>
195
	 * 
196
	 * <strong>SMPP v3.3</strong>
197
	 * <p>
198
	 * The text message is encoded using {@link Charset}. According to that
199
	 * charset, the Data Coding Scheme is determined using the <strong>General
200
	 * Data Coding group</strong> table. Therefore, a simple mapping is applied:
201
	 * <ul>
202
	 * <li>{@link CharsetUtil#NAME_GSM7} {@literal ->}
203
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
204
	 * <li>{@link CharsetUtil#NAME_PACKED_GSM} {@literal ->}
205
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
206
	 * <li>{@link CharsetUtil#NAME_GSM} {@literal ->}
207
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
208
	 * <li>{@link CharsetUtil#NAME_GSM8} {@literal ->}
209
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
210
	 * <li>{@link CharsetUtil#NAME_UCS_2} {@literal ->}
211
	 * {@link DataCoding#CHAR_ENC_UCS2}</li>
212
	 * </ul>
213
	 * 
214
	 * 
215
	 * <strong>SMPP v3.4+</strong>
216
	 * <p>
217
	 * The text message is encoded using {@link Charset}. According to that
218
	 * charset, the Data Coding Scheme is determined using only the
219
	 * <strong>Alphabet</strong> table. Therefore, a simple mapping is applied:
220
	 * <ul>
221
	 * <li>{@link CharsetUtil#NAME_GSM7} {@literal ->}
222
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
223
	 * <li>{@link CharsetUtil#NAME_PACKED_GSM} {@literal ->}
224
	 * {@link DataCoding#CHAR_ENC_DEFAULT}</li>
225
	 * <li>{@link CharsetUtil#NAME_GSM} {@literal ->}
226
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
227
	 * <li>{@link CharsetUtil#NAME_GSM8} {@literal ->}
228
	 * {@link DataCoding#CHAR_ENC_8BIT}</li>
229
	 * <li>{@link CharsetUtil#NAME_ISO_8859_1} {@literal ->}
230
	 * {@link DataCoding#CHAR_ENC_LATIN1}</li>
231
	 * <li>{@link CharsetUtil#NAME_UCS_2} {@literal ->}
232
	 * {@link DataCoding#CHAR_ENC_UCS2}</li>
233
	 * </ul>
234
	 * 
235
	 * 
236
	 * <strong>Custom {@link DataCodingProvider} also configured</strong>
237
	 * <p>
238
	 * If a custom {@link DataCodingProvider} instance is registered, this
239
	 * instance is tried first (see {@link #custom(DataCodingProvider)} for more
240
	 * information). The automatic behavior is applied after if returned value
241
	 * of custom {@link DataCodingProvider} is {@code null}.
242
	 * 
243
	 * <strong>Fixed value also configured</strong>
244
	 * <p>
245
	 * If a fixed value is configured then it preempts any other configuration (
246
	 * {@link #auto(Boolean)} and {@link #custom(DataCodingProvider)} are not
247
	 * used at all).
248
	 * 
249
	 * 
250
	 * <p>
251
	 * This method is mainly used by {@link Configurer}s to register some
252
	 * property keys and/or a default value. The aim is to let developer be able
253
	 * to externalize its configuration (using system properties, configuration
254
	 * file or anything else). If the developer doesn't configure any value for
255
	 * the registered properties, the default value is used (if set).
256
	 * 
257
	 * <pre>
258
	 * .auto()
259
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
260
	 *   .defaultValue(true)
261
	 * </pre>
262
	 * 
263
	 * <p>
264
	 * Non-null value set using {@link #auto(Boolean)} takes precedence over
265
	 * property values and default value.
266
	 * 
267
	 * <pre>
268
	 * .auto(false)
269
	 * .auto()
270
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
271
	 *   .defaultValue(true)
272
	 * </pre>
273
	 * 
274
	 * The value {@code false} is used regardless of the value of the properties
275
	 * and default value.
276
	 * 
277
	 * <p>
278
	 * See {@link ConfigurationValueBuilder} for more information.
279
	 * 
280
	 * 
281
	 * @return the builder to configure property keys/default value
282
	 */
283
	public ConfigurationValueBuilder<DataCodingSchemeBuilder, Boolean> auto() {
284 5 1. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED
2. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED
3. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED
4. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED
5. auto : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED
		return autoValueBuilder;
285
	}
286
287
	/**
288
	 * Use the same Data Coding Scheme value for all messages.
289
	 * 
290
	 * <p>
291
	 * The value set using this method takes precedence over any property and
292
	 * default value configured using {@link #value()}.
293
	 * 
294
	 * <pre>
295
	 * .value((byte) 0x10)
296
	 * .value()
297
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
298
	 *   .defaultValue((byte) 0)
299
	 * </pre>
300
	 * 
301
	 * <pre>
302
	 * .value((byte) 0x10)
303
	 * .value()
304
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
305
	 *   .defaultValue((byte) 0)
306
	 * </pre>
307
	 * 
308
	 * In both cases, {@code value((byte) 0x10)} is used.
309
	 * 
310
	 * <p>
311
	 * If this method is called several times, only the last value is used.
312
	 * 
313
	 * <p>
314
	 * If {@code null} value is set, it is like not setting a value at all. The
315
	 * property/default value configuration is applied.
316
	 * 
317
	 * @param value
318
	 *            the Data Coding Scheme value for all messages
319
	 * @return this instance for fluent chaining
320
	 */
321
	public DataCodingSchemeBuilder value(Byte value) {
322 1 1. value : removed call to fr/sii/ogham/core/builder/configuration/ConfigurationValueBuilderHelper::setValue → NO_COVERAGE
		this.dcsValueBuilder.setValue(value);
323 1 1. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → NO_COVERAGE
		return this;
324
	}
325
326
	/**
327
	 * Use the same Data Coding Scheme value for all messages.
328
	 * 
329
	 * <p>
330
	 * This method is mainly used by {@link Configurer}s to register some
331
	 * property keys and/or a default value. The aim is to let developer be able
332
	 * to externalize its configuration (using system properties, configuration
333
	 * file or anything else). If the developer doesn't configure any value for
334
	 * the registered properties, the default value is used (if set).
335
	 * 
336
	 * <pre>
337
	 * .value()
338
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
339
	 *   .defaultValue((byte) 0)
340
	 * </pre>
341
	 * 
342
	 * <p>
343
	 * Non-null value set using {@link #value(Byte)} takes precedence over
344
	 * property values and default value.
345
	 * 
346
	 * <pre>
347
	 * .value((byte) 0x10)
348
	 * .value()
349
	 *   .properties("${custom.property.high-priority}", "${custom.property.low-priority}")
350
	 *   .defaultValue((byte) 0)
351
	 * </pre>
352
	 * 
353
	 * The value {@code (byte) 0x10} is used regardless of the value of the
354
	 * properties and default value.
355
	 * 
356
	 * <p>
357
	 * See {@link ConfigurationValueBuilder} for more information.
358
	 * 
359
	 * 
360
	 * @return the builder to configure property keys/default value
361
	 */
362
	public ConfigurationValueBuilder<DataCodingSchemeBuilder, Byte> value() {
363 5 1. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED
2. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED
3. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED
4. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED
5. value : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED
		return dcsValueBuilder;
364
	}
365
366
	/**
367
	 * Register a custom strategy to determine Data Coding Scheme value.
368
	 * 
369
	 * <p>
370
	 * Automatic behavior (see {@link #auto(Boolean)} is still active but custom
371
	 * strategy is executed first. As the custom {@link DataCodingProvider} can
372
	 * return {@code null}, the automatic behavior is executed in that case.
373
	 * 
374
	 * <p>
375
	 * If {@code null} value is provided, custom strategy is disabled.
376
	 * 
377
	 * @param custom
378
	 *            the Strategy to determine Data Coding Scheme value.
379
	 * @return this instance for fluent chaining
380
	 */
381
	public DataCodingSchemeBuilder custom(DataCodingProvider custom) {
382
		this.custom = custom;
383 2 1. custom : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::custom → NO_COVERAGE
2. custom : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::custom → KILLED
		return this;
384
	}
385
386
	@Override
387
	@SuppressWarnings("squid:S5411")
388
	public DataCodingProvider build() {
389
		Byte dataCodingValue = dcsValueBuilder.getValue();
390 5 1. build : negated conditional → KILLED
2. build : negated conditional → KILLED
3. build : negated conditional → KILLED
4. build : negated conditional → KILLED
5. build : negated conditional → KILLED
		if (dataCodingValue != null) {
391 1 1. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → NO_COVERAGE
			return buildContext.register(new FixedByteValueDataCodingProvider(dataCodingValue));
392
		}
393
		FirstSupportingDataCodingProvider firstSupporting = buildContext.register(new FirstSupportingDataCodingProvider());
394 5 1. build : negated conditional → SURVIVED
2. build : negated conditional → KILLED
3. build : negated conditional → KILLED
4. build : negated conditional → KILLED
5. build : negated conditional → KILLED
		if (custom != null) {
395 2 1. build : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → SURVIVED
2. build : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → NO_COVERAGE
			firstSupporting.register(custom);
396
		}
397 5 1. build : negated conditional → SURVIVED
2. build : negated conditional → KILLED
3. build : negated conditional → KILLED
4. build : negated conditional → KILLED
5. build : negated conditional → KILLED
		if (autoValueBuilder.getValue(false)) {
398 5 1. build : removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → SURVIVED
2. build : removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED
3. build : removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED
4. build : removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED
5. build : removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED
			registerAuto(firstSupporting);
399
		}
400 5 1. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → SURVIVED
2. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED
3. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED
4. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED
5. build : replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED
		return firstSupporting;
401
	}
402
403
	private void registerAuto(FirstSupportingDataCodingProvider firstSupporting) {
404
		Byte interfaceVersion = interfaceVersionProvider.get();
405 1 1. registerAuto : negated conditional → SURVIVED
		if (interfaceVersion == SmppConstants.VERSION_3_3) {
406 1 1. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → NO_COVERAGE
			firstSupporting.register(buildContext.register(new CharsetMapToGeneralGroupDataCodingProvider(false)));
407
			return;
408
		}
409
		// 3.4+
410 5 1. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → SURVIVED
2. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED
3. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED
4. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED
5. registerAuto : removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED
		firstSupporting.register(buildContext.register(new CharsetMapToCharacterEncodingGroupDataCodingProvider(false)));
411
	}
412
413
}

Mutations

178

1.1
Location : auto
Killed by : none
removed call to fr/sii/ogham/core/builder/configuration/ConfigurationValueBuilderHelper::setValue → NO_COVERAGE

179

1.1
Location : auto
Killed by : none
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → NO_COVERAGE

284

1.1
Location : auto
Killed by : oghamspringbootv2autoconfigure.it.OghamSpringBoot2JavaMailAutoConfigurationTests.oghamPropertiesWithSpringPropsShouldUseOghamPropertiesPrecedence(oghamspringbootv2autoconfigure.it.OghamSpringBoot2JavaMailAutoConfigurationTests)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED

2.2
Location : auto
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.notHtml(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED

3.3
Location : auto
Killed by : oghamsmsglobal.it.SmsglobalServiceProviderConfigurerSpec
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED

4.4
Location : auto
Killed by : oghamspringbootv1autoconfigure.it.OghamSpringBoot1JavaMailAutoConfigurationTests.oghamAloneShouldUseOghamProperties(oghamspringbootv1autoconfigure.it.OghamSpringBoot1JavaMailAutoConfigurationTests)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED

5.5
Location : auto
Killed by : oghamcloudhopper.it.AutoRetryExtensionTest.smsNotRetriedDueToCloudhopperError(oghamcloudhopper.it.AutoRetryExtensionTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::auto → KILLED

322

1.1
Location : value
Killed by : none
removed call to fr/sii/ogham/core/builder/configuration/ConfigurationValueBuilderHelper::setValue → NO_COVERAGE

323

1.1
Location : value
Killed by : none
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → NO_COVERAGE

363

1.1
Location : value
Killed by : oghamspringbootv1autoconfigure.it.OghamSpringBoot1JavaMailAutoConfigurationTests.oghamAloneShouldUseOghamProperties(oghamspringbootv1autoconfigure.it.OghamSpringBoot1JavaMailAutoConfigurationTests)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED

2.2
Location : value
Killed by : oghamspringbootv2autoconfigure.it.OghamSpringBoot2JavaMailAutoConfigurationTests.oghamPropertiesWithSpringPropsShouldUseOghamPropertiesPrecedence(oghamspringbootv2autoconfigure.it.OghamSpringBoot2JavaMailAutoConfigurationTests)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED

3.3
Location : value
Killed by : oghamsmsglobal.it.SmsglobalServiceProviderConfigurerSpec
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED

4.4
Location : value
Killed by : oghamall.it.html.translator.JsoupInlineCssTranslatorTest.notHtml(oghamall.it.html.translator.JsoupInlineCssTranslatorTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED

5.5
Location : value
Killed by : oghamcloudhopper.it.AutoRetryExtensionTest.smsNotRetriedDueToCloudhopperError(oghamcloudhopper.it.AutoRetryExtensionTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::value → KILLED

383

1.1
Location : custom
Killed by : none
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::custom → NO_COVERAGE

2.2
Location : custom
Killed by : oghamsmsglobal.it.SmsglobalServiceProviderConfigurerSpec
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::custom → KILLED

390

1.1
Location : build
Killed by : oghamall.it.freemarker.StaticMethodAccessDisabledTest.smsUsingFreemarkerTemplateAndStaticMethodAccessDisabledShouldFail(oghamall.it.freemarker.StaticMethodAccessDisabledTest)
negated conditional → KILLED

2.2
Location : build
Killed by : oghamsmsglobal.it.SmsglobalServiceProviderConfigurerSpec
negated conditional → KILLED

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

4.4
Location : build
Killed by : oghamcloudhopper.it.ConnectionFailureTest.invalidSystemId(oghamcloudhopper.it.ConnectionFailureTest)
negated conditional → KILLED

5.5
Location : build
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.emailUsingFreemarkerTemplateAndStaticMethodAccessDisabledShouldFail(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
negated conditional → KILLED

391

1.1
Location : build
Killed by : none
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → NO_COVERAGE

394

1.1
Location : build
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
negated conditional → KILLED

2.2
Location : build
Killed by : oghamcloudhopper.it.SendTimeoutTest.sendResponseTimeout(oghamcloudhopper.it.SendTimeoutTest)
negated conditional → KILLED

3.3
Location : build
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.smsUsingFreemarkerTemplateShouldBeAbleToCallStaticMethodsWithCustomVariableName(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
negated conditional → KILLED

4.4
Location : build
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.smsUsingFreemarkerTemplateShouldResolveBeans(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
negated conditional → KILLED

5.5
Location : build
Killed by : none
negated conditional → SURVIVED

395

1.1
Location : build
Killed by : none
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → SURVIVED

2.2
Location : build
Killed by : none
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → NO_COVERAGE

397

1.1
Location : build
Killed by : oghamcloudhopper.it.SendTimeoutTest.sendResponseTimeout(oghamcloudhopper.it.SendTimeoutTest)
negated conditional → KILLED

2.2
Location : build
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.smsUsingFreemarkerTemplateShouldBeAbleToCallStaticMethodsWithCustomVariableName(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
negated conditional → KILLED

3.3
Location : build
Killed by : none
negated conditional → SURVIVED

4.4
Location : build
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.smsUsingFreemarkerTemplateShouldResolveBeans(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
negated conditional → KILLED

5.5
Location : build
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
negated conditional → KILLED

398

1.1
Location : build
Killed by : none
removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → SURVIVED

2.2
Location : build
Killed by : oghamcloudhopper.it.SendTimeoutTest.sendResponseTimeout(oghamcloudhopper.it.SendTimeoutTest)
removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED

3.3
Location : build
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.smsUsingFreemarkerTemplateShouldResolveBeans(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED

4.4
Location : build
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.smsUsingFreemarkerTemplateShouldBeAbleToCallStaticMethodsWithCustomVariableName(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED

5.5
Location : build
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
removed call to fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::registerAuto → KILLED

400

1.1
Location : build
Killed by : none
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → SURVIVED

2.2
Location : build
Killed by : oghamcloudhopper.it.SendTimeoutTest.sendResponseTimeout(oghamcloudhopper.it.SendTimeoutTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED

3.3
Location : build
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.smsUsingFreemarkerTemplateShouldBeAbleToCallStaticMethodsWithCustomVariableName(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED

4.4
Location : build
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.smsUsingFreemarkerTemplateShouldResolveBeans(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED

5.5
Location : build
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
replaced return value with null for fr/sii/ogham/sms/builder/cloudhopper/DataCodingSchemeBuilder::build → KILLED

405

1.1
Location : registerAuto
Killed by : none
negated conditional → SURVIVED

406

1.1
Location : registerAuto
Killed by : none
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → NO_COVERAGE

410

1.1
Location : registerAuto
Killed by : none
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → SURVIVED

2.2
Location : registerAuto
Killed by : oghamspringbootv2autoconfigure.it.StaticMethodAccessTest.smsUsingFreemarkerTemplateShouldBeAbleToCallStaticMethodsWithCustomVariableName(oghamspringbootv2autoconfigure.it.StaticMethodAccessTest)
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED

3.3
Location : registerAuto
Killed by : oghamcloudhopper.it.SendTimeoutTest.sendResponseTimeout(oghamcloudhopper.it.SendTimeoutTest)
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED

4.4
Location : registerAuto
Killed by : oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest.smsUsingFreemarkerTemplateShouldResolveBeans(oghamspringbootv1autoconfigure.it.SpringBeanResolutionTest)
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED

5.5
Location : registerAuto
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
removed call to fr/sii/ogham/sms/sender/impl/cloudhopper/preparator/FirstSupportingDataCodingProvider::register → KILLED

Active mutators

Tests examined


Report generated by PIT OGHAM