package org.openstack.atlas.scheduler;
import org.openstack.atlas.exception.SchedulingException;
import org.openstack.atlas.tools.QuartzSchedulerConfigs;
import org.quartz.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Map;
import java.util.Random;
import org.openstack.atlas.util.staticutils.StaticFileUtils;
public class JobScheduler {
private static SimpleDateFormat format = new SimpleDateFormat("HHmmss");
private Scheduler stdScheduler;
public JobScheduler() {
}
public JobScheduler(Scheduler scheduler) {
this.stdScheduler = scheduler;
}
public void scheduleJob(String uniqueJobName, Class jobClass, Map data) throws SchedulingException {
JobDetail statsJobDetail = new JobDetail(uniqueJobName, Scheduler.DEFAULT_GROUP, jobClass);
statsJobDetail.setDurability(true);
statsJobDetail.setVolatility(true);
statsJobDetail.getJobDataMap().putAll(data);
Trigger moveTrigger = TriggerUtils.makeImmediateTrigger(0, 0);
moveTrigger.setJobName(uniqueJobName);
moveTrigger.setName(uniqueJobName);
moveTrigger.setVolatility(true);
//RESCHEDULE IF THE TRIGGER EXIST
try {
stdScheduler.scheduleJob(statsJobDetail, moveTrigger);
} catch (SchedulerException e) {
throw new SchedulingException(e);
}
}
public void scheduleJob(String uniqueJobName, Class jobClass, QuartzSchedulerConfigs schedulerConfigs) throws SchedulingException {
scheduleJob(uniqueJobName, jobClass, schedulerConfigs.createMapOutputOfValues());
}
public void scheduleJob(Class jobClass, QuartzSchedulerConfigs schedulerConfigs) throws SchedulingException {
scheduleJob(createJobName(jobClass, schedulerConfigs), jobClass, schedulerConfigs.createMapOutputOfValues());
}
public void setSchedulerFactoryBean(Scheduler schedulerFactoryBean) {
this.stdScheduler = schedulerFactoryBean;
}
private String createJobName(Class jobClass, QuartzSchedulerConfigs schedulerConfigs) {
String shrunkName = jobClass.getName();
String totalName = StaticFileUtils.getRnd().nextLong() + "-" + shrunkName.substring(shrunkName.getClass().getPackage().getName().length() + 1)
+ schedulerConfigs.getInputString() + "_"
+ format.format(Calendar.getInstance().getTime());
if (totalName.length() > 78) {
totalName = totalName.substring(0, 78);
}
return totalName;
}
}