package edu.sjtu.infosec.ismp.manager.SYSM.user.other.dao.impl; import java.sql.Timestamp; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.SYSM.user.other.dao.AppSysInfoDao; import edu.sjtu.infosec.ismp.manager.SYSM.user.other.model.AppSysInfo; import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage; import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPageUtil; import edu.sjtu.infosec.ismp.security.Domain; public class AppSysInfoDaoImpl extends HibernateDaoSupport implements AppSysInfoDao , Cloneable{ public void add(AppSysInfo appSysInfo) throws Exception { getHibernateTemplate().save(appSysInfo); } public void delete(AppSysInfo appSysInfo) throws Exception { getHibernateTemplate().delete(appSysInfo); } public void update(AppSysInfo appSysInfo) throws Exception { getHibernateTemplate().saveOrUpdate(appSysInfo); getHibernateTemplate().flush(); } public List<AppSysInfo> findAll() throws Exception { List<AppSysInfo> list = getHibernateTemplate().loadAll(AppSysInfo.class); return list; } public AppSysInfo findById(int id) throws Exception { AppSysInfo appSysInfo = (AppSysInfo)getHibernateTemplate().get(AppSysInfo.class, id); return appSysInfo; } public List<AppSysInfo> findAll(Timestamp startRecordTime, Timestamp endRecordTime, int startResult, int maxResult) throws Exception { return getConditionsPage(this.getSession().createCriteria(AppSysInfo.class),null); } public List<AppSysInfo> findAllByDomain(List<Domain> domainList) throws Exception { return findConditionsInfo(null,domainList, null,null,null); } public List<AppSysInfo> findAllByDomain(List<Domain> domainList, Timestamp startRecordTime, Timestamp endRecordTime, int startResult, int maxResult) throws Exception { return findConditionsInfo(null,domainList, null,startRecordTime,endRecordTime); } public long findAllNum(Timestamp startRecordTime, Timestamp endRecordTime) throws Exception { return 0; } public long findAllNumByDomain(List<Domain> domainList, Timestamp startRecordTime, Timestamp endRecordTime) throws Exception { return 0; } public List<AppSysInfo> findConditionsInfo(AppSysInfo syInfo, List<Domain> domainList, PMPage page, Timestamp startRecordTime, Timestamp endRecordTime) { Criteria criteria = this.getSession().createCriteria(AppSysInfo.class); getCommASInfos(criteria,syInfo,domainList); findConditionsDate(criteria,startRecordTime,endRecordTime); int count=findNumConditionsInfo(syInfo, domainList, page, startRecordTime, endRecordTime); page.setPageInfo(PMPageUtil.createPage(page, count)); return getConditionsPage(criteria,page); } @SuppressWarnings("unchecked") private List<AppSysInfo> getConditionsPage(Criteria criteria,PMPage page){ criteria.setFirstResult(page.getBeginIndex()); criteria.setMaxResults(page.getEveryPage()); List<AppSysInfo> list = criteria.list(); return list; } private int getNumConditionsPage(Criteria criteria){ criteria.setProjection(Projections.rowCount()); int listCount = (Integer) criteria.uniqueResult(); return listCount; } private void getCommASInfos(Criteria criteria,AppSysInfo appSysInfo,List<Domain> domainList) { if(!(appSysInfo == null)) { if(!(appSysInfo.getName()==null) && !(appSysInfo.getName().trim()=="")) { criteria.add(Restrictions.like("name", "%"+appSysInfo.getName()+"%")); } if(!(appSysInfo.getDomain()==null) && appSysInfo.getDomain().getId() > 0) { criteria.add(Restrictions.eq("domain.id", appSysInfo.getDomain().getId())); } if(!(domainList == null) && domainList.size() > 0){ criteria.add(Restrictions.in("domain", domainList)); } criteria.add(Restrictions.isNotNull("domain.id")); } } private void findConditionsDate(Criteria criteria,Timestamp startDate, Timestamp endDate){ if(!(startDate==null) && !(endDate == null)) { criteria.add(Restrictions.ge("lastChangeTime", startDate)).add(Restrictions.le("lastChangeTime", endDate)); } if(!(startDate == null) && endDate == null) { criteria.add(Restrictions.ge("lastChangeTime", startDate)).add(Restrictions.le("lastChangeTime", new Date())); } if(startDate == null && !(endDate == null)) { criteria.add(Restrictions.le("lastChangeTime", endDate)); } } private int findNumConditionsInfo(AppSysInfo syInfo, List<Domain> domainList, PMPage page, Timestamp startRecordTime, Timestamp endRecordTime) { Criteria criteria = this.getSession().createCriteria(AppSysInfo.class); getCommASInfos(criteria,syInfo,domainList); findConditionsDate(criteria,startRecordTime,endRecordTime); return getNumConditionsPage(criteria); } }