package ch.alv.components.data.repository;
import ch.alv.components.core.beans.Identifiable;
import ch.alv.components.core.search.ValuesProvider;
import ch.alv.components.data.DataLayerException;
import ch.alv.components.data.adapter.DataStoreAdapter;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* Default implementation of the {@link PagingRepository} interface.
*
* @since 1.0.0
*/
@SuppressWarnings("unchecked")
public class DefaultPagingRepository<TYPE extends Identifiable<ID>, ID extends Serializable> implements PagingRepository<TYPE, ID> {
private final Repository<TYPE, ID> listRepository;
public DefaultPagingRepository(DataStoreAdapter adapter) {
this.listRepository = new DefaultRepository<>(adapter);
}
@Override
public TYPE save(TYPE entity, Class<TYPE> entityClass) throws DataLayerException {
return listRepository.save(entity, entityClass);
}
@Override
public List<TYPE> save(Collection<TYPE> entities, Class<TYPE> entityClass) throws DataLayerException {
return listRepository.save(entities, entityClass);
}
@Override
public TYPE find(ID id, Class<TYPE> entityClass) throws DataLayerException {
return listRepository.find(id, entityClass);
}
@Override
public Page<TYPE> find(Pageable pageable, String searchName, ValuesProvider params, Class<TYPE> entityClass) throws DataLayerException {
return RepositoryHelper.createPage(pageable, listRepository.find(searchName, params, entityClass));
}
@Override
public Page<TYPE> find(Pageable pageable, Class<TYPE> entityClass) throws DataLayerException {
return RepositoryHelper.createPage(pageable, listRepository.find(entityClass));
}
@Override
public Page<TYPE> find(Pageable pageable, Collection<ID> ids, Class<TYPE> entityClass) throws DataLayerException {
return RepositoryHelper.createPage(pageable, listRepository.find(ids, entityClass)) ;
}
@Override
public void delete(ID id, Class<TYPE> entityClass) throws DataLayerException {
listRepository.delete(id, entityClass);
}
@Override
public void delete(Collection<ID> ids, Class<TYPE> entityClass) throws DataLayerException {
listRepository.delete(ids, entityClass);
}
}