/*
* Copyright 2011 Blazebit
*/
package com.blazebit.quartz;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.matchers.GroupMatcher;
/**
*
* @author Christian Beikov
* @since 0.1.2
*/
public class JobUtils {
public static void add(Scheduler sched, Class<? extends Job> clazz,
String jobName, String jobGroup,
Map<String, ? extends Object> dataMap) throws SchedulerException {
sched.addJob(create(clazz, jobName, jobGroup, dataMap, true), false);
}
public static void schedule(Scheduler sched, Class<? extends Job> clazz,
String jobName, String jobGroup,
Map<String, ? extends Object> dataMap) throws SchedulerException {
Trigger trigger = TriggerUtils.simple(null, null, jobName, jobGroup,
null, null, null);
schedule(sched, clazz, jobName, jobGroup, dataMap, trigger);
}
public static void schedule(Scheduler sched, Class<? extends Job> clazz,
String jobName, String jobGroup,
Map<String, ? extends Object> dataMap, Trigger trigger)
throws SchedulerException {
add(sched, clazz, jobName, jobGroup, dataMap);
TriggerUtils.schedule(trigger);
}
public static void pause(Scheduler sched, JobDetail job)
throws SchedulerException {
pause(sched, job.getKey());
}
public static void pause(Scheduler sched, JobKey key)
throws SchedulerException {
sched.pauseJob(key);
}
public static void resume(Scheduler sched, JobDetail job)
throws SchedulerException {
resume(sched, job.getKey());
}
public static void resume(Scheduler sched, JobKey key)
throws SchedulerException {
sched.resumeJob(key);
}
public static void delete(Scheduler sched, JobDetail job)
throws SchedulerException {
delete(sched, job.getKey());
}
public static void delete(Scheduler sched, JobKey key)
throws SchedulerException {
sched.deleteJob(key);
}
public static void trigger(Scheduler sched, JobDetail job)
throws SchedulerException {
trigger(sched, job.getKey());
}
public static void trigger(Scheduler sched, JobKey key)
throws SchedulerException {
sched.triggerJob(key);
}
public static List<JobDetail> getJobs(Scheduler sched)
throws SchedulerException {
List<JobDetail> jobDetails = new ArrayList<JobDetail>();
List<String> jobGroups = sched.getJobGroupNames();
for (int i = 0; i < jobGroups.size(); i++) {
String name = jobGroups.get(i);
Set<JobKey> keys = sched.getJobKeys(GroupMatcher
.jobGroupEquals(name));
Iterator<JobKey> iter = keys.iterator();
while (iter.hasNext()) {
jobDetails.add(sched.getJobDetail(iter.next()));
}
}
return jobDetails;
}
public static List<Trigger> getTriggers(Scheduler sched, JobDetail job)
throws SchedulerException {
return getTriggers(sched, job.getKey());
}
@SuppressWarnings("unchecked")
public static List<Trigger> getTriggers(Scheduler sched, JobKey key)
throws SchedulerException {
return (List<Trigger>) sched.getTriggersOfJob(key);
}
private static JobDetail create(Class<? extends Job> clazz, String jobName,
String jobGroup, Map<String, ? extends Object> dataMap,
boolean durable) throws SchedulerException {
return JobBuilder.newJob(clazz).withIdentity(jobName, jobGroup)
.usingJobData(new JobDataMap(dataMap)).storeDurably(durable)
.build();
}
}