package ru.hflabs.rcd.service;
import ru.hflabs.rcd.model.task.TaskDefinition;
import ru.hflabs.rcd.model.task.TaskDescriptor;
import java.util.Map;
/**
* Интерфейс <class>ITaskDefinitionRepository</class> декларирует методы репозитория предопределенных задач
*
* @see TaskDefinition
*/
public interface ITaskDefinitionRepository extends IStorageService<TaskDefinition>, INamedPathService<String, TaskDefinition> {
/**
* Выполняет конвертацию параметров задач
*
* @param parametersClass ожидаемый класс задач
* @param parameters параметры
* @return Возвращает конвертированные параметры
*/
<T extends Map<String, Object>> T convertTaskParameters(Class<T> parametersClass, Map<String, Object> parameters);
/**
* Выполняет конвертацию результатов задач
*
* @param results результаты задачи
* @return Возвращает конвертированные результаты
*/
Map<String, Object> convertTaskResults(Map<String, Object> results);
/**
* Выполняет установку параметров дескриптора на основе предопределенных
*
* @param descriptor дескриптор задачи
* @return Возвращает модифицированный дескриптор
*/
TaskDescriptor populateParameters(TaskDescriptor descriptor);
/**
* Выполняет расчет следующей даты запуска для дескриптора
*
* @param descriptor дескриптор задачи
* @return Возвращает модифицированный дескриптор с установленной датой следующего запуска или <code>NULL</code>,
* если установлен флаг <i>quietly</i> и дату не удалось расчитать
*/
TaskDescriptor populateScheduleDate(TaskDescriptor descriptor);
/**
* Выполняет рассчет и установку динамических параметров
*
* @param descriptor дескриптор задачи
* @return Возвращает модифицированный дескриптор
*/
TaskDescriptor populate(TaskDescriptor descriptor);
}