*
* @param drMessage the delivery receipt message.
* @return the Message that originated the delivery receipt, or null if not found.
*/
private Message findOriginalMessage(Message drMessage) {
Message originalMessage = null; // this is what we are returning
String messageId = drMessage.getProperty("messageId", String.class);
messageId = convertMessageId(messageId);
String to = drMessage.getProperty("to", String.class);
String from = drMessage.getProperty("from", String.class);
MessageCriteria criteria = new MessageCriteria()
.direction(context.getDirection())
.addProperty("destination", context.getId())
.addProperty("smsc_messageid", messageId);
long startTime = new Date().getTime();
Collection<Message> messages = messageStore.list(criteria);
long endTime = new Date().getTime();
log.trace(getLogHead() + "retrieve message with smsc_messageid: " + messageId + ", to: " + to + ", from: " + from + " took "
+ (endTime - startTime) + " milis");
if (messages.size() == 1) {
originalMessage = messages.iterator().next();
} else if (messages.size() > 1) {
log.debug(messages.size() + " messages matched the id: " + messageId);
// iterate through the matched messages to find one that matches exactly
Iterator<Message> iterMessages = messages.iterator();
while (iterMessages.hasNext() && originalMessage == null) {
Message message = iterMessages.next();
String mTo = message.getProperty("to", String.class);
if (mTo.equals(to) || mTo.equals(from)) {
originalMessage = message;
}
}
}