001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.kernel.scheduler;
016    
017    import com.liferay.portal.kernel.util.StringBundler;
018    import com.liferay.portal.kernel.util.StringPool;
019    
020    import java.util.Calendar;
021    
022    /**
023     * @author Thiago Moreira
024     */
025    public class CronText {
026    
027            public static final int DAILY_FREQUENCY = 3;
028    
029            public static final int MINUTELY_FREQUENCY = 2;
030    
031            public static final int MONTHLY_FREQUENCY = 4;
032    
033            public static final int NO_FREQUENCY = 1;
034    
035            public static final int WEEKLY_FREQUENCY = 5;
036    
037            public static final int YEARLY_FREQUENCY = 6;
038    
039            public CronText(Calendar startDate) {
040                    this(startDate, CronText.NO_FREQUENCY, 0);
041            }
042    
043            public CronText(Calendar startDate, int frequency, int interval) {
044                    _startDate = startDate;
045                    setFrequency(frequency);
046                    _interval = interval;
047            }
048    
049            public int getFrequency() {
050                    return _frequency;
051            }
052    
053            public int getInterval() {
054                    return _interval;
055            }
056    
057            public Calendar getStartDate() {
058                    return _startDate;
059            }
060    
061            public void setFrequency(int frequency) {
062                    if ((frequency != CronText.DAILY_FREQUENCY) &&
063                            (frequency != CronText.MINUTELY_FREQUENCY) &&
064                            (frequency != CronText.MONTHLY_FREQUENCY) &&
065                            (frequency != CronText.NO_FREQUENCY) &&
066                            (frequency != CronText.WEEKLY_FREQUENCY) &&
067                            (frequency != CronText.YEARLY_FREQUENCY)) {
068    
069                            throw new IllegalArgumentException(String.valueOf(frequency));
070                    }
071    
072                    _frequency = frequency;
073            }
074    
075            public void setInterval(int interval) {
076                    _interval = interval;
077            }
078            public void setStartDate(Calendar startDate) {
079                    _startDate = startDate;
080            }
081            public String toString() {
082                    String second = String.valueOf(_startDate.get(Calendar.SECOND));
083                    String minute = String.valueOf(_startDate.get(Calendar.MINUTE));
084                    String hour = String.valueOf(_startDate.get(Calendar.HOUR_OF_DAY));
085                    String dayOfMonth = String.valueOf(
086                            _startDate.get(Calendar.DAY_OF_MONTH));
087                    String month = String.valueOf(_startDate.get(Calendar.MONTH) + 1);
088                    String dayOfWeek = String.valueOf(_startDate.get(Calendar.DAY_OF_WEEK));
089                    String year = String.valueOf(_startDate.get(Calendar.YEAR));
090    
091                    if (_frequency == CronText.NO_FREQUENCY) {
092                            dayOfWeek = StringPool.QUESTION;
093                    }
094                    else if (_frequency == CronText.MINUTELY_FREQUENCY) {
095                            minute = StringPool.STAR + StringPool.FORWARD_SLASH + _interval;
096                            hour = StringPool.STAR;
097                            dayOfMonth = StringPool.STAR;
098                            month = StringPool.STAR;
099                            dayOfWeek = StringPool.QUESTION;
100                            year = StringPool.STAR;
101                    }
102                    else if (_frequency == CronText.DAILY_FREQUENCY) {
103                            dayOfMonth += StringPool.FORWARD_SLASH + _interval;
104                            month = StringPool.STAR;
105                            dayOfWeek = StringPool.QUESTION;
106                            year = StringPool.STAR;
107                    }
108                    else if (_frequency == CronText.WEEKLY_FREQUENCY) {
109                            dayOfMonth += StringPool.FORWARD_SLASH + (_interval * 7);
110                            month = StringPool.STAR;
111                            dayOfWeek = StringPool.QUESTION;
112                            year = StringPool.STAR;
113                    }
114                    else if (_frequency == CronText.MONTHLY_FREQUENCY) {
115                            month += StringPool.FORWARD_SLASH + _interval;
116                            dayOfWeek = StringPool.QUESTION;
117                            year = StringPool.STAR;
118                    }
119                    else if (_frequency == CronText.YEARLY_FREQUENCY) {
120                            dayOfWeek = StringPool.QUESTION;
121                            year += StringPool.FORWARD_SLASH + _interval;
122                    }
123    
124                    StringBundler sb = new StringBundler(13);
125    
126                    sb.append(second);
127                    sb.append(StringPool.SPACE);
128                    sb.append(minute);
129                    sb.append(StringPool.SPACE);
130                    sb.append(hour);
131                    sb.append(StringPool.SPACE);
132                    sb.append(dayOfMonth);
133                    sb.append(StringPool.SPACE);
134                    sb.append(month);
135                    sb.append(StringPool.SPACE);
136                    sb.append(dayOfWeek);
137                    sb.append(StringPool.SPACE);
138                    sb.append(year);
139    
140                    return sb.toString();
141            }
142    
143            private int _frequency;
144            private int _interval;
145            private Calendar _startDate;
146    
147    }