package fi.otavanopisto.pyramus.plugin.mailchimp;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;
import org.apache.commons.lang.StringUtils;
import com.ecwid.mailchimp.MailChimpClient;
import com.ecwid.mailchimp.MailChimpException;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.base.StudyProgrammeDAO;
import fi.otavanopisto.pyramus.dao.system.SettingDAO;
import fi.otavanopisto.pyramus.dao.system.SettingKeyDAO;
import fi.otavanopisto.pyramus.domainmodel.base.StudyProgramme;
import fi.otavanopisto.pyramus.domainmodel.system.Setting;
import fi.otavanopisto.pyramus.domainmodel.system.SettingKey;
import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledPluginTask;
import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledTaskException;
import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledTaskInterval;
public class MailChimpSynchronizationTask implements ScheduledPluginTask {
private static Logger logger = Logger.getLogger(MailChimpSynchronizationTask.class.getName());
@Override
public ScheduledTaskInterval getInternal() {
return ScheduledTaskInterval.HOUR;
}
@Override
public void execute() throws ScheduledTaskException {
SettingKeyDAO settingKeyDAO = DAOFactory.getInstance().getSettingKeyDAO();
SettingDAO settingDAO = DAOFactory.getInstance().getSettingDAO();
StudyProgrammeDAO studyProgrammeDAO = DAOFactory.getInstance().getStudyProgrammeDAO();
SettingKey apiKeySettingKey = settingKeyDAO.findByName("mailchimp.apiKey");
if (apiKeySettingKey != null) {
Setting apiKeySetting = settingDAO.findByKey(apiKeySettingKey);
if (apiKeySetting != null && StringUtils.isNotBlank(apiKeySetting.getValue())) {
logger.info("Synchronizing emails into MailChimp");
List<StudyProgramme> studyProgrammes = studyProgrammeDAO.listUnarchived();
MailChimpClient mailChimpClient = new MailChimpClient();
try {
for (StudyProgramme studyProgramme : studyProgrammes) {
MailChimpSyncResult syncResult = MailChimpSyncUtils.synchronizeStudyProgramme(mailChimpClient, apiKeySetting.getValue(), studyProgramme);
if (syncResult != null) {
logger.info("Synchronized studyProgramme " + studyProgramme.getName() + " emails into MailChimp");
for (MailChimpSyncError error : syncResult.getErrors()) {
logger.warning("Error occurred while synchronizing '" + error.getEmail() + "': " + error.getError());
}
logger.info("Synchronization result: Emails added : " + syncResult.getAdded() + ", updated: " + syncResult.getUpdated() + ", removed: " + syncResult.getRemoved());
}
}
} catch (IOException e) {
throw new ScheduledTaskException("Unknown error occurred while synchronizing emails into MailChimp", e);
} catch (MailChimpException e) {
throw new ScheduledTaskException("Unknown error occurred while synchronizing emails into MailChimp", e);
}
logger.info("MailChimp synchronization complete");
} else {
logger.warning("MailChimp API key missing");
}
} else {
logger.warning("MailChimp API key missing");
}
}
}