PhoneNumberTranslatorSender.java

1
package fr.sii.ogham.sms.sender;
2
3
import org.slf4j.Logger;
4
import org.slf4j.LoggerFactory;
5
6
import fr.sii.ogham.core.exception.MessageException;
7
import fr.sii.ogham.core.exception.MessageNotSentException;
8
import fr.sii.ogham.core.message.Message;
9
import fr.sii.ogham.core.sender.ConditionalSender;
10
import fr.sii.ogham.core.sender.MessageSender;
11
import fr.sii.ogham.sms.exception.message.PhoneNumberTranslatorException;
12
import fr.sii.ogham.sms.message.Contact;
13
import fr.sii.ogham.sms.message.PhoneNumber;
14
import fr.sii.ogham.sms.message.Recipient;
15
import fr.sii.ogham.sms.message.Sms;
16
import fr.sii.ogham.sms.message.addressing.AddressedPhoneNumber;
17
import fr.sii.ogham.sms.message.addressing.translator.PhoneNumberTranslator;
18
19
/**
20
 * Decorator sender that transforms the content of the message before really
21
 * sending it. This sender relies on {@link PhoneNumberTranslator} to transform
22
 * the message content. Once the content has been updated, then this sender
23
 * delegates to a real implementation the sending of the message.
24
 *
25
 * @author cdejonghe
26
 * @see PhoneNumberTranslator
27
 */
