MessageDecoder.java

1
package fr.sii.ogham.testing.sms.simulator.decode;
2
3
import java.util.Arrays;
4
5
import org.jsmpp.bean.Alphabet;
6
import org.slf4j.Logger;
7
import org.slf4j.LoggerFactory;
8
9
import com.cloudhopper.commons.charset.Charset;
10
import com.cloudhopper.commons.charset.CharsetUtil;
11
12
import fr.sii.ogham.testing.sms.simulator.bean.OptionalParameter;
13
import fr.sii.ogham.testing.sms.simulator.bean.SubmitSm;
14
import fr.sii.ogham.testing.sms.simulator.bean.Tag;
15
16
/**
17
 * Utility class that is smart enough to find which field was used to send the
18
 * message. It is also able to determine if a User Data Header was used and
19
 * extract real payload. It uses the right decoder to decode the message into a
20
 * string.
21
 * 
22
 * @author Aurélien Baudet
23
 *
24
 */
25
public final class MessageDecoder {
26
	private static final Logger LOG = LoggerFactory.getLogger(MessageDecoder.class);
27
28
	/**
29
	 * Decode the received message to extract the text message. The
30
	 * alphabet/encoding is automatically determined from the message.
31
	 * 
32
	 * @param submitSm
33
	 *            the message to decode
34
	 * @return the text message
35
	 */
36
	public static String decode(SubmitSm submitSm) {
37
		Alphabet alphabet = Alphabet.parseDataCoding(submitSm.getDataCoding());
38
		Charset charset = getCharset(alphabet);
39 5 1. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE
2. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → TIMED_OUT
3. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
4. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
5. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
		return decode(submitSm, new CloudhopperCharsetAdapter(charset));
40
	}
41
42
	/**
43
	 * Decode the received message to extract the text message. The
44
	 * alphabet/encoding is explicitly defined.
45
	 * 
46
	 * @param submitSm
47
	 *            the message to decode
48
	 * @param charset
49
	 *            the charset used to decode the message
50
	 * @return the text message
51
	 */
52
	public static String decode(SubmitSm submitSm, fr.sii.ogham.testing.sms.simulator.decode.Charset charset) {
53
		byte[] shortMessage = getMessageBytes(submitSm);
54 5 1. decode : negated conditional → NO_COVERAGE
2. decode : negated conditional → TIMED_OUT
3. decode : negated conditional → KILLED
4. decode : negated conditional → KILLED
5. decode : negated conditional → KILLED
		if (shortMessage == null) {
55 2 1. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE
2. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
			return null;
56
		}
57 5 1. decode : negated conditional → NO_COVERAGE
2. decode : negated conditional → TIMED_OUT
3. decode : negated conditional → KILLED
4. decode : negated conditional → KILLED
5. decode : negated conditional → KILLED
		if (submitSm.isUdhi()) {
58 4 1. decode : Replaced integer addition with subtraction → NO_COVERAGE
2. decode : Replaced integer addition with subtraction → KILLED
3. decode : Replaced integer addition with subtraction → KILLED
4. decode : Replaced integer addition with subtraction → KILLED
			int headerLength = shortMessage[0] + 1;
59
			shortMessage = Arrays.copyOfRange(shortMessage, headerLength, shortMessage.length);
60
		}
61
		Alphabet alphabet = Alphabet.parseDataCoding(submitSm.getDataCoding());
62
		LOG.trace("alphabet={}, charset={}, isUdhi={}, header={}", alphabet, charset, submitSm.isUdhi(), shortMessage);
63 5 1. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE
2. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → TIMED_OUT
3. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
4. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
5. decode : replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED
		return charset.decode(shortMessage);
64
	}
65
66
	@SuppressWarnings("squid:S1168")
67
	private static byte[] getMessageBytes(SubmitSm submitSm) {
68
		byte[] shortMessage = submitSm.getShortMessage();
69 15 1. getMessageBytes : changed conditional boundary → NO_COVERAGE
2. getMessageBytes : changed conditional boundary → SURVIVED
3. getMessageBytes : negated conditional → NO_COVERAGE
4. getMessageBytes : negated conditional → NO_COVERAGE
5. getMessageBytes : changed conditional boundary → TIMED_OUT
6. getMessageBytes : negated conditional → TIMED_OUT
7. getMessageBytes : negated conditional → TIMED_OUT
8. getMessageBytes : changed conditional boundary → KILLED
9. getMessageBytes : changed conditional boundary → KILLED
10. getMessageBytes : negated conditional → KILLED
11. getMessageBytes : negated conditional → KILLED
12. getMessageBytes : negated conditional → KILLED
13. getMessageBytes : negated conditional → KILLED
14. getMessageBytes : negated conditional → KILLED
15. getMessageBytes : negated conditional → KILLED
		if (shortMessage != null && shortMessage.length > 0) {
70 5 1. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → NO_COVERAGE
2. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → TIMED_OUT
3. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED
4. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED
5. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED
			return shortMessage;
71
		}
72
		OptionalParameter parameter = submitSm.getOptionalParameter(Tag.MESSAGE_PAYLOAD);
73 3 1. getMessageBytes : negated conditional → NO_COVERAGE
2. getMessageBytes : negated conditional → KILLED
3. getMessageBytes : negated conditional → KILLED
		if (parameter != null) {
74 3 1. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → NO_COVERAGE
2. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED
3. getMessageBytes : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED
			return parameter.getValue();
75
		}
76
		return null;
77
	}
78
79
	private static Charset getCharset(Alphabet alphabet) {
80
		// @formatter:off
81
		switch (alphabet) {
82 4 1. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE
2. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
3. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
4. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
			case ALPHA_DEFAULT:						return CharsetUtil.CHARSET_GSM7;
83 5 1. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE
2. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → TIMED_OUT
3. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
4. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
5. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
			case ALPHA_8_BIT:						return CharsetUtil.CHARSET_GSM8;
84 4 1. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE
2. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
3. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
4. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED
			case ALPHA_UCS2:						return CharsetUtil.CHARSET_UCS_2;
85 1 1. getCharset : replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE
			case ALPHA_LATIN1:						return CharsetUtil.CHARSET_ISO_8859_1;
86
//			case ALPHA_IA5:							return CharsetUtil.;
87
//			case ALPHA_CYRILLIC:					return CharsetUtil.;
88
//			case ALPHA_ISO_2022_JP_MUSIC_CODES:		return CharsetUtil.;
89
//			case ALPHA_JIS:							return CharsetUtil.;
90
//			case ALPHA_JIS_X_0212_1990:				return CharsetUtil.;
91
//			case ALPHA_KS_C_5601:					return CharsetUtil.;
92
//			case ALPHA_LATIN_HEBREW:				return CharsetUtil.;
93
//			case ALPHA_PICTOGRAM_ENCODING:			return CharsetUtil.;
94
			default:
95
				throw new IllegalStateException("The alphabet " + alphabet.name() + " can't be decoded because no charset implementation can handle it");
96
		}
97
		// @formatter:on
98
	}
99
100
	private MessageDecoder() {
101
		super();
102
	}
103
}

