package ru.hflabs.rcd.service.document;
import ru.hflabs.rcd.RoleNames;
import ru.hflabs.rcd.model.document.Field;
import ru.hflabs.rcd.model.path.MetaFieldNamedPath;
import ru.hflabs.rcd.service.IDocumentContextService;
import ru.hflabs.rcd.service.IDocumentService;
import ru.hflabs.rcd.service.IManyToOneService;
import javax.annotation.security.RolesAllowed;
import java.util.Collection;
import java.util.Set;
/**
* Интерфейс <class>IFieldService</class> декларирует методы для работы со значениями полей справочников
*
* @see Field
*/
public interface IFieldService extends IDocumentService<Field>, IManyToOneService<Field>, IDocumentContextService<MetaFieldNamedPath> {
/**
* @param relativeId идентификатор МЕТА-поля
* @param names коллекция имен
* @param fillTransitive флаг необходимости заполнения транзитивных зависимостей
* @return Возвращает коллекцию полей, которые содержат указанные {@link Field#name имена}
*/
@RolesAllowed(RoleNames.OPERATOR)
Collection<Field> findByNames(String relativeId, Set<String> names, boolean fillTransitive);
/**
* @param relativeId идентификатор МЕТА-поля
* @param values коллекция значений
* @param fillTransitive флаг необходимости заполнения транзитивных зависимостей
* @return Возвращает коллекцию полей, которые содержат указанные {@link Field#value значения}
*/
@RolesAllowed(RoleNames.OPERATOR)
Collection<Field> findByValues(String relativeId, Set<String> values, boolean fillTransitive);
/**
* @param metaFieldIDs коллекция идентификаторов МЕТА-полей
* @param fillTransitive флаг необходимости заполнения транзитивных зависимостей
* @return Возвращает коллекцию полей, которые привязаны к переданным идентификаторам МЕТА-полей
*/
@RolesAllowed(RoleNames.OPERATOR)
Collection<Field> findAllByMetaFields(Collection<String> metaFieldIDs, boolean fillTransitive);
/**
* Проверяет и возвращает <code>TRUE</code>, если существует поле, привязанного к указанному МЕТА-полю
*
* @param metaFieldId идентификатор МЕТА-поля
* @param value проверяемое значение
*/
@RolesAllowed(RoleNames.OPERATOR)
boolean isFieldExist(String metaFieldId, String value);
/**
* Проверяет и возвращает <code>TRUE</code>, если поле уникально
*
* @param field проверяемое поле
*/
@RolesAllowed(RoleNames.OPERATOR)
boolean isFieldUnique(Field field);
/**
* Проверяет и возвращает <code>TRUE</code>, если полей для указанного МЕТА-поля являются уникальными
*
* @param metaFieldId идентификатор МЕТА-поля
*/
@RolesAllowed(RoleNames.OPERATOR)
boolean isFieldsUnique(String metaFieldId);
}