package ru.hflabs.rcd.service;
import ru.hflabs.rcd.model.Identifying;
import ru.hflabs.rcd.model.criteria.CriteriaHolder;
import ru.hflabs.util.core.Three;
import java.util.Collection;
/**
* Интерфейс <class>IQueryProvider</class> декларирует методы провайдера выполнения запросов
*
* @see ICriteriaBuilder
* @see CriteriaHolder
*/
public interface IQueryProvider<E extends Identifying, C extends CriteriaHolder<?>> {
/**
* Выполняет поиск документов по подготовленному критерию
*
* @param criteria критерий поиска
* @param offset смещение относительно начала объектов
* @param count количество запрашиваемых объектов
* @return Возвращает результат фильтрации, состоящий из коллекции найденных документов, количества документов по фильтру, общего количества документов
*/
Three<Collection<E>, Integer, Integer> executeByCriteria(C criteria, int offset, int count);
/**
* Возвращает количество документов по подготовленному критерию
*
* @param criteria критерий поиска
* @return Возвращает количество найденных документов
*/
Integer executeCountByCriteria(C criteria);
}