package qa.qcri.aidr.manager.repository.impl;
import java.io.Serializable;
import java.net.URLDecoder;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.ScrollableResults;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import qa.qcri.aidr.manager.persistence.entities.UserAccount;
import qa.qcri.aidr.manager.repository.UserAccountRepository;
@Repository("userRepository")
public class UserAccountRepositoryImpl extends GenericRepositoryImpl<UserAccount,Serializable> implements UserAccountRepository {
@Override
public UserAccount fetchByUsername(String username) {
Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(UserAccount.class);
criteria.add(Restrictions.eq("userName", username));
return (UserAccount) criteria.uniqueResult();
}
@Override
public UserAccount getById(Long id) {
Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(UserAccount.class);
criteria.add(Restrictions.eq("id", id));
return (UserAccount) criteria.uniqueResult();
}
@Override
public List<UserAccount> getUsers(String query, Integer start, Integer limit) {
Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(UserAccount.class);
if (StringUtils.hasText(query)){
String wildcard ='%'+ URLDecoder.decode(query.trim())+'%';
criteria.add(Restrictions.ilike("userName", wildcard));
}
if (start != null) {
criteria.setFirstResult(start);
}
if (limit != null) {
criteria.setMaxResults(limit);
}
return (List<UserAccount>) criteria.list();
}
@Override
public Long getUsersCount(String query) {
Criteria criteria = getHibernateTemplate().getSessionFactory().getCurrentSession().createCriteria(UserAccount.class);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
if (StringUtils.hasText(query)){
String wildcard ='%'+ URLDecoder.decode(query.trim())+'%';
criteria.add(Restrictions.ilike("userName", wildcard));
}
ScrollableResults scroll = criteria.scroll();
int i = scroll.last() ? scroll.getRowNumber() + 1 : 0;
return Long.valueOf(i);
}
}