| /** |
| * |
| * 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; |
| } |
| |
| } |