1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.kernel.scheduler;
16  
17  import com.liferay.portal.kernel.util.StringBundler;
18  import com.liferay.portal.kernel.util.StringPool;
19  
20  import java.util.Calendar;
21  
22  /**
23   * <a href="TriggerExpression.java.html"><b><i>View Source</i></b></a>
24   *
25   * @author Thiago Moreira
26   */
27  public class TriggerExpression {
28  
29      public final static int DAILY_FREQUENCY = 3;
30  
31      public final static int MINUTELY_FREQUENCY = 2;
32  
33      public final static int MONTHLY_FREQUENCY = 4;
34  
35      public final static int NO_FREQUENCY = 1;
36  
37      public final static int WEEKLY_FREQUENCY = 5;
38  
39      public final static int YEARLY_FREQUENCY = 6;
40  
41      public TriggerExpression(Calendar startDate) {
42          this(startDate, TriggerExpression.NO_FREQUENCY, 0);
43      }
44  
45      public TriggerExpression(Calendar startDate, int frequency, int interval) {
46          _startDate = startDate;
47          setFrequency(frequency);
48          _interval = interval;
49      }
50  
51      public int getFrequency() {
52          return _frequency;
53      }
54  
55      public int getInterval() {
56          return _interval;
57      }
58  
59      public Calendar getStartDate() {
60          return _startDate;
61      }
62  
63      public void setFrequency(int frequency) {
64          if ((frequency != TriggerExpression.DAILY_FREQUENCY) &&
65              (frequency != TriggerExpression.MINUTELY_FREQUENCY) &&
66              (frequency != TriggerExpression.MONTHLY_FREQUENCY) &&
67              (frequency != TriggerExpression.NO_FREQUENCY) &&
68              (frequency != TriggerExpression.WEEKLY_FREQUENCY) &&
69              (frequency != TriggerExpression.YEARLY_FREQUENCY)) {
70  
71              throw new IllegalArgumentException(String.valueOf(frequency));
72          }
73  
74          _frequency = frequency;
75      }
76  
77      public void setInterval(int interval) {
78          _interval = interval;
79      }
80  
81      public void setStartDate(Calendar startDate) {
82          _startDate = startDate;
83      }
84  
85      public String toCronText() {
86          String second = String.valueOf(_startDate.get(Calendar.SECOND));
87          String minute = String.valueOf(_startDate.get(Calendar.MINUTE));
88          String hour = String.valueOf(_startDate.get(Calendar.HOUR_OF_DAY));
89          String dayOfMonth =
90              String.valueOf(_startDate.get(Calendar.DAY_OF_MONTH));
91          String month = String.valueOf(_startDate.get(Calendar.MONTH) + 1);
92          String dayOfWeek = String.valueOf(_startDate.get(Calendar.DAY_OF_WEEK));
93          String year = String.valueOf(_startDate.get(Calendar.YEAR));
94  
95          if (_frequency == TriggerExpression.NO_FREQUENCY) {
96              dayOfWeek = StringPool.QUESTION;
97          }
98          else if (_frequency == TriggerExpression.MINUTELY_FREQUENCY) {
99              minute = StringPool.STAR + StringPool.FORWARD_SLASH + _interval;
100             hour = StringPool.STAR;
101             dayOfMonth = StringPool.STAR;
102             month = StringPool.STAR;
103             dayOfWeek = StringPool.QUESTION;
104             year = StringPool.STAR;
105         }
106         else if (_frequency == TriggerExpression.DAILY_FREQUENCY) {
107             dayOfMonth += StringPool.FORWARD_SLASH + _interval;
108             month = StringPool.STAR;
109             dayOfWeek = StringPool.QUESTION;
110             year = StringPool.STAR;
111         }
112         else if (_frequency == TriggerExpression.WEEKLY_FREQUENCY) {
113             dayOfMonth += StringPool.FORWARD_SLASH + (_interval * 7);
114             month = StringPool.STAR;
115             dayOfWeek = StringPool.QUESTION;
116             year = StringPool.STAR;
117         }
118         else if (_frequency == TriggerExpression.MONTHLY_FREQUENCY) {
119             month += StringPool.FORWARD_SLASH + _interval;
120             dayOfWeek = StringPool.QUESTION;
121             year = StringPool.STAR;
122         }
123         else if (_frequency == TriggerExpression.YEARLY_FREQUENCY) {
124             dayOfWeek = StringPool.QUESTION;
125             year += StringPool.FORWARD_SLASH + _interval;
126         }
127 
128         StringBundler sb = new StringBundler(13);
129 
130         sb.append(second);
131         sb.append(StringPool.SPACE);
132         sb.append(minute);
133         sb.append(StringPool.SPACE);
134         sb.append(hour);
135         sb.append(StringPool.SPACE);
136         sb.append(dayOfMonth);
137         sb.append(StringPool.SPACE);
138         sb.append(month);
139         sb.append(StringPool.SPACE);
140         sb.append(dayOfWeek);
141         sb.append(StringPool.SPACE);
142         sb.append(year);
143 
144         return sb.toString();
145     }
146 
147     private Calendar _startDate;
148     private int _frequency;
149     private int _interval;
150 
151 }