package edu.sjtu.infosec.ismp.manager.LM.dLog.dao.impl;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.LM.dLog.dao.FtpDao;
import edu.sjtu.infosec.ismp.manager.LM.dLog.model.Ftp;
import edu.sjtu.infosec.ismp.manager.SYSM.config.model.lm.dLog.FtpSource;
import edu.sjtu.infosec.ismp.security.Domain;
public class FtpDaoImpl extends HibernateDaoSupport implements FtpDao {
@SuppressWarnings("unchecked")
public List<FtpSource> getAllFtpSource(FtpSource ftpSource,
List<Domain> domain, Integer pageNo, Integer pageRowNum)
throws Exception {
Criteria criteria = spliceCriteria(ftpSource,domain,pageNo,pageRowNum);
return criteria.list();
}
/**
* spliceCriteria decription : 带分页功能的多条件查询语句拼接
* @param sysLogSource
* @param pageNo
* @param pageRowNum
* @return
*/
@SuppressWarnings("deprecation")
private Criteria spliceCriteria(FtpSource ftpSource,List<Domain> domain,
Integer pageNo,Integer pageRowNum) {
Criteria criteria = getSession().createCriteria(
FtpSource.class);
if (ftpSource != null) {
// 产生范例对像
Example example = Example.create(ftpSource);
// 排除属性为null
// example.excludeNone();
// 对String属性都用模糊匹配方式
example.enableLike(MatchMode.ANYWHERE);
criteria.add(example);
if(domain.size() > 0)
criteria.add(Expression.in("domain",domain));
criteria.addOrder(Order.desc("createTime"));
if(ftpSource.getId() != null) {
criteria.add(Expression.eq("id", ftpSource.getId()));
}
}
// 添加分页查询条件:起始页
if (null != pageNo) {
criteria.setFirstResult(pageNo.intValue());
}
// 添加分页查询条件:每页需要显示的数目
if (null != pageRowNum) {
criteria.setMaxResults(pageRowNum.intValue());
}
return criteria;
}
@SuppressWarnings("unchecked")
public List<Ftp> getFtpBySource(String HQL, Integer pageNo,
Integer pageRowNum) throws Exception {
Query ftpQuery = this.getSession().createQuery(HQL);
ftpQuery.setFirstResult(pageNo);
ftpQuery.setMaxResults(pageRowNum);
return ftpQuery.list();
}
}