blob: 8469c2bf6668be1249c5edd1984a0882b8a0cea2 [file] [log] [blame]
/**
*
* Copyright (c) 2011, 2018 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
*/
package org.eclipse.osbp.xtext.signal.common;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.CronScheduleBuilder.dailyAtHourAndMinute;
import static org.quartz.CronScheduleBuilder.monthlyOnDayAndHourAndMinute;
import static org.quartz.CronScheduleBuilder.weeklyOnDayAndHourAndMinute;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.ArrayList;
import java.util.Date;
import org.eclipse.osbp.xtext.datainterchange.common.WorkerThreadRunnable;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OSBPSignalScheduler extends OSBPSignalCommonData {
public Logger log = LoggerFactory.getLogger("scheduler");
private Scheduler scheduler;
/**
* Constructor
* @throws SchedulerException possible thrown exception
*/
public OSBPSignalScheduler() throws SchedulerException {
initScheduler();
}
/**
* Initializes the {@link #scheduler} field.
* @throws SchedulerException possible thrown exception
*/
public void initScheduler() throws SchedulerException {
log.info("Initializes scheduler ...");
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
}
/**
* Starts the {@link #scheduler}.
* @throws SchedulerException
*/
public void startScheduler() throws SchedulerException {
log.info("Starts scheduler ...");
scheduler.start();
}
/**
* Halts the Scheduler's firing of Triggers, and cleans up all resources
* associated with the Scheduler.
*
* @param waitForJobsToComplete
* whether or not the scheduler shuts down immediately or wait
* for jobs to finish.
* @throws SchedulerException
*/
public void shutdownScheduler(boolean waitForJobsToComplete) throws SchedulerException {
log.info("Shutdowns scheduler ...");
scheduler.shutdown(waitForJobsToComplete);
}
public void pauseScheduler() throws SchedulerException {
log.info("Pauses scheduler ...");
scheduler.pauseAll();
}
public void resumeScheduler() throws SchedulerException {
log.info("Resumes scheduler ...");
scheduler.resumeAll();
}
/**
* Schedules a given job based on a given trigger.
* @param job the {@link JobDetail} to be scheduled
* @param trigger the corresponding trigger
* @return
*/
public Date scheduleJob(JobDetail job, Trigger trigger) {
try {
return scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
return null;
}
/**
* Unschedules a job.
* @param triggerkey the trigger key.
*/
public void unscheduleJob(TriggerKey triggerkey) {
try {
scheduler.unscheduleJob(triggerkey);
} catch (SchedulerException e1) {
e1.printStackTrace();
}
}
/**
* Creates a job based on the given list of tasks.
* @param name Job name
* @param groupname Group name
* @param description Description of the job
* @param issequential Execution type of the given lsit of tasks
* @param takslist List of tasks, for now only Datainterchange import/export-Funktionnen.
* @return {@link JobDetail} the newly created Job.
*/
public JobDetail createDataTransferJob(String name, String groupname, String description, boolean issequential,
ArrayList<WorkerThreadRunnable> takslist) {
JobDetail job = newJob(OSBPSignalJob.class).usingJobData(OSBPSignalConstants.SEQUENTIAL, issequential)
.withDescription(description).withIdentity(name, groupname).build();
job.getJobDataMap().putIfAbsent(OSBPSignalConstants.TASKSLIST, takslist);
return job;
}
/**
* Creates an hourly based trigger.
* @param name Trigger name
* @param groupname Group name
* @param minute The exact minute, in which the trigger is hourly fired (0-59).
* @return {@link CronTrigger} the newly created trigger.
*/
public CronTrigger createHourlyTrigger(String name, String groupname, int minute) {
log.debug("Creating createHourlyTrigger [" + name + "] for group [" + groupname
+ "] running hourly at [" + minute + "] minutes ...");
CronTrigger trigger = newTrigger().withIdentity(name, groupname)
.withSchedule(cronSchedule(String.format("0 %s * * * ?", minute))).build();
log.debug("createHourlyTrigger " + trigger + " successfully created.");
return trigger;
}
/**
* Creates a daily based trigger.
* @param name Trigger name
* @param groupname Group name
* @param hour The exact hour, in which the trigger is daily fired (0-23).
* @param minute The exact minute, in which the trigger is hourly in a day fired (0-59).
* @return {@link CronTrigger} the newly created trigger.
*/
public CronTrigger createDailyTriggerAtHourandMins(String name, String groupname, int hour, int minute) {
log.debug("Creating DailyTrigger [" + name + "] for group [" + groupname + "] running at hour[" + hour
+ "] and [" + minute + "] minutes ...");
CronTrigger trigger = newTrigger().withIdentity(name, groupname)
.withSchedule(dailyAtHourAndMinute(hour, minute)).build();
log.debug("DailyTrigger " + trigger + " successfully created.");
return trigger;
}
/**
* Creates a weekly based trigger.
* @param name Trigger name
* @param groupname Group name
* @param dayOfWeek The day of the week on which the trigger has to be fired (0-6 for Sunday-Saturday).
* @param hour The exact hour, in which the trigger is daily fired (0-23).
* @param minute The exact minute, in which the trigger is hourly in a day fired (0-59).
* @return {@link CronTrigger} the newly created trigger.
*/
public CronTrigger createWeeklyTriggerOnDayAndHourAndMinute(String name, String groupname, int dayOfWeek, int hour, int minute) {
log.debug("Creating Trigger [" + name + "] for group [" + groupname + "] ...");
CronTrigger trigger = newTrigger().withIdentity(name, groupname).withSchedule(weeklyOnDayAndHourAndMinute(dayOfWeek, hour, minute)).build();
log.debug("Trigger " + trigger + " successfully created.");
return trigger;
}
/**
* Creates a monthly based trigger.
* @param name Trigger name
* @param groupname Group name
* @param dayOfMonth The day of the month on which the trigger has to be fired (1-31).
* @param hour The exact hour, in which the trigger is daily fired (0-23).
* @param minute The exact minute, in which the trigger is hourly in a day fired (0-59).
* @return {@link CronTrigger} the newly created trigger.
*/
public CronTrigger createMonthlyTriggerOnDayAndHourAndMinute(String name, String groupname, int dayOfMonth, int hour, int minute) {
log.debug("Creating MonthlyTrigger["+name+"] for group [" + groupname + "] on Day["+dayOfMonth+"] and Hour["+hour+"] and ["+minute+"]Minute...");
CronTrigger trigger = newTrigger().withIdentity(name, groupname).withSchedule(monthlyOnDayAndHourAndMinute(dayOfMonth, hour, minute)).build();
log.debug("MonthlyTrigger " + trigger + " successfully created.");
return trigger;
}
/**
* Creates a cron based trigger, depending on the given cron-expression.
* @param name Trigger name
* @param groupname Group name
* @param expression the {@link CronExpression} as string value
* @return {@link CronTrigger} the newly created cron-trigger.
*/
public CronTrigger createCronTrigger(String name, String groupname, String expression) {
log.debug("Creating CronTrigger [" + name + "] for group [" + groupname + "] with CronExpression [" + expression
+ "]...");
CronTrigger trigger = newTrigger().withIdentity(name, groupname).withSchedule(cronSchedule(expression)).build();
log.debug("CronTrigger " + trigger + " successfully created.");
return trigger;
}
}