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