Mutations

39

1.1
Location : decode
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

2.2
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

3.3
Location : decode
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → TIMED_OUT

4.4
Location : decode
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

5.5
Location : decode
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE

54

1.1
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
negated conditional → KILLED

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

3.3
Location : decode
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
negated conditional → KILLED

4.4
Location : decode
Killed by : none
negated conditional → TIMED_OUT

5.5
Location : decode
Killed by : none
negated conditional → NO_COVERAGE

55

1.1
Location : decode
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE

2.2
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

57

1.1
Location : decode
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
negated conditional → KILLED

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

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

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

5.5
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
negated conditional → KILLED

58

1.1
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
Replaced integer addition with subtraction → KILLED

2.2
Location : decode
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
Replaced integer addition with subtraction → KILLED

3.3
Location : decode
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

4.4
Location : decode
Killed by : oghamcloudhopper.it.PartialConfigurationTest.splitterEnabledAndAutoGuessEnabledAndGsm7bitEncodingConfiguredAndLongMessageShouldSendTwoMessages(oghamcloudhopper.it.PartialConfigurationTest)
Replaced integer addition with subtraction → KILLED

63

1.1
Location : decode
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

2.2
Location : decode
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → NO_COVERAGE

3.3
Location : decode
Killed by : none
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → TIMED_OUT

