package ru.hflabs.rcd.service;
import org.springframework.context.ApplicationEvent;
import ru.hflabs.rcd.RoleNames;
import ru.hflabs.rcd.model.document.Group;
import ru.hflabs.rcd.model.path.DictionaryNamedPath;
import ru.hflabs.rcd.model.rule.RecodeRuleSet;
import javax.annotation.security.RolesAllowed;
import java.util.Collection;
/**
* Интерфейс <class>IManagerService</class> декларирует методы сервиса, для работы с документами
*
* @see Group
* @see ru.hflabs.rcd.model.document.Dictionary
* @see ru.hflabs.rcd.model.document.Record
* @see ru.hflabs.rcd.model.rule.RecodeRule
*/
public interface IManagerService {
/**
* Выполняет создание/изменение коллекции групп справочников
*
* @param groups модифицируемая коллекция групп справочников
* @return Возвращает модифицированную коллекцию групп справочников
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<Group> storeGroups(Collection<Group> groups);
/**
* Возвращает все группы справочников
*
* @param path именованный путь справочника или <code>NULL</code>
* @return Возвращает все группы справочников
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<Group> dumpGroups(DictionaryNamedPath path);
/**
* Выполняет создание и изменение наборов правил перекодирования
*
* @param recodeRuleSets модифицируемые наборы правил
* @return Возвращает модифицированные правила
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<RecodeRuleSet> storeRecodeRuleSets(Collection<RecodeRuleSet> recodeRuleSets);
/**
* Выполняет растпространение события
*
* @param event событие
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
<T extends ApplicationEvent> void propagateEvent(T event);
}