package ru.hflabs.rcd.service;
import ru.hflabs.rcd.RoleNames;
import ru.hflabs.rcd.model.Identifying;
import ru.hflabs.rcd.model.criteria.FilterCriteria;
import javax.annotation.security.RolesAllowed;
import java.util.Collection;
import java.util.Set;
/**
* Интерфейс <class>IDocumentService</class> декларирует методы для работы с документами
*
* @see ru.hflabs.rcd.model.Essence
*/
public interface IDocumentService<E extends Identifying> extends IChangeService<E>, IFilterService<E> {
/**
* Обновляет документы
*
* @param newObjects коллекция документов для обновления
* @param oldObjects коллекция существующих документов
* @param needValidation флаг, указывающий на необходимость валидации обновляемых документов
* @return Возвращает коллекцию обновленных документов
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<E> update(Collection<E> newObjects, Collection<E> oldObjects, boolean needValidation);
/**
* Закрывает документы по их идентификаторам
*
* @param ids коллекция идентификаторов
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
void closeByIDs(Set<String> ids);
/**
* Выполняет закрытие документов по критерию
*
* @param criteria критерий отбора документов для закрытия
* @return Возвращает закрытые документы
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<E> closeByCriteria(FilterCriteria criteria);
/**
* Выполняет отмену закрытия документов
*
* @param ids идентификаторы документов
* @return Возвращает переоткрытые документы
*/
@RolesAllowed(RoleNames.ADMINISTRATOR)
Collection<E> reopen(Set<String> ids);
}