4.4
Location : decode
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

5.5
Location : decode
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
replaced return value with "" for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::decode → KILLED

69

1.1
Location : getMessageBytes
Killed by : none
changed conditional boundary → TIMED_OUT

2.2
Location : getMessageBytes
Killed by : oghamcloudhopper.it.TlvMessagePayloadTest.simple(oghamcloudhopper.it.TlvMessagePayloadTest)
changed conditional boundary → KILLED

3.3
Location : getMessageBytes
Killed by : none
changed conditional boundary → NO_COVERAGE

4.4
Location : getMessageBytes
Killed by : none
changed conditional boundary → SURVIVED

5.5
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
changed conditional boundary → KILLED

6.6
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
negated conditional → KILLED

7.7
Location : getMessageBytes
Killed by : none
negated conditional → TIMED_OUT

8.8
Location : getMessageBytes
Killed by : none
negated conditional → NO_COVERAGE

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

10.10
Location : getMessageBytes
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
negated conditional → KILLED

11.11
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
negated conditional → KILLED

12.12
Location : getMessageBytes
Killed by : none
negated conditional → TIMED_OUT

13.13
Location : getMessageBytes
Killed by : none
negated conditional → NO_COVERAGE

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

15.15
Location : getMessageBytes
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
negated conditional → KILLED

70

1.1
Location : getMessageBytes
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED

2.2
Location : getMessageBytes
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → NO_COVERAGE

3.3
Location : getMessageBytes
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → TIMED_OUT

4.4
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED

5.5
Location : getMessageBytes
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED

73

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

2.2
Location : getMessageBytes
Killed by : oghamcloudhopper.it.TlvMessagePayloadTest.simple(oghamcloudhopper.it.TlvMessagePayloadTest)
negated conditional → KILLED

3.3
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
negated conditional → KILLED

74

1.1
Location : getMessageBytes
Killed by : oghamcloudhopper.it.TlvMessagePayloadTest.simple(oghamcloudhopper.it.TlvMessagePayloadTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED

2.2
Location : getMessageBytes
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → NO_COVERAGE

3.3
Location : getMessageBytes
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getMessageBytes → KILLED

82

1.1
Location : getCharset
Killed by : oghamcloudhopper.it.SpecialCharactersTest.gsm7bitDefaultAlphabet(oghamcloudhopper.it.SpecialCharactersTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

2.2
Location : getCharset
Killed by : oghamall.it.sms.SmsSMPPGsm7bitTest.longMessage(oghamall.it.sms.SmsSMPPGsm7bitTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

3.3
Location : getCharset
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE

4.4
Location : getCharset
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

83

1.1
Location : getCharset
Killed by : oghamall.it.sms.SmsSMPPDefaultsTest.gsm8bitDefaultAlphabet(oghamall.it.sms.SmsSMPPDefaultsTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

2.2
Location : getCharset
Killed by : oghamcloudhopper.it.PartialConfigurationTest.nothingConfiguredAndLongMessageShouldSendOneLongMessageUsingDefaultEncoding(oghamcloudhopper.it.PartialConfigurationTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

3.3
Location : getCharset
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

4.4
Location : getCharset
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE

5.5
Location : getCharset
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → TIMED_OUT

84

1.1
Location : getCharset
Killed by : oghamcloudhopper.it.SpecialCharactersTest.gsmUcs2(oghamcloudhopper.it.SpecialCharactersTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

2.2
Location : getCharset
Killed by : oghamall.it.sms.SmsSMPPDefaultsTest.gsmUcs2(oghamall.it.sms.SmsSMPPDefaultsTest)
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

3.3
Location : getCharset
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE

4.4
Location : getCharset
Killed by : oghamtesting.ut.sms.simulator.SmsUtilsSpec
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → KILLED

85

1.1
Location : getCharset
Killed by : none
replaced return value with null for fr/sii/ogham/testing/sms/simulator/decode/MessageDecoder::getCharset → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT OGHAM