package org.mifos.rest.approval.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.mifos.rest.approval.domain.ApprovalState;
import org.mifos.rest.approval.domain.RESTApprovalEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class HibernateApprovalDao implements ApprovalDao {
@Autowired
SessionFactory sessionFactory;
@Override
public void create(RESTApprovalEntity entity) {
getSession().save(entity);
}
@Override
public RESTApprovalEntity getDetails(Long id) {
return (RESTApprovalEntity) getSession().get(RESTApprovalEntity.class, id);
}
@Override
public void update(RESTApprovalEntity entity) {
getSession().update(entity);
}
@SuppressWarnings("unchecked")
@Override
public List<RESTApprovalEntity> getDetailsAll() {
return getSession().createCriteria(RESTApprovalEntity.class).list();
}
@SuppressWarnings("unchecked")
@Override
public List<RESTApprovalEntity> findByState(ApprovalState state) {
return getSession().createCriteria(RESTApprovalEntity.class)
.add(Restrictions.eq("state", state))
.addOrder(Order.desc("createdOn"))
.list();
}
@SuppressWarnings("unchecked")
@Override
public List<RESTApprovalEntity> findByExcludingState(ApprovalState state) {
return getSession().createCriteria(RESTApprovalEntity.class)
.add(Restrictions.ne("state", state))
.addOrder(Order.desc("approvedOn"))
.list();
}
private Session getSession() {
return sessionFactory.getCurrentSession();
}
}