package edu.sjtu.infosec.ismp.manager.RAM.dao.impl; import java.sql.SQLException; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.RAM.dao.DynaElemResuDao; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseInfoAsse; import edu.sjtu.infosec.ismp.manager.RAM.model.AsseKnowDynaElemResu; import edu.sjtu.infosec.ismp.manager.comm.model.page.Page; /** * 数据层 知识库资产评估要素结果Dao实现类. **/ public class DynaElemResuDaoImpl extends HibernateDaoSupport implements DynaElemResuDao { /** * 批量保存/更新项目资产评估要素 * @param dynaElemResuList * 资产评估要素集合 **/ @SuppressWarnings("unchecked") public void batchSaveOrUpdate(final List<AsseKnowDynaElemResu> dynaElemResuList) { getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException,SQLException { for(int i=0;i<dynaElemResuList.size();i++) { AsseKnowDynaElemResu dynaElemResu = (AsseKnowDynaElemResu) dynaElemResuList.get(i); session.saveOrUpdate(dynaElemResu); System.out.println("batch saved dynaElemResu:"+dynaElemResu.toString()); if((i+1)%20 == 0){ session.flush(); session.clear(); } } return null; } }); } /** * 查询项目资产评估要素 * @param id * 资产评估要素id * @return 资产评估要素对象 **/ public AsseKnowDynaElemResu find(Integer id) { AsseKnowDynaElemResu dynaElemResu = null; dynaElemResu = (AsseKnowDynaElemResu) getHibernateTemplate().load(AsseKnowDynaElemResu.class, id); return dynaElemResu; } /** * 查询项目资产评估要素记录数 * @param asseInfoProjId * 测评项目id * @return 项目资产评估要素记录数 **/ public int getCount(Integer asseInfoProjId) { Criteria criteria = getSession().createCriteria(AsseKnowDynaElemResu.class) .addOrder(Order.asc("id")); if(asseInfoProjId!=null ) { criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId)); } return criteria.list().size(); } /** * 返回项目资产评估要素列表 * @param asseInfoProjId * 测评项目id * @return 项目资产评估要素列表 **/ public List<AsseKnowDynaElemResu> listDynaElemResu(Integer asseInfoProjId) { Criteria criteria = getSession().createCriteria(AsseKnowDynaElemResu.class) .addOrder(Order.asc("id")); if(asseInfoProjId!=null ) { criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId)); } return criteria.list(); } /** * 查询项目资产评估要素分页记录 * @param page * 分页对象 * @param asseInfoProjId * 测评项目id * @return 分页记录列表 **/ @SuppressWarnings("unchecked") public List<AsseKnowDynaElemResu> listDynaElemResuPage(Integer startResult, Integer maxResult,Integer asseInfoProjId) { Criteria criteria = getSession().createCriteria(AsseKnowDynaElemResu.class) .addOrder(Order.asc("id")) .setFirstResult(startResult) .setMaxResults(maxResult); if(asseInfoProjId!=null ) { criteria.add(Expression.eq("asseInfoProjId", asseInfoProjId)); } return criteria.list(); } /** * 删除项目资产评估要素 * @param dynaElemResu * 项目资产评估要素 **/ public void remove(AsseKnowDynaElemResu dynaElemResu) { getHibernateTemplate().delete(dynaElemResu); } /** * 保存/更新项目资产评估要素 * @param dynaElemResu * 项目资产评估要素 **/ public void saveOrUpdate(AsseKnowDynaElemResu dynaElemResu) { getHibernateTemplate().saveOrUpdate(dynaElemResu); } /** * 统计风险值 * @param asseInfoProjId * 测评项目id * @return 风险值 **/ public List statRiskValue(Integer asseInfoProjId) { List list = getHibernateTemplate().find("select sum(vulnHighNum) ,sum(vulnMiduNum) ,sum(vulnLowNum) " + "from AsseKnowDynaElemResu " + "where asseInfoProjId=?",asseInfoProjId); return list; } /** * 查询风险为高的资产数目 * @param asseInfoProjId * 测评项目Id * @param asseInfoAsse * 资产 * @return 风险为高的资产数目 */ public Integer statHighRiskAsse(Integer asseInfoProjId, AsseInfoAsse asseInfoAsse) { Integer count = new Integer(0); List list = getHibernateTemplate().find("select vulnHighNum " + "from AsseKnowDynaElemResu " + "where asseInfoProjId='"+asseInfoProjId+"' and asse=?",asseInfoAsse); if(list!=null && list.size()>0) { count = (Integer) list.get(0); } return count; } /** * 风险为中的资产数目 * @param asseInfoProjId * 测评项目Id * @param asseInfoAsse * 资产 * @return 风险为中的资产数目 */ public Integer statMiddRiskAsse(Integer asseInfoProjId, AsseInfoAsse asseInfoAsse) { Integer count = new Integer(0); List list = getHibernateTemplate().find("select vulnMiduNum " + "from AsseKnowDynaElemResu " + "where asseInfoProjId='"+asseInfoProjId+"' and asse=?",asseInfoAsse); if(list!=null && list.size()>0) { count = (Integer) list.get(0); } return count; } /** * 风险为低的资产数目 * @param asseInfoProjId * 测评项目Id * @param asseInfoAsse * 资产 * @return 风险为低的资产数目 */ public Integer statLowRiskAsse(Integer asseInfoProjId, AsseInfoAsse asseInfoAsse) { Integer count = new Integer(0); List list = getHibernateTemplate().find("select vulnLowNum " + "from AsseKnowDynaElemResu " + "where asseInfoProjId='"+asseInfoProjId+"' and asse=?",asseInfoAsse); if(list!=null && list.size()>0) { count = (Integer) list.get(0); } return count; } public boolean checkAlertType(String type, String subType, String category) {/* boolean ret = false; List<AlertTypeBO> parent = getHibernateTemplate().find("from AlertTypeBO where typeMarker = 1 and category = '"+type+"'"); AlertTypeBO parentAlertType = null; for(AlertTypeBO alertType : parent) { parentAlertType = alertType; } if(parentAlertType != null) { List alertTypeList = getHibernateTemplate().find("from AlertTypeBO where typeMarker = 2 and parentId = "+parentAlertType.getId() +" and typeName = '"+subType+"' and category = '"+category+"'"); if(alertTypeList != null && alertTypeList.size()>0) { ret = true; } } return ret; */ return false; } /*public void sendAlert(AlertInfoBO alertInfo) { getHibernateTemplate().saveOrUpdate(alertInfo); }*/ }