package edu.sjtu.infosec.ismp.manager.VPM.pm.dao.impl; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.VPM.pm.dao.SensorClientsDao; import edu.sjtu.infosec.ismp.manager.VPM.pm.model.SensorClients; import edu.sjtu.infosec.ismp.security.Domain; public class SensorClientsDaoImpl extends HibernateDaoSupport implements SensorClientsDao{ @SuppressWarnings("unchecked") public LinkedList getSensorInfos(SensorClients sensorClients, Integer startResult, Integer maxResult, Date startDate,Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,sensorClients,null); getCommSensorClientsInfos(criteria,startDate,endDate,"operateTime"); return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } /** * 查询条件私有方法 * @param doMain 委办局 * @param sensorClients 客户端 * @param startDate 起始时间 * @param endDate 末时间 * @return */ private void getCommSensorClientsInfos(Criteria criteria,List<Integer> doMain,SensorClients sensorClients, Date startDate,Date endDate) { getCommSensorClientsInfos(criteria,doMain); getCommSensorClientsInfos(criteria,sensorClients,null); getCommSensorClientsInfos(criteria,startDate,endDate,"operateTime"); } /** * 获取查询对象 * @return */ private Criteria getCriteria() { Session session = this.getSession(); Criteria criteria= session.createCriteria(SensorClients.class); releaseSession(session); return criteria; } /** * 根据doMain 查询 * @param criteria 对象 * @param doMain 集合 * @return */ private void getCommSensorClientsInfos(Criteria criteria,List<Integer> doMain) { if(!(doMain == null) && !(doMain.isEmpty())) { criteria.add(Restrictions.in("department", doMain)); } } /** * 根据日期查询 * @param criteria 对象 * @param startDate 起始时间 * @param endDate 末时间 * @return */ private void getCommSensorClientsInfos(Criteria criteria, Date startDate,Date endDate,String date) { if(!(startDate==null) && !(endDate == null)) { criteria.add(Restrictions.ge(date, startDate)).add(Restrictions.le(date, endDate)); } if(!(startDate == null) && endDate == null) { criteria.add(Restrictions.ge(date, startDate)).add(Restrictions.le(date, new Date())); } if(startDate == null && !(endDate == null)) { criteria.add(Restrictions.le(date, endDate)); } } /** * 根据SensorClients 查询 * @param criteria 对象 * @param sensorClients 对象 * @return */ private void getCommSensorClientsInfos(Criteria criteria,SensorClients sensorClients,List<Domain> list) { if(!(sensorClients == null)) { if(!(sensorClients.getName()==null) && !(sensorClients.getName().trim()=="")) { criteria.add(Restrictions.like("name", "%"+sensorClients.getName()+"%")); } if(!(sensorClients.getSensorIP() == null) && !(sensorClients.getSensorIP().trim()=="")) { criteria.add(Restrictions.like("sensorIP", "%"+sensorClients.getSensorIP()+"%")); } if(!(sensorClients.getDepartment()==null) && sensorClients.getDepartment().getId() > 0) { criteria.add(Restrictions.eq("department.id", sensorClients.getDepartment().getId())); } } criteria.add( list == null || list.isEmpty() ? Restrictions.eq("department", null) : Restrictions.in("department", list)); } /** * 查询分页 * @param criteria Criteriad 对象 * @param startResult 起始条数 * @param maxResult 显示多少条 * @return */ @SuppressWarnings("unchecked") private LinkedList getCommSensorClientsInfosPage(Criteria criteria,Integer startResult, Integer maxResult) { criteria.add(Restrictions.isNotNull("department.id")); criteria.setProjection(Projections.count("id")); List listCount = criteria.list(); if(startResult > -1) { criteria.setFirstResult(startResult); } if(maxResult > -1) { criteria.setMaxResults(maxResult); } criteria.setProjection(null); List list = criteria.list(); List<SensorClients> listSC = new ArrayList<SensorClients>(); synchronized (listSC) { for(Object obj : list) { Object[] object =(Object[]) obj; for(Object ob : object) { if(ob instanceof SensorClients) { listSC.add((SensorClients) ob); } } } } LinkedList linkList = new LinkedList(); linkList.addFirst(listCount.get(0)); linkList.addLast(listSC); return linkList; } @SuppressWarnings("unchecked") public LinkedList getSensorInfosByManagerId( List<Integer> doMain,SensorClients sensorClients,Integer startResult, Integer maxResult, Date startDate,Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,doMain,sensorClients,startDate,endDate); return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } public void saveOrUpdateSensorClients(SensorClients sensorClients) { getHibernateTemplate().saveOrUpdate(sensorClients); getHibernateTemplate().flush(); } public SensorClients getSensorClients(int id) { SensorClients sensorClients = (SensorClients)getHibernateTemplate().get(SensorClients.class, id); return sensorClients; } @SuppressWarnings("unchecked") public List<SensorClients> getSensorInfosByManagerId(SensorClients doMainId) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,doMainId,null); return criteria.list(); } @SuppressWarnings("unchecked") public List<SensorClients> getUnallocatedSensorInfos() { Criteria criteria = getCriteria(); criteria.add(Restrictions.isNull("department")); return criteria.list(); } @SuppressWarnings("unchecked") public LinkedList getSensorInfosByManagerId(SensorClients doMainId,Integer startResult, Integer maxResult,Date startDate,Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,doMainId,null); getCommSensorClientsInfos(criteria,startDate,endDate,"operateTime"); return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } @SuppressWarnings("unchecked") public List<SensorClients> getSensorInfosByDoMainId(Integer domainId) { return this.getCriteria().add(Restrictions.eq("department.id", domainId)).list(); } public LinkedList getSensorInfosAll(List<Domain> list,Integer startResult, Integer maxResult, Date startDate, Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,null,list); getCommSensorClientsInfos(criteria,startDate,endDate,"operateTime"); return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } public LinkedList getSensorInfosByTactics(SensorClients sensorClients, Integer startResult, Integer maxResult, Date startDate, Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,sensorClients,null); if(!(startDate==null) && !(endDate == null)) { criteria.createCriteria("patchUpdateTactics").add(Restrictions.ge("lastChangeTime", startDate)).add(Restrictions.le("lastChangeTime", endDate)); } if(!(startDate == null) && endDate == null) { criteria.createCriteria("patchUpdateTactics").add(Restrictions.ge("lastChangeTime", startDate)).add(Restrictions.le("lastChangeTime", new Date())); } if(startDate == null && !(endDate == null)) { criteria.createCriteria("patchUpdateTactics").add(Restrictions.le("lastChangeTime", endDate)); } return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } public LinkedList getSensorInfos(List<Domain> list, SensorClients sensorClients, Integer startResult, Integer maxResult, Date startDate, Date endDate) { Criteria criteria = getCriteria(); getCommSensorClientsInfos(criteria,sensorClients,list); getCommSensorClientsInfos(criteria,startDate,endDate,"operateTime"); return getCommSensorClientsInfosPage(criteria,startResult,maxResult); } }