package edu.sjtu.infosec.ismp.manager.OSS.pm.dao.impl;
import java.sql.Timestamp;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.OSS.pm.dao.RosterDao;
import edu.sjtu.infosec.ismp.manager.OSS.pm.model.Roster;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.HtmlFactory;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage;
import edu.sjtu.infosec.ismp.security.Domain;
public class RosterDaoImpl extends HibernateDaoSupport implements RosterDao {
public void add(Roster roster) throws Exception {
getHibernateTemplate().save(roster);
}
public void delete(Roster roster) throws Exception {
getHibernateTemplate().delete(roster);
}
public List<Roster> findAll() {
return getHibernateTemplate().loadAll(Roster.class);
}
public Roster findById(int id) {
return getHibernateTemplate().get(Roster.class, id);
}
public void update(Roster roster) throws Exception {
getHibernateTemplate().saveOrUpdate(roster);
}
@SuppressWarnings("unchecked")
public List<Roster> findConditionsInfo(Roster roster,
List<Domain> domainList, PMPage page, Timestamp startRecordTime,
Timestamp endRecordTime) {
String hql ="from Roster r where 1=1";
if(!(roster == null))
hql += HtmlFactory.isNotEmpty(roster.getName()) ? " and r.name like '%" + roster.getName() +"%'" : "";
for(int i=0;i<domainList.size();i++){
hql += (i < 1 ? " and (" : "or ") + "r.domain ="+domainList.get(i).getId() + ((domainList.size()-1) == i ? ") " : " ");
}
hql +=!(startRecordTime == null) ? "or r.lastUpdateTime >= '" + startRecordTime +"'" : "" ;
hql +=!(endRecordTime == null) ? "or r.lastUpdateTime <= '" + endRecordTime +"' " : "" ;
hql+="order by id,lastUpdateTime";
Query query = getSession().createQuery(hql);
if(!(page == null)){
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getEveryPage());
}
return query.list();
}
public long findRosterByCount(Roster roster, List<Domain> domainList,
PMPage page, Timestamp startRecordTime, Timestamp endRecordTime) {
String hql ="select count(r.id) from Roster r where 1=1";
if(!(roster == null))
hql += HtmlFactory.isNotEmpty(roster.getName()) ? " and r.name like '%" + roster.getName() +"%'" : "";
for(int i=0;i<domainList.size();i++){
hql += (i < 1 ? " and (" : "or ") + "r.domain ="+domainList.get(i).getId() + ((domainList.size()-1) == i ? ") " : " ");
}
hql +=!(startRecordTime == null) ? "or r.lastUpdateTime >= '" + startRecordTime +"'" : "" ;
hql +=!(endRecordTime == null) ? "or r.lastUpdateTime <= '" + endRecordTime +"'" : "" ;
return (Long) this.getSession().createQuery(hql).uniqueResult();
}
public List<Roster> findLikeAll(Object[] args) {
Criteria c = this.getSession().createCriteria(Roster.class);
c.add(Restrictions.not(Restrictions.in("id", args)));
return c.list();
}
}