1 package hudson.scheduler; 2 3 import antlr.ANTLRException; 4 5 import java.io.StringReader ; 6 import java.util.Calendar ; 7 8 13 public final class CronTab { 14 22 final long[] bits = new long[4]; 23 24 int dayOfWeek; 25 26 public CronTab(String format) throws ANTLRException { 27 this(format,1); 28 } 29 30 public CronTab(String format, int line) throws ANTLRException { 31 CrontabLexer lexer = new CrontabLexer(new StringReader (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; } 39 40 41 44 boolean check(Calendar 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 62 private boolean checkBits(long bitMask, int n) { 63 return (bitMask|(1L<<n))==bitMask; 64 } 65 66 public String 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 toString(String key, long bit) { 76 return key+'='+Long.toHexString(bit); 77 } 78 } 79 | Popular Tags |