package be.mentoringsystems.merke.persistence.hibernate; import be.mentoringsystems.merke.helper.ConversionHelper; import be.mentoringsystems.merke.model.QueryParams; import be.mentoringsystems.merke.model.db.Login; import be.mentoringsystems.merke.persistence.LoginDAO; import java.util.List; import java.util.UUID; import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; /** * * @author anthonyarents */ @Repository @SuppressWarnings("unchecked") public class LoginDAOImpl extends HibernateDAO implements LoginDAO { @Override public void save(final Login obj) { getHibernateTemplate().saveOrUpdate(obj); } @Override public Login getById(final UUID id) { final Login result = getHibernateTemplate().get(Login.class, id); return result; } @Override public Login getByUsername(final String username) { final DetachedCriteria criteria = DetachedCriteria.forClass(Login.class); criteria.add(Restrictions.eq("deleted", false)); criteria.add(Restrictions.eq("username", username)); List result = (List) getHibernateTemplate().findByCriteria(criteria); if(result.isEmpty()) { return null; } else { return result.get(0); } } private void addFilters(final DetachedCriteria criteria, final QueryParams queryParams) { final String search = ConversionHelper.toString(queryParams.getFilterValue("search")); if(!StringUtils.isEmpty(search)) { criteria.add( Restrictions.or( Restrictions.ilike("firstname", search, MatchMode.ANYWHERE), Restrictions.ilike("lastname", search, MatchMode.ANYWHERE), Restrictions.ilike("username", search, MatchMode.ANYWHERE) )); } } @Override public List getAll(final QueryParams queryParams) { final DetachedCriteria criteria = DetachedCriteria.forClass(Login.class); criteria.add(Restrictions.eq("deleted", false)); addFilters(criteria, queryParams); addSorting(criteria, queryParams); return (List) getHibernateTemplate().findByCriteria(criteria, queryParams.getStart(), queryParams.getLimit()); } @Override public Long getCount(final QueryParams queryParams) { final DetachedCriteria criteria = DetachedCriteria.forClass(Login.class); criteria.add(Restrictions.eq("deleted", false)); addFilters(criteria, queryParams); criteria.setProjection(Projections.rowCount()); List result = (List) getHibernateTemplate().findByCriteria(criteria); return result.get(0); } @Autowired public void init(SessionFactory factory) { setSessionFactory(factory); } }