28
public class PhoneNumberTranslatorSender implements ConditionalSender {
29
	private static final Logger LOG = LoggerFactory.getLogger(PhoneNumberTranslatorSender.class);
30
31
	/** The translator that transforms the content of the message. */
32
	private final PhoneNumberTranslator senderTranslator;
33
34
	/** The translator that transforms the content of the message. */
35
	private final PhoneNumberTranslator recipientTranslator;
36
37
	/** The decorated sender that will really send the message. */
38
	private final MessageSender delegate;
39
40
	/**
41
	 * Initializes the sender with the provided translators and decorated
42
	 * sender. The translator implementation will transform the sender and
43
	 * receivers phone numbers from the message. The decorated sender will
44
	 * really send the message.
45
	 *
46
	 * @param senderTranslator
47
	 *            the translator implementation that will transform the sender
48
	 *            phone number from the message.
49
	 * @param recipientTranslator
50
	 *            the translator implementation that will transform the
51
	 *            receivers phone numbers from the message.
52
	 *
53
	 * @param delegate
54
	 *            The decorated sender will really send the message
55
	 */
56
	public PhoneNumberTranslatorSender(PhoneNumberTranslator senderTranslator, PhoneNumberTranslator recipientTranslator, MessageSender delegate) {
57
		super();
58
		this.senderTranslator = senderTranslator;
59
		this.recipientTranslator = recipientTranslator;
60
		this.delegate = delegate;
61
	}
62
63
	@Override
64
	public boolean supports(Message message) {
65 3 1. supports : negated conditional → SURVIVED
2. supports : negated conditional → NO_COVERAGE
3. supports : negated conditional → TIMED_OUT
		if (delegate instanceof ConditionalSender) {
66 8 1. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE
2. supports : replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → SURVIVED
3. supports : replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE
4. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → TIMED_OUT
5. supports : replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → TIMED_OUT
6. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED
7. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED
8. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED
			return ((ConditionalSender) delegate).supports(message);
67
		}
68 1 1. supports : replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE
		return true;
69
	}
70
71
	@Override
72
	public void send(Message message) throws MessageException {
73 5 1. send : negated conditional → SURVIVED
2. send : negated conditional → NO_COVERAGE
3. send : negated conditional → TIMED_OUT
4. send : negated conditional → KILLED
5. send : negated conditional → KILLED
		if (message instanceof Sms) {
74
			Sms sms = (Sms) message;
75
76
			try {
77
				// sender
78 5 1. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → SURVIVED
2. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → NO_COVERAGE
3. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → TIMED_OUT
4. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED
5. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED
				translatePhoneNumber(sms.getFrom(), senderTranslator, "sender", "FROM");
79
80
				// receivers
81
				for (Recipient currentRecipient : sms.getRecipients()) {
82 5 1. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → SURVIVED
2. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → NO_COVERAGE
3. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → TIMED_OUT
4. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED
5. send : removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED
					translatePhoneNumber(currentRecipient, recipientTranslator, "recipient", "TO");
83
				}
84
85
				LOG.debug("Sending translated message {} using {}", sms, delegate);
86 5 1. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → NO_COVERAGE
2. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → TIMED_OUT
3. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED
4. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED
5. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED
				delegate.send(sms);
87
			} catch (PhoneNumberTranslatorException pnte) {
88
				throw new MessageNotSentException("Failed to send message due to phone number translater", message, pnte);
89
			}
90
		} else {
91
			LOG.debug("Sending translated message {} using {}", message, delegate);
92 1 1. send : removed call to fr/sii/ogham/core/sender/MessageSender::send → NO_COVERAGE
			delegate.send(message);
93
		}
94
	}
95
96
	private static void translatePhoneNumber(Contact contact, PhoneNumberTranslator translator, String type, String field) throws PhoneNumberTranslatorException {
97 5 1. translatePhoneNumber : negated conditional → NO_COVERAGE
2. translatePhoneNumber : negated conditional → TIMED_OUT
3. translatePhoneNumber : negated conditional → KILLED
4. translatePhoneNumber : negated conditional → KILLED
5. translatePhoneNumber : negated conditional → KILLED
		if (contact == null) {
98
			return;
99
		}
100
		PhoneNumber phoneNumber = contact.getPhoneNumber();
101 5 1. translatePhoneNumber : negated conditional → NO_COVERAGE
2. translatePhoneNumber : negated conditional → SURVIVED
3. translatePhoneNumber : negated conditional → TIMED_OUT
4. translatePhoneNumber : negated conditional → KILLED
5. translatePhoneNumber : negated conditional → KILLED
		if (phoneNumber == null) {
102
			return;
103
		}
104 5 1. translatePhoneNumber : negated conditional → SURVIVED
2. translatePhoneNumber : negated conditional → NO_COVERAGE
3. translatePhoneNumber : negated conditional → TIMED_OUT
4. translatePhoneNumber : negated conditional → KILLED
5. translatePhoneNumber : negated conditional → KILLED
		if (phoneNumber instanceof AddressedPhoneNumber) {
105
			LOG.info("No need for {} translation. Already addressed : {}", type, phoneNumber);
106
		} else {
107
			LOG.debug("Translate the message {} phone number {} using {}", field, phoneNumber, translator);
108 5 1. translatePhoneNumber : removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → SURVIVED
2. translatePhoneNumber : removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → NO_COVERAGE
3. translatePhoneNumber : removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → TIMED_OUT
4. translatePhoneNumber : removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → KILLED
5. translatePhoneNumber : removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → KILLED
			contact.setPhoneNumber(translator.translate(phoneNumber));
109
		}
110
	}
111
112
	@Override
113
	public String toString() {
114
		StringBuilder sb = new StringBuilder();
115
		sb.append("PhoneNumberTranslatorSender [translators= S:").append(senderTranslator).append(" R:").append(recipientTranslator).append(", delegate=").append(delegate).append("]");
116 3 1. toString : replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → NO_COVERAGE
2. toString : replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → SURVIVED
3. toString : replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → TIMED_OUT
		return sb.toString();
117
	}
118
}

Mutations

65

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

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

3.3
Location : supports
Killed by : none
negated conditional → TIMED_OUT

66

1.1
Location : supports
Killed by : oghamcloudhopper.it.AutoRetryExtensionTest.smsNotRetriedDueToCloudhopperError(oghamcloudhopper.it.AutoRetryExtensionTest)
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED

2.2
Location : supports
Killed by : oghamcore.it.core.sender.AutoRetryTest.smsSentSuccessfullyOnFirstExecution(oghamcore.it.core.sender.AutoRetryTest)
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED

3.3
Location : supports
Killed by : none
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → TIMED_OUT

