001: /**
002: * EventsScheduler.java
003: * Created on 10.03.2003, 20:20:08 Alex
004: * Package: net.sf.memoranda
005: *
006: * @author Alex V. Alishevskikh, alex@openmechanics.net
007: * Copyright (c) 2003 Memoranda Team. http://memoranda.sf.net
008: */package net.sf.memoranda;
009:
010: import java.util.Calendar;
011: import java.util.Date;
012: import java.util.Timer;
013: import java.util.TimerTask;
014: import java.util.Vector;
015:
016: /**
017: *
018: */
019: /*$Id: EventsScheduler.java,v 1.4 2004/01/30 12:17:41 alexeya Exp $*/
020: public class EventsScheduler {
021:
022: static Vector _timers = new Vector();
023: static Vector _listeners = new Vector();
024:
025: static Timer changeDateTimer = new Timer();
026:
027: static {
028: addListener(new DefaultEventNotifier());
029: }
030:
031: public static void init() {
032: cancelAll();
033: //changeDateTimer.cancel();
034: Vector events = (Vector) EventsManager.getActiveEvents();
035: _timers = new Vector();
036: /*DEBUG*/System.out.println("----------");
037: for (int i = 0; i < events.size(); i++) {
038: Event ev = (Event) events.get(i);
039: Date evTime = ev.getTime();
040: /*DEBUG*/System.out.println((Calendar.getInstance())
041: .getTime());
042: // if (evTime.after(new Date())) {
043: if (evTime.after((Calendar.getInstance()).getTime())) {
044: EventTimer t = new EventTimer(ev);
045: t.schedule(new NotifyTask(t), ev.getTime());
046: _timers.add(t);
047: /*DEBUG*/System.out.println(ev.getTimeString());
048: }
049: }
050: /*DEBUG*/System.out.println("----------");
051: Date midnight = getMidnight();
052: changeDateTimer.schedule(new TimerTask() {
053: public void run() {
054: init();
055: this .cancel();
056: }
057: }, midnight);
058: notifyChanged();
059: }
060:
061: public static void cancelAll() {
062: for (int i = 0; i < _timers.size(); i++) {
063: EventTimer t = (EventTimer) _timers.get(i);
064: t.cancel();
065: }
066: }
067:
068: public static Vector getScheduledEvents() {
069: Vector v = new Vector();
070: for (int i = 0; i < _timers.size(); i++)
071: v.add(((EventTimer) _timers.get(i)).getEvent());
072: return v;
073: }
074:
075: public static Event getFirstScheduledEvent() {
076: if (!isEventScheduled())
077: return null;
078: Event e1 = ((EventTimer) _timers.get(0)).getEvent();
079: for (int i = 1; i < _timers.size(); i++) {
080: Event ev = ((EventTimer) _timers.get(i)).getEvent();
081: if (ev.getTime().before(e1.getTime()))
082: e1 = ev;
083: }
084: return e1;
085: }
086:
087: public static void addListener(EventNotificationListener enl) {
088: _listeners.add(enl);
089: }
090:
091: public static boolean isEventScheduled() {
092: return _timers.size() > 0;
093: }
094:
095: private static void notifyListeners(Event ev) {
096: for (int i = 0; i < _listeners.size(); i++)
097: ((EventNotificationListener) _listeners.get(i))
098: .eventIsOccured(ev);
099: }
100:
101: private static void notifyChanged() {
102: for (int i = 0; i < _listeners.size(); i++)
103: ((EventNotificationListener) _listeners.get(i))
104: .eventsChanged();
105: }
106:
107: private static Date getMidnight() {
108: Calendar cal = Calendar.getInstance();
109: cal.set(Calendar.HOUR_OF_DAY, 0);
110: cal.set(Calendar.MINUTE, 0);
111: cal.set(Calendar.SECOND, 0);
112: cal.set(Calendar.MILLISECOND, 0);
113: cal.add(Calendar.DAY_OF_MONTH, 1);
114: return cal.getTime();
115: }
116:
117: static class NotifyTask extends TimerTask {
118:
119: EventTimer _timer;
120:
121: public NotifyTask(EventTimer t) {
122: super ();
123: _timer = t;
124: }
125:
126: public void run() {
127: _timer.cancel();
128: _timers.remove(_timer);
129: notifyListeners(_timer.getEvent());
130: notifyChanged();
131: }
132: }
133:
134: static class EventTimer extends Timer {
135: Event _event;
136:
137: public EventTimer(Event ev) {
138: super ();
139: _event = ev;
140: }
141:
142: public Event getEvent() {
143: return _event;
144: }
145: }
146:
147: }
|