package edu.sjtu.infosec.ismp.manager.EM.dao.impl; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.Order; import org.hibernate.criterion.ProjectionList; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.infosec.ismp.manager.rmi.tm.manager.model.DomainEntity; import org.infosec.ismp.manager.rmi.tm.manager.model.NodeEntity; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.EM.comm.Page; import edu.sjtu.infosec.ismp.manager.EM.dao.IEventGetTopoDao; import edu.sjtu.infosec.ismp.manager.EM.dao.Status; import edu.sjtu.infosec.ismp.manager.EM.dao.queryCondition.EventGetTopoCondition; import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventGetTopoResult; import edu.sjtu.infosec.ismp.manager.EM.util.PageUtil; import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder; import edu.sjtu.infosec.ismp.security.Domain; /** * 从拓朴数据库取数据 * * @author wudengke 2009-6-29 * */ public class EventGetTopoDao extends HibernateDaoSupport implements IEventGetTopoDao { /** * 获取TOPO设备IP和MAC地址和设备名 * * @return */ @SuppressWarnings("unchecked") public List<Object> getTopoInfo() { List<Object> list2 = new ArrayList<Object>(); String hql = "select tp.ipAddress,tp.netCardCode,tp.name,tp.domain,mb.domainName " + "from NodeEntity tp,Domain mb where tp.domain.id = mb.id and tp.ipAddress is not null";// and tp.netCardCode is not null "; List<Object> list = getHibernateTemplate().find(hql); String hql1 = "select ad.ip,ad.priority from AssetDeviceBO ad where ad.ip is not null"; List<Object> list1 = getHibernateTemplate().find(hql1); if (list.size() > 0) { boolean istrue = false; for (int i = 0; i < list.size(); i++) { Object[] obj = (Object[]) list.get(i); for (int j = 0; j < list1.size(); j++) { Object[] temp = (Object[]) list1.get(j); if (obj[0].toString().trim().equals( temp[0].toString().trim())) { if (temp[1] != null) { Object[] oo = new Object[7]; oo[0] = obj[0]; oo[1] = obj[1]; oo[2] = obj[2]; oo[3] = temp[1]; oo[4] = 1; oo[5] = obj[3]; oo[6] = obj[4]; list2.add(oo); } else { Object[] oo = new Object[7]; oo[0] = obj[0]; oo[1] = obj[1]; oo[2] = obj[2]; oo[3] = 1; oo[4] = 1; oo[5] = obj[3]; oo[6] = obj[4]; list2.add(oo); } istrue = true; } } if (istrue == false) { Object[] oo = new Object[7]; oo[0] = obj[0]; oo[1] = obj[1]; oo[2] = obj[2]; oo[3] = 1; oo[4] = 1; oo[5] = obj[3]; oo[6] = obj[4]; list2.add(oo); } else { istrue = false; } } } return list2; } /** * 分页获取TOPO设备IP和MAC地址和设备名 * * @return */ public EventGetTopoResult getTopoInfo(final EventGetTopoCondition condition) { return (EventGetTopoResult) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { EventGetTopoResult res = new EventGetTopoResult(); Page page = condition.getPage(); Criteria criteria = session .createCriteria(NodeEntity.class); if (condition.getBureauId() != null && condition.getBureauId().length > 0) { List<Domain> managerBo = (List<Domain>)SecurityUserHolder.getCurrentUser().getDomainList(); List<DomainEntity> domainList = new ArrayList<DomainEntity>(); for(Domain d:managerBo){ Integer[] bureauId = condition.getBureauId(); for(int i=0;i<bureauId.length;i++){ if(d.getId().equals(bureauId[i])){ DomainEntity de = new DomainEntity(); de.setId(d.getId()); de.setDomainName(d.getDomainName()); de.setDescription(d.getDescription()); // try { // BeanUtils.copyProperties(de,d); // // } catch (IllegalAccessException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (InvocationTargetException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } domainList.add(de); } } } criteria.add(Restrictions.in("domain", domainList)); } if (condition.getNetCardCodes() != null && condition.getNetCardCodes().length > 0) { criteria.add(Restrictions.in("ipAddress", condition .getNetCardCodes())); } criteria.add(Restrictions.isNotNull("ipAddress")); // criteria.add(Restrictions.isNotNull("netCardCode")); int totalCount = ((Integer) criteria.setProjection( Projections.rowCount()).uniqueResult()) .intValue(); if (totalCount == 0) { res.setStatus(Status.NORESULT); return res; } criteria.setProjection(null); int startIndex = page.getEveryPage() * (page.getCurrentPage() - 1); criteria.setFirstResult(startIndex); criteria.setMaxResults(page.getEveryPage()); Page p = PageUtil.createPage(page.getEveryPage(), page .getCurrentPage(), totalCount); ProjectionList projectionList = Projections .projectionList(); projectionList.add(Projections.projectionList().add( Projections.property("ipAddress")).add( Projections.property("netCardCode")).add( Projections.property("name")).add( Projections.property("domain"))); criteria.setProjection(projectionList); criteria.addOrder(Order.asc("domain")); res.setDatas(criteria.list()); res.setPage(p); return res; } }); } /** * 统计域事件总量 * * @return */ @SuppressWarnings("unchecked") public List<Object> StatisticsDomain(Timestamp starttime, Timestamp endtime,Integer bureauId) { Object[] obj = new Object[] { starttime, endtime }; String hql = "select c.domainName as viewName, sum(b.currValue) as total_value " + "from NodeEntity a, Eventmoni b, DomainEntity c " + "where a.ipAddress=b.faciIp and a.domain.id=c.id " + "and b.time between ? and ? "; if (bureauId!=null && bureauId > 0) { hql = hql + " and b.domain.id=? "; obj = new Object[] { starttime, endtime, bureauId}; } hql = hql + " group by a.domain.id"; List<Object> list = getHibernateTemplate().find(hql, obj); return list; } public NodeEntity queryByIpBureauId(final String ip,final Integer bureauId) { return (NodeEntity) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session .createCriteria(NodeEntity.class); criteria.add(Restrictions.eq("ipAddress", ip)); if (bureauId != null) { List<Domain> managerBo = (List<Domain>)SecurityUserHolder.getCurrentUser().getDomainList(); DomainEntity de = new DomainEntity(); for(Domain d:managerBo){ if(d.getId().equals(bureauId)){ de.setId(d.getId()); de.setDomainName(d.getDomainName()); de.setDescription(d.getDescription()); // try { // BeanUtils.copyProperties(de,d); // } catch (IllegalAccessException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (InvocationTargetException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } } criteria.add(Restrictions.eq("domain", de)); // ProjectionList projectionList = Projections // .projectionList(); // projectionList.add(Projections.projectionList().add( // Projections.property("ipAddress")).add( // Projections.property("netCardCode")).add( // Projections.property("name")).add( // Projections.property("domain"))); // criteria.setProjection(projectionList); } NodeEntity res = (NodeEntity) criteria.list().get(0); return res; } }); } }