package edu.sjtu.infosec.ismp.manager.AIM.dao.impl; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.hibernate.Criteria; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.infosec.ismp.manager.rmi.aim.model.AlertInfoBO; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.AIM.comm.AlertQueryVO; import edu.sjtu.infosec.ismp.manager.AIM.dao.AlertDao; import edu.sjtu.infosec.ismp.manager.comm.model.page.Page; import edu.sjtu.infosec.ismp.manager.comm.model.page.PageResult; import edu.sjtu.infosec.ismp.manager.comm.model.page.PageUtil; import edu.sjtu.infosec.ismp.security.Domain; public class AlertDaoImpl extends HibernateDaoSupport implements AlertDao { // 多条件查询告警信息 并且分页显示 public PageResult getListPageAlertDao(Page page, AlertQueryVO AlertQueryEntity) { Criteria cri = makeTerm(AlertQueryEntity); // Criteria cri1 = makeTerm(AlertQueryEntity); // 统计记录数 Integer count = getCountByAlertDao(AlertQueryEntity,null); // Integer count = 2; // 设置分页参数 PageResult rs = new PageResult(); if (page != null) { cri.setFirstResult(page.getBeginIndex()); cri.setMaxResults(page.getEveryPage()); } if (null != page) { page = PageUtil.createPage(page.getEveryPage(), page .getCurrentPage(), count); } rs.setPageList(cri.list()); rs.setPage(page); return rs; } // 多条查询生成器 public Criteria makeTerm(final AlertQueryVO alertEntity) { Criteria cri = getSession().createCriteria(AlertInfoBO.class); if (alertEntity != null) { if (null != alertEntity.getAlertReason() && alertEntity.getAlertReason().trim().length()>0) { cri.add(Restrictions.like("alertReason", "%" + alertEntity.getAlertReason() + "%")); } if (null != alertEntity.getRawContent() && alertEntity.getRawContent().trim().length()>0) { cri.add(Restrictions.like("rawContent", "%" + alertEntity.getRawContent() + "%")); } if (null != alertEntity.getBeginPriority() && alertEntity.getEndPriority() != null) { int startPriority = alertEntity.getBeginPriority(); int endPriority = alertEntity.getEndPriority(); if(startPriority > endPriority) { startPriority += endPriority; endPriority = startPriority - endPriority; startPriority = startPriority - endPriority; } cri.add(Expression.between("level", startPriority, endPriority)); } if (null != alertEntity.getSrcIp() && (!alertEntity.getSrcIp().equals(""))) { cri.add(Restrictions.like("srcIP", "%" + alertEntity.getSrcIp() + "%")); } if (null != alertEntity.getType() && (!alertEntity.getType().equals(""))) { cri.add(Restrictions.eq("type", alertEntity.getType())); } if (null != alertEntity.getAlertType() && (!alertEntity.getAlertType().equals(""))) { cri.add(Restrictions.eq("alertType", alertEntity.getAlertType())); } if (null != alertEntity.getAlertSubType() && (!alertEntity.getAlertSubType().equals(""))) { cri.add(Restrictions.eq("alertSubType", alertEntity.getAlertSubType())); } // if (null != alertEntity.getTarget() // && (!alertEntity.getTarget().equals(""))) { // cri.add(Restrictions.eq("target", alertEntity.getTarget())); // } if (null != alertEntity.getStatus() && alertEntity.getStatus() < 2) { cri.add(Restrictions.eq("status", alertEntity.getStatus())); } if (alertEntity.getBeginId() != null && alertEntity.getEndId() != null) { int startId =alertEntity.getBeginId(); int endId = alertEntity.getEndId(); if(startId > endId) { startId += endId; endId = startId - endId; startId = startId - endId; } cri.add(Expression.between("id", startId,endId)); } if (alertEntity.getBeginDate() != null && alertEntity.getEndDate() != null) { cri.add(Restrictions.between("time", alertEntity.getBeginDate(), alertEntity.getEndDate())); } if (alertEntity.getTouchoffDate() != null) { cri.add(Restrictions .like("time", alertEntity.getTouchoffDate())); } if(alertEntity.getLogintime()!=null){ cri.add(Restrictions.gt("time", Timestamp.valueOf(alertEntity.getLogintime()))); } } cri.addOrder(Order.desc("time")); return cri; } // 统计记录数 public int getCountByAlertDao(AlertQueryVO AlertQueryEntity, Criteria cri) { if (AlertQueryEntity != null) { Criteria cri1 = makeTerm(AlertQueryEntity); return ((Integer) cri1.setProjection(Projections.rowCount()).uniqueResult()).intValue(); } else { return ((Integer) cri.setProjection(Projections.rowCount()).uniqueResult()).intValue(); } // Criteria cri1 = getSession().createCriteria(AlertInfoBO.class); // return ((Integer) cri1.setProjection(Projections.rowCount()).uniqueResult()).intValue(); // return cri1.list().size(); } public AlertInfoBO getByIdAlertDao(Integer alertid) { return (AlertInfoBO) getHibernateTemplate().get(AlertInfoBO.class, alertid); } // 更新告警信息的方法 public void updateAlertDao(AlertInfoBO alertInfoEntity) { // TODO Auto-generated method stub getHibernateTemplate().update(alertInfoEntity); } //添加告警信息方法 public void addAlertDao(AlertInfoBO alertInfoEntity){ this.getHibernateTemplate().save(alertInfoEntity); } public PageResult getListPageAlertDao(Page page, AlertQueryVO AlertQueryEntity, List<Domain> list) { Criteria cri = makeTerm(AlertQueryEntity); cri = tianjiaQuanxian(cri,list); if(cri!=null){ // 统计记录数 Integer count = getCountByAlertDao(AlertQueryEntity,null,list); // 设置分页参数 PageResult rs = new PageResult(); if (page != null) { cri.setFirstResult(page.getBeginIndex()); cri.setMaxResults(page.getEveryPage()); } if (null != page) { page = PageUtil.createPage(page.getEveryPage(), page .getCurrentPage(), count); } rs.setPageList(cri.list()); rs.setPage(page); return rs; }else{ return null; } } // 统计记录数,加权限 public int getCountByAlertDao(AlertQueryVO AlertQueryEntity, Criteria cri,List<Domain> set) { if (AlertQueryEntity != null) { Criteria cri1 = makeTerm(AlertQueryEntity); cri1 = tianjiaQuanxian(cri1,set); if(cri1!=null){ return ((Integer) cri1.setProjection((Projections.rowCount())) .uniqueResult()).intValue(); }else{ return 0; } } else { cri = tianjiaQuanxian(cri,set); if(cri!=null){ return ((Integer) cri.setProjection((Projections.rowCount())) .uniqueResult()).intValue(); }else{ return 0; } } } //检索加权限 private Criteria tianjiaQuanxian(Criteria cri,List<Domain> set) { /*if(userToManager != null && userToManager.trim().length()!=0){ String[] mStr = userToManager.split(","); List<Integer> ids = new ArrayList<Integer>(); if (mStr != null && mStr.length > 0) { for (String mid : mStr) { if(mid!=null || !mid.trim().equals("")){ ids.add(Integer.parseInt(mid)); } } } cri.add(Restrictions.in("deparmentId", ids)); return cri; } return null;*/ if(set!=null && set.size()>0){ List<Integer> ids =new ArrayList<Integer>(); for(Domain domain :set){ ids.add(domain.getId()); } cri.add(Restrictions.in("domain", ids)); } return cri; } }