package edu.lmu.cs.headmaster.ws.dao; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.lmu.cs.headmaster.ws.dao.util.QueryBuilder; import edu.lmu.cs.headmaster.ws.domain.Grant; import edu.lmu.cs.headmaster.ws.types.GrantStatus; public class GrantDaoHibernateImpl extends HibernateDaoSupport implements GrantDao { @Override public Grant getGrantById(Long id) { return getHibernateTemplate().get(Grant.class, id); } @Override @SuppressWarnings("unchecked") public List<Grant> getGrants(String query, GrantStatus awarded, Boolean presented, int skip, int max) { return createGrantQuery(query, awarded, presented) .build(getSession()) .setFirstResult(skip) .setMaxResults(max) .list(); } @Override public Grant createGrant(Grant grant) { getHibernateTemplate().save(grant); return grant; } @Override public void createOrUpdateGrant(Grant grant) { getHibernateTemplate().saveOrUpdate(grant); } /** * Returns a base HQL query object (no pagination) for the given parameters * for grants. */ private QueryBuilder createGrantQuery(String query, GrantStatus awarded, Boolean presented) { // The desired return order is id. QueryBuilder builder = new QueryBuilder( "select g from Grant g", "order by id" ); if (query != null) { builder.clause("lower(g.facultyMentor) like lower(:query) or lower(g.title) like lower(:query)", "%" + query + "%"); } if (awarded != null) { builder.clause("g.awarded = :awarded", awarded); } if (presented != null) { builder.clause("g.presented = :presented", presented); } // All done. return builder; } }