package fi.otavanopisto.pyramus.plugin.scheduler; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.Schedule; import javax.ejb.Singleton; import fi.otavanopisto.pyramus.plugin.PluginManager; import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledPluginTask; import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledTaskException; import fi.otavanopisto.pyramus.plugin.scheduler.ScheduledTaskInterval; @Singleton public class PluginScheduler { private static Logger logger = Logger.getLogger(PluginScheduler.class.getName()); @Schedule(minute = "0", hour = "0", dayOfMonth="1", persistent = false) public void fireMonthly() { executeTasks(ScheduledTaskInterval.MONTH); } @Schedule(minute = "0", hour = "0", dayOfWeek="0", persistent = false) public void fireWeekly() { executeTasks(ScheduledTaskInterval.WEEK); } @Schedule(minute = "0", hour = "0", persistent = false) public void executeDaily() { executeTasks(ScheduledTaskInterval.DAY); } @Schedule(minute = "0", hour = "*", persistent = false) public void executeHourly() { executeTasks(ScheduledTaskInterval.HOUR); } @Schedule(minute = "*/30", hour = "*", persistent = false) public void executeHalfHourly() { executeTasks(ScheduledTaskInterval.HALF_HOUR); } @Schedule(minute = "*/15", hour = "*", persistent = false) public void executeQuaterHourly() { executeTasks(ScheduledTaskInterval.QUATER_HOUR); } @Schedule(minute = "*/1", hour = "*", persistent = false) public void executeMinutely() { executeTasks(ScheduledTaskInterval.MINUTE); } private void executeTasks(ScheduledTaskInterval internal) { PluginManager pluginManager = PluginManager.getInstance(); if (pluginManager != null) { List<ScheduledPluginTask> scheduledTasks = pluginManager.getScheduledTasks(internal); if (scheduledTasks != null) { executeTasks(scheduledTasks); } } } private void executeTasks(List<ScheduledPluginTask> scheduledTasks) { for (ScheduledPluginTask scheduledTask : scheduledTasks) { try { scheduledTask.execute(); } catch (ScheduledTaskException e) { logger.log(Level.SEVERE, "Error occurred while exucting scheduled task.", e); } } } }