01: package vqwiki;
02:
03: import org.apache.log4j.Logger;
04: import vqwiki.file.FileChangeLog;
05: import vqwiki.file.FileReminders;
06: import vqwiki.utils.WikiRemindFilter;
07:
08: import java.io.File;
09: import java.io.FilenameFilter;
10: import java.util.Date;
11: import java.util.Timer;
12: import java.util.TimerTask;
13:
14: /**
15: * A monitor which should persistently run on the VQWiki server.
16: * It schedules a new process once every 24 hours to check all
17: * WikiReminder files for the presence of scheduled reminders, which
18: * it then send via email to the registered recipient(s). The time
19: * of day at which the recurring process runs is dependent upon the
20: * time at which the program was instantiated.
21: *
22: * @author Robert E Brewer
23: * @version 0.1
24: */
25: public class ReminderMonitor {
26:
27: private static final long ONE_DAY = 1000 * 60 * 60 * 24;
28: protected static Logger logger = Logger
29: .getLogger(ReminderMonitor.class);
30:
31: /**
32: * Creates a new ReminderMonitor object and notifies the operator.
33: */
34: public static void main(String[] argv) {
35: new ReminderMonitor();
36: logger.info("The VQWiki Reminder Monitor is running...");
37: }
38:
39: /**
40: * Schedules a sendReminderTask at a fixed rate of 24 hours.
41: */
42: public ReminderMonitor() {
43: Timer timer = new Timer();
44: sendReminderTask aTask = new sendReminderTask();
45: timer.scheduleAtFixedRate(aTask, 0, ONE_DAY);
46: }
47:
48: /**
49: * Analyzes reminder files (".rmd") and sends scheduled reminders via email
50: * to registered addresses.
51: */
52: class sendReminderTask extends TimerTask {
53:
54: /**
55: *
56: */
57: public void run() {
58: Date todaysDate = new Date();
59: FilenameFilter remindFilter = new WikiRemindFilter();
60: File dir = new File(Environment.getInstance().getHomeDir());
61: File[] reminderFiles = dir.listFiles(remindFilter);
62: if (reminderFiles != null) {
63: for (int i = 0; i < reminderFiles.length; i++) {
64: if (reminderFiles[i].isFile()) {
65: try {
66: Reminders aReminder = new FileReminders(
67: reminderFiles[i]);
68: aReminder.sendReminders(todaysDate);
69: } catch (Exception e) {
70: e.printStackTrace();
71: }
72: }
73: }
74: }
75: }
76: }
77: }
|