KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > hudson > scheduler > CronTab


1 package hudson.scheduler;
2
3 import antlr.ANTLRException;
4
5 import java.io.StringReader JavaDoc;
6 import java.util.Calendar JavaDoc;
7
8 /**
9  * Table for driving scheduled tasks.
10  *
11  * @author Kohsuke Kawaguchi
12  */

13 public final class CronTab {
14     /**
15      * bits[0]: minutes
16      * bits[1]: hours
17      * bits[2]: days
18      * bits[3]: months
19      *
20      * false:not scheduled <-> true scheduled
21      */

22     final long[] bits = new long[4];
23
24     int dayOfWeek;
25
26     public CronTab(String JavaDoc format) throws ANTLRException {
27         this(format,1);
28     }
29
30     public CronTab(String JavaDoc format, int line) throws ANTLRException {
31         CrontabLexer lexer = new CrontabLexer(new StringReader JavaDoc(format));
32         lexer.setLine(line);
33         CrontabParser parser = new CrontabParser(lexer);
34
35         parser.startRule(this);
36         if((dayOfWeek&(1<<7))!=0)
37             dayOfWeek |= 1; // copy bit 7 over to bit 0
38
}
39
40
41     /**
42      * Returns true if the given calendar matches
43      */

44     boolean check(Calendar JavaDoc cal) {
45         if(!checkBits(bits[0],cal.get(Calendar.MINUTE)))
46             return false;
47         if(!checkBits(bits[1],cal.get(Calendar.HOUR_OF_DAY)))
48             return false;
49         if(!checkBits(bits[2],cal.get(Calendar.DAY_OF_MONTH)))
50             return false;
51         if(!checkBits(bits[3],cal.get(Calendar.MONTH)+1))
52             return false;
53         if(!checkBits(dayOfWeek,cal.get(Calendar.DAY_OF_WEEK)-1))
54             return false;
55
56         return true;
57     }
58
59     /**
60      * Returns true if n-th bit is on.
61      */

62     private boolean checkBits(long bitMask, int n) {
63         return (bitMask|(1L<<n))==bitMask;
64     }
65
66     public String JavaDoc toString() {
67         return super.toString()+"["+
68             toString("minute",bits[0])+','+
69             toString("hour",bits[1])+','+
70             toString("dayOfMonth",bits[2])+','+
71             toString("month",bits[3])+','+
72             toString("dayOfWeek",dayOfWeek)+']';
73     }
74
75     private String JavaDoc toString(String JavaDoc key, long bit) {
76         return key+'='+Long.toHexString(bit);
77     }
78 }
79
Popular Tags