4.4
Location : supports
Killed by : none
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE

5.5
Location : supports
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → KILLED

6.6
Location : supports
Killed by : none
replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → TIMED_OUT

7.7
Location : supports
Killed by : none
replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → SURVIVED

8.8
Location : supports
Killed by : none
replaced boolean return with true for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE

68

1.1
Location : supports
Killed by : none
replaced boolean return with false for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::supports → NO_COVERAGE

73

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

2.2
Location : send
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
negated conditional → KILLED

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

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

5.5
Location : send
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
negated conditional → KILLED

78

1.1
Location : send
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED

2.2
Location : send
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED

3.3
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → SURVIVED

4.4
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → TIMED_OUT

5.5
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → NO_COVERAGE

82

1.1
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → SURVIVED

2.2
Location : send
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED

3.3
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → TIMED_OUT

4.4
Location : send
Killed by : none
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → NO_COVERAGE

5.5
Location : send
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
removed call to fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::translatePhoneNumber → KILLED

86

1.1
Location : send
Killed by : none
removed call to fr/sii/ogham/core/sender/MessageSender::send → TIMED_OUT

2.2
Location : send
Killed by : none
removed call to fr/sii/ogham/core/sender/MessageSender::send → NO_COVERAGE

3.3
Location : send
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED

4.4
Location : send
Killed by : oghamcloudhopper.it.AutoRetryExtensionTest.smsNotRetriedDueToCloudhopperError(oghamcloudhopper.it.AutoRetryExtensionTest)
removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED

5.5
Location : send
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
removed call to fr/sii/ogham/core/sender/MessageSender::send → KILLED

92

1.1
Location : send
Killed by : none
removed call to fr/sii/ogham/core/sender/MessageSender::send → NO_COVERAGE

97

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

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

3.3
Location : translatePhoneNumber
Killed by : oghamcloudhopper.it.AutoRetryExtensionTest.smsNotRetriedDueToCloudhopperError(oghamcloudhopper.it.AutoRetryExtensionTest)
negated conditional → KILLED

4.4
Location : translatePhoneNumber
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
negated conditional → KILLED

5.5
Location : translatePhoneNumber
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
negated conditional → KILLED

101

1.1
Location : translatePhoneNumber
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
negated conditional → KILLED

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

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

4.4
Location : translatePhoneNumber
Killed by : none
negated conditional → SURVIVED

5.5
Location : translatePhoneNumber
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
negated conditional → KILLED

104

1.1
Location : translatePhoneNumber
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
negated conditional → KILLED

2.2
Location : translatePhoneNumber
Killed by : none
negated conditional → SURVIVED

3.3
Location : translatePhoneNumber
Killed by : none
negated conditional → TIMED_OUT

4.4
Location : translatePhoneNumber
Killed by : none
negated conditional → NO_COVERAGE

5.5
Location : translatePhoneNumber
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
negated conditional → KILLED

108

1.1
Location : translatePhoneNumber
Killed by : oghamall.it.sms.SmsCustomImplTest.simple(oghamall.it.sms.SmsCustomImplTest)
removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → KILLED

2.2
Location : translatePhoneNumber
Killed by : none
removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → SURVIVED

3.3
Location : translatePhoneNumber
Killed by : none
removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → TIMED_OUT

4.4
Location : translatePhoneNumber
Killed by : none
removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → NO_COVERAGE

5.5
Location : translatePhoneNumber
Killed by : oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest.simple(oghamcore.ut.sms.sender.impl.PhoneNumberTranslatorSenderTest)
removed call to fr/sii/ogham/sms/message/Contact::setPhoneNumber → KILLED

116

1.1
Location : toString
Killed by : none
replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → TIMED_OUT

2.2
Location : toString
Killed by : none
replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → NO_COVERAGE

3.3
Location : toString
Killed by : none
replaced return value with "" for fr/sii/ogham/sms/sender/PhoneNumberTranslatorSender::toString → SURVIVED

Active mutators

Tests examined


Report generated by PIT OGHAM