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.DutyScheduleDao;
import edu.sjtu.infosec.ismp.manager.OSS.pm.model.DutySchedule;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage;
import edu.sjtu.infosec.ismp.security.Domain;
public class DutyScheduleDaoImpl extends HibernateDaoSupport implements DutyScheduleDao {
public void add(DutySchedule dutySchedule) throws Exception {
getHibernateTemplate().save(dutySchedule);
}
public void delete(DutySchedule dutySchedule) throws Exception {
getHibernateTemplate().delete(dutySchedule);
}
public List<DutySchedule> findAll() {
return getHibernateTemplate().loadAll(DutySchedule.class);
}
public DutySchedule findById(int id) {
return getHibernateTemplate().get(DutySchedule.class, id);
}
public void update(DutySchedule dutySchedule) throws Exception {
getHibernateTemplate().update(dutySchedule);
}
@SuppressWarnings("unchecked")
public List<DutySchedule> findConditionsInfo(
DutySchedule dutySchedule, List<Domain> domainList,
PMPage page, Timestamp startRecordTime, Timestamp endRecordTime) {
String hql = getFindSql(dutySchedule,domainList,startRecordTime,endRecordTime);
Query query = getSession().createQuery(hql);
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getEveryPage());
return query.list();
}
@SuppressWarnings("unchecked")
public List<DutySchedule> findNotPulishedDutySchedule(DutySchedule dutySchedule,
List<Domain> domainList) {
String hql = getFindSql(dutySchedule,domainList,null,null);
Query query = getSession().createQuery(hql);
return query.list();
}
private String getFindSql(DutySchedule dutySchedule, List<Domain> domainList, Timestamp startRecordTime, Timestamp endRecordTime){
String hql ="from DutySchedule r where 1=1";
if(!(domainList == null)){
for(int i=0;i<domainList.size();i++){
hql += (i < 1 ? " and (" : "or ") + "r.domain ="+domainList.get(i).getId() + ((domainList.size()-1) == i ? ") " : " ");
}
}
hql += dutySchedule.getIsPublished() > 0 ? "and isPublished=0" : "";
hql +=!(startRecordTime == null) ? "or r.lastUpdateTime >= '" + startRecordTime +"'" : "" ;
hql +=!(endRecordTime == null) ? "or r.lastUpdateTime <= '" + endRecordTime +"'" : "" ;
return hql;
}
public long findRosterByCount(DutySchedule dutySchedule,
List<Domain> domainList, PMPage page, Timestamp startRecordTime,
Timestamp endRecordTime) {
String hql ="select count(r.id) from DutySchedule r where 1=1";
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 void publishedDutySchedule(List<DutySchedule> dutyScheduleList) {
String hql ="update DutySchedule d set d.isPublished= 1 where 1 = 0 ";
for(int i=0;i<dutyScheduleList.size();i++){
hql +=" or d.id ="+dutyScheduleList.get(i).getId();
}
Query query = getSession().createQuery(hql);
query.executeUpdate();
}
public List<DutySchedule> findDutyDate(Timestamp startRecordTime) {
Criteria c = this.getSession().createCriteria(DutySchedule.class);
c.add(Restrictions.ge("endTime", startRecordTime));
return c.list();
}
}