package edu.sjtu.infosec.ismp.manager.AIM.dao.impl;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.hibernate.Criteria;
import org.hibernate.Query;
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.AIM.dao.AlertDwrDao;
import edu.sjtu.infosec.ismp.manager.AIM.model.AlertTypeBO;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.dao.UserDao;
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;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.security.User;
import uk.ltd.getahead.dwr.WebContextFactory;
public class AlertDwrDaoImpl extends HibernateDaoSupport implements AlertDwrDao {
// 注入AlertDao 接口
private AlertDao alertDao;
private UserDao userdao;
public void setAlertDao(AlertDao alertDao) {
this.alertDao = alertDao;
}
//检索加权限
private Criteria tianjiaQuanxian(Criteria cri,List<Domain> list) {
// 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;
// }
if(list!=null && list.size()>0){
List<Integer> ids = new ArrayList<Integer>();
for(Domain domain : list){
ids.add(domain.getId());
}
cri.add(Restrictions.in("domain", ids));
}
return cri;
}
// 暴露给DWR 的用于检查
public int getChecknNewAlertinfoDao(String loginTime) {
if (loginTime != null) {
Timestamp time = Timestamp.valueOf(loginTime);
Criteria cri = getSession().createCriteria(AlertInfoBO.class);
HttpSession session = WebContextFactory.get().getSession();
//加权限
OperatorDetails users = SecurityUserHolder.getCurrentUser();
// edu.sjtu.infosec.ismp.security.User user = userdao.getUserinfoByNameDao(users.getUsername());
List list = new ArrayList();
cri.add(Restrictions.gt("time", Timestamp.valueOf(loginTime)));
if(!(users.getUsername().equals("admin"))){
// String userToManager = users.getRoleList();
List<Domain> listdomain = users.getDomainList();
cri = tianjiaQuanxian(cri,listdomain);
}
if(cri!=null){
return ((Integer) cri.setProjection(Projections.rowCount())
.uniqueResult()).intValue();
}
return 0;
}
return 0;
}
public List getPageListAlertDwrDao(int curpage, String pagesize,
String status, String type, String subType, String fusioin,
String logintime) {
// TODO Auto-generated method stub
// 设置查询条件
AlertQueryVO alertquer = new AlertQueryVO();
Page page = new Page();
// 初始化为每页10条
page.setEveryPage(10);
if (pagesize != null && !pagesize.equals("")) {
page.setEveryPage(Integer.parseInt(pagesize));
}
page.setBeginIndex((curpage - 1) * page.getEveryPage());
page.setCurrentPage(curpage);
// 当前页等于空的时候
if (curpage <= 0) {
curpage = 1;
}
if (status != null && !status.equals("")) {
alertquer.setStatus(Integer.parseInt(status));
}
if (type != null && !type.equals("")) {
alertquer.setAlertType(type);
}
if (subType != null && !subType.equals("")) {
alertquer.setAlertSubType(subType);
}
if (fusioin != null && !fusioin.equals("")) {
alertquer.setTimedifference(Long.parseLong(fusioin));
}
if (logintime != null && logintime.trim().length() > 0) {
alertquer.setLogintime(logintime);
}
// HttpSession session = WebContextFactory.get().getSession();
//加权限
// User user = (User) session.getAttribute("userbo");
OperatorDetails users = SecurityUserHolder.getCurrentUser();
// edu.sjtu.infosec.ismp.security.User user = userdao.getUserinfoByNameDao(users.getUsername());
List list = new ArrayList();
if(users.getUsername().equals("admin")){
PageResult rs = alertDao.getListPageAlertDao(page, alertquer);
list.add(0, rs.getPageList());
list.add(1, rs.getPage());
}else{
// String userToManager = user.getRoleNames();
List<Domain> listDomain = users.getDomainList();
PageResult rs = alertDao.getListPageAlertDao(page, alertquer,listDomain);
list.add(0, rs.getPageList());
list.add(1, rs.getPage());
}
return list;
}
// 根据父名称 查询所有的子类型
public List<AlertTypeBO> getSubTypeByNameDao(String parentName) {
String Hql = "from AlertTypeBO where parentId in (select id from AlertTypeBO where typeName='"
+ parentName + "') and typeMarker=2";
Query query = getSession().createQuery(Hql);
return query.list();
}
//根据父类ID 查询子类型
public List<AlertTypeBO> getSubTypeByParentId(Integer id){
String hql = "from AlertTypeBO where parentId = :pid";
Query query = getSession().createQuery(hql);
query.setInteger("pid", id);
return query.list();
}
public List getUserPageListDao(String userName, String trueName,
int currPage) {
// 先计算出最大记录数
Criteria cri = getCriteriaSplit(userName, trueName);
// Integer maxPageSize = (Integer) cri.setProjection(Projections.rowCount()).uniqueResult();
int maxPageSize = ((Integer) cri.setProjection((Projections.rowCount())).uniqueResult()).intValue();
// 查询当前页数需要数据
Criteria cri1 = getCriteriaSplit(userName, trueName);
Page page = new Page();
if (currPage <= 0) {
currPage = 1;
}
page.setCurrentPage(currPage);
cri1.setFirstResult((currPage - 1) * page.getEveryPage());
cri1.setMaxResults(page.getEveryPage());
List list = new ArrayList();
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(),
maxPageSize);
list.add(0, cri1.list());
list.add(1, page);
return list;
}
private Criteria getCriteriaSplit(String userName, String trueName) {
Criteria cri = getSession().createCriteria(User.class);
if (userName != null && userName.trim().length() > 0) {
cri.add(Restrictions.like("username", "%"+userName+"%"));
}
if (trueName != null && trueName.trim().length() > 0) {
cri.add(Restrictions.like("soothname", "%"+trueName+"%"));
}
return cri;
}
}