All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blazebit.quartz.TriggerUtils Maven / Gradle / Ivy

There is a newer version: 0.1.14
Show newest version
/*
 * Copyright 2011 Blazebit
 */
package com.blazebit.quartz;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.quartz.CalendarIntervalScheduleBuilder;
import org.quartz.CalendarIntervalTrigger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.GroupMatcher;

/**
 * 
 * @author Christian Beikov
 * @since 0.1.2
 */
public class TriggerUtils {

	public static Trigger simple(String triggerName, String triggerGroup,
			JobDetail job, Map dataMap, Date start,
			Date end) {
		return simple(triggerName, triggerGroup, job.getKey().getName(), job
				.getKey().getGroup(), dataMap, start, end);
	}

	public static Trigger simple(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, Date start, Date end) {
		return simple(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				start, end, 0);
	}

	public static Trigger simple(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, Date start, Date end,
			int repeat) {
		TriggerBuilder tb = TriggerBuilder.newTrigger().forJob(
				jobName, jobGroup);

		if (triggerName != null && !triggerName.isEmpty()) {
			if (triggerGroup != null && !triggerGroup.isEmpty()) {
				tb.withIdentity(triggerName, triggerGroup);
			} else {
				tb.withIdentity(triggerName);
			}
		} else if (triggerGroup != null && !triggerGroup.isEmpty()) {
			tb.withIdentity(UUID.randomUUID().toString(), triggerGroup);
		}

		if (start == null || start.before(new Date())) {
			tb.startNow();
		} else {
			tb.startAt(start);
		}

		if (end != null && end.after(new Date())) {
			tb.endAt(end);
		}

		if (dataMap != null && !dataMap.isEmpty()) {
			tb.usingJobData(new JobDataMap(dataMap));
		}

		if (repeat > 0) {
			tb.withSchedule(SimpleScheduleBuilder.simpleSchedule()
					.withRepeatCount(repeat));
		}

		return tb.build();
	}

	public static Trigger second(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.SECOND, start, end);
	}

	public static Trigger minute(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.MINUTE, start, end);
	}

	public static Trigger hour(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.HOUR, start, end);
	}

	public static Trigger day(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.DAY, start, end);
	}

	public static Trigger week(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.WEEK, start, end);
	}

	public static Trigger month(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.MONTH, start, end);
	}

	public static Trigger year(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval, Date start,
			Date end) {
		return interval(triggerName, triggerGroup, jobName, jobGroup, dataMap,
				interval, IntervalUnit.YEAR, start, end);
	}

	public static Trigger cron(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, String cronExpression)
			throws ParseException {
		TriggerBuilder tb = TriggerBuilder.newTrigger()
				.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
				.forJob(jobName, jobGroup);

		if (triggerName != null && !triggerName.isEmpty()) {
			if (triggerGroup != null && !triggerGroup.isEmpty()) {
				tb.withIdentity(triggerName, triggerGroup);
			} else {
				tb.withIdentity(triggerName);
			}
		}

		if (dataMap != null && !dataMap.isEmpty()) {
			tb.usingJobData(new JobDataMap(dataMap));
		}

		return tb.build();
	}

	private static Trigger interval(String triggerName, String triggerGroup,
			String jobName, String jobGroup,
			Map dataMap, int interval,
			IntervalUnit unit, Date start, Date end) {
		TriggerBuilder tb = TriggerBuilder
				.newTrigger()
				.withSchedule(
						CalendarIntervalScheduleBuilder
								.calendarIntervalSchedule().withInterval(
										interval, unit))
				.forJob(jobName, jobGroup);

		if (triggerName != null && !triggerName.isEmpty()) {
			if (triggerGroup != null && !triggerGroup.isEmpty()) {
				tb.withIdentity(triggerName, triggerGroup);
			} else {
				tb.withIdentity(triggerName);
			}
		}

		if (start != null && start.after(new Date())) {
			tb.startAt(start);
		}

		if (end != null && end.after(new Date())) {
			tb.endAt(end);
		}

		if (dataMap != null && !dataMap.isEmpty()) {
			tb.usingJobData(new JobDataMap(dataMap));
		}

		return tb.build();
	}

	public static void schedule(Trigger trigger) throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		sched.scheduleJob(trigger);
	}

	public static void pause(Trigger trigger) throws SchedulerException {
		pause(trigger.getKey());
	}

	public static void pause(TriggerKey key) throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		sched.pauseTrigger(key);
	}

	public static void delete(Trigger trigger) throws SchedulerException {
		delete(trigger.getKey());
	}

	public static void delete(TriggerKey key) throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		sched.unscheduleJob(key);
	}

	public static void resume(Trigger trigger) throws SchedulerException {
		resume(trigger.getKey());
	}

	public static void resume(TriggerKey key) throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		sched.resumeTrigger(key);
	}

	public static Trigger.TriggerState getState(Trigger trigger)
			throws SchedulerException {
		return getState(trigger.getKey());
	}

	public static Trigger.TriggerState getState(TriggerKey key)
			throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		return sched.getTriggerState(key);
	}

	public static List getTriggers() throws SchedulerException {
		Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
		List triggerGroups = sched.getTriggerGroupNames();
		List triggers = new ArrayList();

		for (int i = 0; i < triggerGroups.size(); i++) {
			String name = triggerGroups.get(i);
			Set keys = sched.getTriggerKeys(GroupMatcher
					.triggerGroupEquals(name));
			Iterator iter = keys.iterator();

			while (iter.hasNext()) {
				triggers.add(sched.getTrigger(iter.next()));
			}
		}

		return triggers;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy