package org.celllife.idart.sms;
import java.util.List;
import model.manager.SmsManager;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.log4j.Logger;
import org.celllife.idart.database.hibernate.MessageSchedule;
import org.celllife.idart.database.hibernate.StudyParticipant;
import org.celllife.idart.database.hibernate.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SmsRetrySchedulerJob extends CampaignSchedulingJob implements Job {
private static final Logger log = Logger.getLogger(SmsRetrySchedulerJob.class.getName());
public static final String JOB_NAME = "smsReminderJob";
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
log.info("SMS Retry job scheduling starting");
Transaction tx = null;
Session hSession = null;
try {
hSession = HibernateUtil.getNewSession();
tx = hSession.beginTransaction();
// Firstly, get unsuccessful messages scheduled for today
List<MessageSchedule> messages = SmsManager.getUnsuccessfulMessagesToday(hSession);
// Try to send the messages again
for (MessageSchedule messageSchedule : messages) {
int noOfDays = messageSchedule.getDaysToSchedule();
SmsType messageType = messageSchedule.getMessageType();
int messageNumber = messageSchedule.getMessageNumber();
final String language = messageSchedule.getLanguage();
List<StudyParticipant> participants = getContactsForCampaign(hSession, noOfDays, messageType);
CollectionUtils.filter(participants, new Predicate() {
@Override
public boolean evaluate(Object p) {
return ((StudyParticipant)p).getLanguage().equals(language);
}
});
if (!participants.isEmpty()){
boolean success = createAndScheduleCampaign(hSession, messageNumber, noOfDays, messageType, participants, language);
if (success){
SmsManager.updateMessageSchedule(hSession, messageSchedule);
}
}
}
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
log.error("Error submitting data to Mobilisr", e);
} finally {
if (hSession != null) {
hSession.close();
}
}
log.info("Mobilisr submission job completed");
}
}