/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.scheduler.quartz.internal;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.scheduler.TimeUnit;
import com.liferay.portal.kernel.scheduler.Trigger;
import com.liferay.portal.kernel.scheduler.TriggerFactory;
import com.liferay.portal.scheduler.quartz.QuartzTrigger;
import java.util.Date;
import org.osgi.service.component.annotations.Component;
import org.quartz.CalendarIntervalScheduleBuilder;
import org.quartz.CronScheduleBuilder;
import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.ScheduleBuilder;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
/**
* @author Tina Tian
*/
@Component(
enabled = false, immediate = true,
service = {QuartzTriggerFactory.class, TriggerFactory.class}
)
public class QuartzTriggerFactory implements TriggerFactory {
@Override
public Trigger createTrigger(
String jobName, String groupName, Date startDate, Date endDate,
int interval, TimeUnit timeUnit) {
if (interval < 0) {
if (_log.isWarnEnabled()) {
_log.warn(
"Not scheduling " + jobName + " because interval is less " +
"than 0");
}
return null;
}
if (interval <= 0) {
return createTrigger(
jobName, groupName, startDate, endDate, (ScheduleBuilder)null);
}
if (timeUnit == TimeUnit.MILLISECOND) {
SimpleScheduleBuilder simpleScheduleBuilder =
SimpleScheduleBuilder.simpleSchedule();
simpleScheduleBuilder.withIntervalInMilliseconds(interval);
simpleScheduleBuilder.withRepeatCount(
SimpleTrigger.REPEAT_INDEFINITELY);
return createTrigger(
jobName, groupName, startDate, endDate, simpleScheduleBuilder);
}
CalendarIntervalScheduleBuilder calendarIntervalScheduleBuilder =
CalendarIntervalScheduleBuilder.calendarIntervalSchedule();
calendarIntervalScheduleBuilder.withInterval(
interval, IntervalUnit.valueOf(timeUnit.name()));
return createTrigger(
jobName, groupName, startDate, endDate,
calendarIntervalScheduleBuilder);
}
@Override
public Trigger createTrigger(
String jobName, String groupName, Date startDate, Date endDate,
String cronExpression) {
return createTrigger(
jobName, groupName, startDate, endDate,
CronScheduleBuilder.cronSchedule(cronExpression));
}
@Override
public Trigger createTrigger(
Trigger trigger, Date startDate, Date endDate) {
org.quartz.Trigger wrappedTrigger =
(org.quartz.Trigger)trigger.getWrappedTrigger();
return createTrigger(
trigger.getJobName(), trigger.getGroupName(), startDate, endDate,
wrappedTrigger.getScheduleBuilder());
}
protected Trigger createTrigger(
String jobName, String groupName, Date startDate, Date endDate,
ScheduleBuilder<?> scheduleBuilder) {
if (startDate == null) {
startDate = new Date(System.currentTimeMillis());
}
TriggerBuilder<org.quartz.Trigger> triggerBuilder =
TriggerBuilder.newTrigger();
triggerBuilder.endAt(endDate);
triggerBuilder.forJob(jobName, groupName);
triggerBuilder.startAt(startDate);
triggerBuilder.withIdentity(jobName, groupName);
if (scheduleBuilder != null) {
triggerBuilder.withSchedule(scheduleBuilder);
}
return new QuartzTrigger(triggerBuilder.build());
}
private static final Log _log = LogFactoryUtil.getLog(
QuartzTriggerFactory.class);
}