/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.scheduler;
import java.util.Collection;
import java.util.SortedMap;
import org.openmrs.annotation.Authorized;
import org.openmrs.annotation.Logging;
import org.openmrs.api.OpenmrsService;
import org.openmrs.util.OpenmrsMemento;
/**
* Defines methods required to schedule a task.
*/
public interface SchedulerService extends OpenmrsService {
/**
* Checks the status of a scheduled task.
*
* @param id
* @return the <code>String</code> status of the task with the given identifier
*/
@Authorized( { "Manage Scheduler" })
public String getStatus(Integer id);
/**
* Start all tasks that are scheduled to run on startup.
*/
@Override
@Authorized( { "Manage Scheduler" })
public void onStartup();
/**
* Stop all tasks and clean up the scheduler instance.
*/
@Override
@Authorized( { "Manage Scheduler" })
public void onShutdown();
/**
* Cancel a scheduled task.
*
* @param task the <code>TaskDefinition</code> for the task to cancel
*/
@Authorized( { "Manage Scheduler" })
public void shutdownTask(TaskDefinition task) throws SchedulerException;
/**
* Start a scheduled task as specified in a TaskDefinition.
*
* @param task TaskDefinition to start
* @return the started <code>Task</code>, or null if there was a problem instantiating or
* scheduling the task
*/
@Authorized( { "Manage Scheduler" })
public Task scheduleTask(TaskDefinition task) throws SchedulerException;
/**
* Stop and start a scheduled task.
*
* @param task the <code>TaskDefinition</code> to reschedule
*/
@Authorized( { "Manage Scheduler" })
public Task rescheduleTask(TaskDefinition task) throws SchedulerException;
/**
* Loop over all currently started tasks and cycle them. This should be done after the
* classloader has been changed (e.g. during module start/stop)
*/
@Authorized( { "Manage Scheduler" })
public void rescheduleAllTasks() throws SchedulerException;
/**
* Get scheduled tasks.
*
* @return all scheduled tasks
*/
@Authorized( { "Manage Scheduler" })
public Collection<TaskDefinition> getScheduledTasks();
/**
* Get the list of tasks that are available to be scheduled. Eventually, these should go in the
* database.
*
* @return all available tasks
*/
@Authorized( { "Manage Scheduler" })
public Collection<TaskDefinition> getRegisteredTasks();
/**
* Get the task with the given identifier.
*
* @param id the identifier of the task
*/
@Authorized( { "Manage Scheduler" })
public TaskDefinition getTask(Integer id);
/**
* Get the task with the given name.
*
* @param name name of the task
*/
@Authorized( { "Manage Scheduler" })
public TaskDefinition getTaskByName(String name);
/**
* Delete the task with the given identifier.
*
* @param id the identifier of the task
*/
@Authorized( { "Manage Scheduler" })
public void deleteTask(Integer id);
/**
* Create the given task
*
* @param task the task to be created
* @should save task to the database
*/
@Authorized( { "Manage Scheduler" })
@Logging(ignore = true)
public void saveTaskDefinition(TaskDefinition task);
/**
* Return SchedulerConstants
*
* @return SortedMap<String, String>
*/
public SortedMap<String, String> getSystemVariables();
/**
* Save the state of the scheduler service to Memento
*
* @return OpenmrsMemento that contains data about this serive.
*/
public OpenmrsMemento saveToMemento();
/**
* Restore the scheduler service to state defined by Memento
*
* @param memento
*/
public void restoreFromMemento(OpenmrsMemento memento);
/**
* Schedules a task for execution if not already running
* @param taskDef
* @since 1.10
*/
public void scheduleIfNotRunning(TaskDefinition taskDef);
}