001
014
015 package com.liferay.portal.scheduler.quartz;
016
017 import static com.liferay.portal.kernel.scheduler.SchedulerEngine.GROUP_NAME_MAX_LENGTH;
018 import static com.liferay.portal.kernel.scheduler.SchedulerEngine.JOB_NAME_MAX_LENGTH;
019
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.scheduler.SchedulerException;
023 import com.liferay.portal.kernel.scheduler.TriggerType;
024
025 import java.util.Date;
026
027 import org.quartz.CronScheduleBuilder;
028 import org.quartz.SimpleScheduleBuilder;
029 import org.quartz.SimpleTrigger;
030 import org.quartz.Trigger;
031 import org.quartz.TriggerBuilder;
032
033
036 public class QuartzTriggerHelperUtil {
037
038 public static Date getFireTimeAfter(
039 com.liferay.portal.kernel.scheduler.Trigger trigger, Date date)
040 throws SchedulerException {
041
042 Trigger quartzTrigger = getQuartzTrigger(trigger);
043
044 return quartzTrigger.getFireTimeAfter(date);
045 }
046
047 public static Trigger getQuartzTrigger(
048 com.liferay.portal.kernel.scheduler.Trigger trigger)
049 throws SchedulerException {
050
051 if (trigger == null) {
052 return null;
053 }
054
055 Date endDate = trigger.getEndDate();
056 String jobName = _fixMaxLength(
057 trigger.getJobName(), JOB_NAME_MAX_LENGTH);
058 String groupName = _fixMaxLength(
059 trigger.getGroupName(), GROUP_NAME_MAX_LENGTH);
060
061 Date startDate = trigger.getStartDate();
062
063 if (startDate == null) {
064 startDate = new Date(System.currentTimeMillis());
065 }
066
067 Trigger quartzTrigger = null;
068
069 TriggerType triggerType = trigger.getTriggerType();
070
071 if (triggerType.equals(TriggerType.CRON)) {
072 TriggerBuilder<Trigger>triggerBuilder = TriggerBuilder.newTrigger();
073
074 triggerBuilder.endAt(endDate);
075 triggerBuilder.forJob(jobName, groupName);
076 triggerBuilder.startAt(startDate);
077 triggerBuilder.withIdentity(jobName, groupName);
078
079 CronScheduleBuilder cronScheduleBuilder =
080 CronScheduleBuilder.cronSchedule(
081 (String)trigger.getTriggerContent());
082
083 triggerBuilder.withSchedule(cronScheduleBuilder);
084
085 quartzTrigger = triggerBuilder.build();
086 }
087 else if (triggerType.equals(TriggerType.SIMPLE)) {
088 long interval = (Long)trigger.getTriggerContent();
089
090 if (interval <= 0) {
091 if (_log.isDebugEnabled()) {
092 _log.debug(
093 "Not scheduling " + trigger.getJobName() +
094 " because interval is less than or equal to 0");
095 }
096
097 return null;
098 }
099
100 TriggerBuilder<Trigger>triggerBuilder = TriggerBuilder.newTrigger();
101
102 triggerBuilder.endAt(endDate);
103 triggerBuilder.forJob(jobName, groupName);
104 triggerBuilder.startAt(startDate);
105 triggerBuilder.withIdentity(jobName, groupName);
106
107 SimpleScheduleBuilder simpleScheduleBuilder =
108 SimpleScheduleBuilder.simpleSchedule();
109
110 simpleScheduleBuilder.withIntervalInMilliseconds(interval);
111 simpleScheduleBuilder.withRepeatCount(
112 SimpleTrigger.REPEAT_INDEFINITELY);
113
114 triggerBuilder.withSchedule(simpleScheduleBuilder);
115
116 quartzTrigger = triggerBuilder.build();
117 }
118 else {
119 throw new SchedulerException(
120 "Unknown trigger type " + trigger.getTriggerType());
121 }
122
123 return quartzTrigger;
124 }
125
126 protected static String _fixMaxLength(String argument, int maxLength) {
127 if (argument == null) {
128 return null;
129 }
130
131 if (argument.length() > maxLength) {
132 argument = argument.substring(0, maxLength);
133 }
134
135 return argument;
136 }
137
138 private static Log _log = LogFactoryUtil.getLog(
139 QuartzTriggerHelperUtil.class);
140
141 }