KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > crontab > CronEntryField


1 /*
2  This software is OSI Certified Open Source Software.
3 OSI Certified is a certification mark of the Open Source Initiative.
4
5 The license (Mozilla version 1.0) can be read at the MMBase site.
6 See http://www.MMBase.org/license
7  */

8 package org.mmbase.applications.crontab;
9
10
11 import java.util.*;
12
13 /**
14  * One the fields of the 'crontab' syntax, which is something like '*' or '* /5' or 5-23. See 'man 5 crontab'
15  *
16  * @author Kees Jongenburger
17  * @version $Id: CronEntryField.java,v 1.2 2006/01/02 22:01:39 michiel Exp $
18  */

19
20 public class CronEntryField {
21     private String JavaDoc content;
22
23     boolean[] valid = new boolean[60];
24
25     public CronEntryField() {
26     }
27
28     public CronEntryField(String JavaDoc content) {
29         setTimeVal(content);
30     }
31
32     /**
33      *
34      **/

35     public void setTimeVal(String JavaDoc content){
36         this.content = content;
37
38         for (int x =0 ; x < valid.length ; x++){
39             valid[x] = false;
40         }
41
42         StringTokenizer st = new StringTokenizer(content,",");
43         //entries of one field are seoarateed
44
while(st.hasMoreTokens()){
45             String JavaDoc subentry = st.nextToken();
46             parseEntry(subentry);
47         }
48     }
49
50     public void parseEntry(String JavaDoc subentry){
51         StringTokenizer st = new StringTokenizer(subentry,"/");
52         String JavaDoc timelist = st.nextToken();
53
54
55         int step =1;
56         if (st.hasMoreTokens()){
57             step = Integer.parseInt(st.nextToken());
58         }
59
60         //at this point timelist can be in a few formats
61
//"int" like 12
62
//"range" like 8-12
63
//"*" like "any", for simplicity we assume any are all the numbers
64
//under 60
65
if (timelist.indexOf("-") != -1){ // range
66
StringTokenizer rangeSplit = new StringTokenizer(timelist,"-");
67             String JavaDoc start = rangeSplit.nextToken();
68             String JavaDoc end = rangeSplit.nextToken();
69             for (int x = Integer.parseInt(start); x <= Integer.parseInt(end); x += step){
70                 valid[x] = true;
71             }
72         } else if (timelist.indexOf("*") != -1){//while card
73
for (int x =0 ; x < valid.length; x += step){
74                 valid[x]= true;
75             }
76         } else {
77             int number = Integer.parseInt(timelist);
78             valid[number] = true;
79         }
80     }
81
82     public boolean valid(int otherValue){
83         return valid[otherValue];
84     }
85
86     public int hashCode() {
87         return content.hashCode();
88     }
89
90     public boolean equals(Object JavaDoc o) {
91         if (! (o instanceof CronEntryField)) {
92             return false;
93         }
94         CronEntryField f = (CronEntryField) o;
95         return content.equals(f.content);
96     }
97 }
98
Popular Tags