package com.thinkbiganalytics.scheduler; /*- * #%L * thinkbig-scheduler-api * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Map; import java.util.TimeZone; /** * Scheduler interface */ public interface JobScheduler { void scheduleWithCronExpressionInTimeZone(JobIdentifier jobIdentifier, Runnable runnable, String cronExpression, TimeZone timeZone) throws JobSchedulerException; void scheduleWithCronExpression(JobIdentifier jobIdentifier, Runnable runnable, String cronExpression) throws JobSchedulerException; /** * Perform a single Job Execution at a given Start Time */ void schedule(JobIdentifier jobIdentifier, Runnable task, Date startTime) throws JobSchedulerException; /** * Schedule a single Job Execution at a given Start Time and Delay (i.e. wait 5 min and then run) * * @param jobIdentifier unique identifier for this job * @param runnable the Job Task * @param startTime Time to start the run without the delay * @param startDelay delay in milliseconds */ void scheduleWithFixedDelay(JobIdentifier jobIdentifier, Runnable runnable, Date startTime, long startDelay) throws JobSchedulerException; /** * Schedule a Job to run with a given delay. * * @param startDelay delay in milliseconds */ void scheduleWithFixedDelay(JobIdentifier jobIdentifier, Runnable runnable, long startDelay) throws JobSchedulerException; /** * Schedule a Job to run with a specific interval starting at a specific time * * @param runnable the Job Task * @param startTime time to start the Job * @param period interval in milliseconds */ void scheduleAtFixedRate(JobIdentifier jobIdentifier, Runnable runnable, Date startTime, long period) throws JobSchedulerException; /** * Schedule a Job to run with a specific interval starting now * * @param jobIdentifier a job identifier * @param runnable a runnable task * @param period interval in millis */ void scheduleAtFixedRate(JobIdentifier jobIdentifier, Runnable runnable, long period) throws JobSchedulerException; /** * Return the next fire time for a cron expression * * @param cronExpression a cron expression * @return the next fire time */ Date getNextFireTime(String cronExpression) throws ParseException; /** * Return the next fire time for a cron expression from a previous fire time * * @param lastFireTime a previous fire time * @param cronExpression a cron expression * @return the next fire time, relative to the lastFireTime */ Date getNextFireTime(Date lastFireTime, String cronExpression) throws ParseException; /** * Return a list of the next fire times for a cron expression * * @param cronExpression a cron expression * @param count the number of dates to return * @return a list of dates */ List<Date> getNextFireTimes(String cronExpression, Integer count) throws ParseException; /** * Return the previous fire time for a cron expression * * @param cronExpression a cron expression * @return the previous fire time */ Date getPreviousFireTime(String cronExpression) throws ParseException; /** * Return the previous time from lastFireTime for a cron expression * * @param lastFireTime the previous fire time * @param cronExpression a cron expression * @return the previous time from lastFireTime for a cron expression */ Date getPreviousFireTime(Date lastFireTime, String cronExpression) throws ParseException; /** * Return a list of previous fire times for a cron expression * * @param cronExpression a cron expression * @param count the number of dates to return * @return a list of previous fire times for a cron expression */ List<Date> getPreviousFireTimes(String cronExpression, Integer count) throws ParseException; /** * Start the Scheduler after it has been Paused */ void startScheduler() throws JobSchedulerException; /** * Pause the Scheduler and Halts the firing of all Triggers. */ void pauseScheduler() throws JobSchedulerException; /** * Pause all */ void pauseAll() throws JobSchedulerException; /** * Resume all jobs and triggers */ void resumeAll() throws JobSchedulerException; /** * Manually Trigger a specific Job * * @param jobIdentifier a job identifier */ void triggerJob(JobIdentifier jobIdentifier) throws JobSchedulerException; /** * Pause a given Trigger * * @param triggerIdentifier a trigger identifier */ void pauseTrigger(TriggerIdentifier triggerIdentifier) throws JobSchedulerException; /** * Resume a give Trigger * * @param triggerIdentifier a trigger identifier */ void resumeTrigger(TriggerIdentifier triggerIdentifier) throws JobSchedulerException; /** * pause a given job * * @param jobIdentifier a job identifier */ void pauseTriggersOnJob(JobIdentifier jobIdentifier) throws JobSchedulerException; /** * resume a given job * * @param jobIdentifier a job identifier */ void resumeTriggersOnJob(JobIdentifier jobIdentifier) throws JobSchedulerException; /** * Update a Triggers Cron Expression * * @param triggerIdentifier a trigger identifier * @param cronExpression an updated cron expression */ void updateTrigger(TriggerIdentifier triggerIdentifier, String cronExpression) throws JobSchedulerException; /** * Delete a Job * * @param jobIdentifier a job identifier */ void deleteJob(JobIdentifier jobIdentifier) throws JobSchedulerException; /** * Return a list of jobs scheduled * * @return a list of jobs scheduled */ List<JobInfo> getJobs() throws JobSchedulerException; /** * Return Metadata and properties about the schedule * * @return Metadata and properties about the schedule */ Map<String, Object> getMetaData() throws JobSchedulerException; /** * Listen when schedule events are fired. * * @param listener a scheduler listener */ void subscribeToJobSchedulerEvents(JobSchedulerListener listener); }