KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > oddjob > schedules > schedules > AfterSchedule


1 package org.oddjob.schedules.schedules;
2
3 import java.io.Serializable JavaDoc;
4 import java.util.Date JavaDoc;
5
6 import org.apache.log4j.Logger;
7 import org.oddjob.schedules.AbstractSchedule;
8 import org.oddjob.schedules.DateUtils;
9 import org.oddjob.schedules.Interval;
10 import org.oddjob.schedules.Schedule;
11 import org.oddjob.schedules.ScheduleContext;
12
13 /**
14  * @oddjob.description Schedule at a point in time immediately
15  * after the nested schedule.
16  * <p>
17  * This can be useful when wanting a schedule to begin at the end of an
18  * interval instead of the beginning.
19  *
20  * @oddjob.example
21  *
22  * <pre>
23  * &lt;after&gt;
24  * &lt;interval interval="00:20"/&gt;
25  * &lt;/after&gt;
26  * </code>
27  *
28  * @author Rob Gordon
29  */

30
31 final public class AfterSchedule extends AbstractSchedule implements Serializable JavaDoc {
32
33     private static final long serialVersionUID = 20050226;
34     
35     private static final Logger logger = Logger.getLogger(AfterSchedule.class);
36     
37     public Interval nextDue(ScheduleContext context) {
38         Date JavaDoc now = context.getDate();
39         if (getChildSchedule() == null) {
40             throw new IllegalStateException JavaDoc("After must have a child schedule.");
41         }
42         
43         logger.debug(this + ": in date is " + now);
44                 
45         Schedule child = getChildSchedule();
46         child.setLimits(getLimits());
47         Interval next = child.nextDue(context);
48         if (next == null) {
49             return null;
50         }
51         Date JavaDoc after = DateUtils.oneMillisAfter(next.getToDate());
52         if (after == null) {
53             return null;
54         }
55         return new Interval(after, after);
56     }
57 }
58
Popular Tags