package org.multibit.mbm.db.dao.hibernate;
import com.google.common.base.Optional;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.multibit.mbm.db.dao.RoleDao;
import org.multibit.mbm.auth.Authority;
import org.multibit.mbm.core.model.Role;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.stereotype.Repository;
import java.sql.SQLException;
import java.util.List;
@Repository("hibernateRoleDao")
public class HibernateRoleDao extends BaseHibernateDao<Role> implements RoleDao {
@SuppressWarnings("unchecked")
@Override
public Optional<Role> getById(Long id) {
return getById(Role.class, id);
}
@Override
public Optional<Role> getByAuthority(Authority authority) {
return getByName(authority.name());
}
@Override
public Optional<Role> getByName(String name) {
List roles = hibernateTemplate.find("from Role r where r.name = ?", name);
return first(roles);
}
@SuppressWarnings("unchecked")
public List<Role> getAllByPage(final int pageSize, final int pageNumber) {
return (List<Role>) hibernateTemplate.executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery("from Role");
query.setMaxResults(pageSize);
query.setFirstResult(pageSize * pageNumber);
return query.list();
}
});
}
@Override
public Role saveOrUpdate(Role role) {
hibernateTemplate.saveOrUpdate(role);
return role;
}
/**
* Force an immediate in-transaction flush (normally only used in test code)
*/
public void flush() {
hibernateTemplate.flush();
}
@Override
protected Role initialized(Role entity) {
return entity;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}