package edu.sjtu.infosec.ismp.manager.AM.dao.impl; import java.io.Serializable; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.criterion.Restrictions; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import edu.sjtu.infosec.ismp.manager.AM.dao.AssetToHardwareDao; import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceBO; import edu.sjtu.infosec.ismp.manager.AM.model.AssetHardwareBO; import edu.sjtu.infosec.ismp.manager.AM.model.AssetToHardwareBO; import edu.sjtu.infosec.ismp.manager.comm.model.page.Page; /** * AssetToHardwareDao接口的实现类 * * @author Breggor 6.25完善功能 * */ @SuppressWarnings("unchecked") public class AssetToHardwareDaoImpl extends HibernateDaoSupport implements AssetToHardwareDao { /** * 保存设备和硬件的关系 */ public void saveAssetToHardware(AssetToHardwareBO entity) { getHibernateTemplate().save(entity); } /** * 更新设备和硬件的关系 */ public void updateAssetToHardware(AssetToHardwareBO entity) { getHibernateTemplate().update(entity); } /** *删除设备和硬件的关系 */ public void deleteAssetToHardware(AssetToHardwareBO entity) { getHibernateTemplate().delete(entity); } /** * 根据设备和硬件关系的Id查询 */ public AssetToHardwareBO getAssetToHardware(Serializable entityId) { return (AssetToHardwareBO) getHibernateTemplate().get( AssetToHardwareBO.class, entityId); } /** * 根据设备和硬件关系的model查询 */ public List<AssetToHardwareBO> getListByAssetToHardware( AssetToHardwareBO entity) { return (List<AssetToHardwareBO>) spliceCriteria(entity).list(); } /** * 根据硬件Id查询已关联的设备集合 */ public List<AssetDeviceBO> getListByAssetDevice(Serializable hardwareId) { //根据硬件id等到设备id集合 List ids = getAssetDeviceIds(hardwareId); //设备id集合为null或为空时,就return Null; if(ids == null || ids.isEmpty()) { return null; } Criteria criteria = getSession().createCriteria(AssetDeviceBO.class); criteria.add(Restrictions.in("id", ids)); return criteria.list(); } /** * 根据设备Id查询已关联的硬件集合 */ public List<AssetHardwareBO> getListByHardware(Serializable assetId) { //根据设备Id得到硬件id集合 List ids = getAssetHardwareIds(assetId); //硬件id集合为null或空时,就return Null if(ids == null || ids.isEmpty()) { return null; } Criteria criteria = getSession().createCriteria(AssetHardwareBO.class); criteria.add(Restrictions.in("id", ids)); return criteria.list(); } /** * 根据硬件Id查询没有关联的设备集合 */ public List<AssetDeviceBO> getListNotJoinAssetDevice(Serializable hardwareId) { List<AssetDeviceBO> deviceList = null; //根据硬件Id等到设备Id集合 List deviceIds = getAssetDeviceIds(hardwareId); Criteria criteria = getSession().createCriteria(AssetDeviceBO.class); //设备Id集合为空或Null时,就return所有的设备集合 if(deviceIds == null || deviceIds.isEmpty()) { deviceList = criteria.list(); }else { deviceList = criteria.add(Restrictions.not(Restrictions.in("id", deviceIds))).list(); } return deviceList; } /** * 根据设备Id查询没有关联的硬件集合 */ public List<AssetHardwareBO> getListNotJoinHardware(Serializable assetId) { List<AssetHardwareBO> hardwareList = null; //根据设备Id等到硬件Id集合 List hardwareIds = getAssetHardwareIds(assetId); Criteria criteria = getSession().createCriteria(AssetHardwareBO.class); //硬件Id集合为空或Null时,就return所有的硬件集合 if(hardwareIds == null || hardwareIds.isEmpty()) { hardwareList = criteria.list(); }else { hardwareList = criteria.add(Restrictions.not(Restrictions.in("id", hardwareIds))).list(); } return hardwareList; } /** * 根据设备Id统计硬件行数 */ public int getCountByHardware(Serializable deviceId) { int count = 0; List list = getListByHardware(deviceId); if(list != null &&list.size()>0) count = list.size(); return count; } /** * 根据设备Id分页查询硬件 */ public List<AssetHardwareBO> getPageListByHardware(Serializable deviceId, Page page) { //根据设备Id得到硬件id集合 List ids = getAssetHardwareIds(deviceId); //硬件id集合为null或空时,就return Null if(ids == null || ids.isEmpty()) { return null; } Criteria criteria = getSession().createCriteria(AssetHardwareBO.class); criteria.add(Restrictions.in("id", ids)); if(page != null) { criteria.setFirstResult(page.getBeginIndex()); criteria.setMaxResults(page.getEveryPage()); } return criteria.list(); } /** * 生成查询条件 */ private Criteria spliceCriteria(AssetToHardwareBO assetToHardware) { Criteria criteria = getSession() .createCriteria(AssetToHardwareBO.class); if (null == assetToHardware) { return criteria; } if (null != assetToHardware.getId()) { criteria.add(Restrictions.eq("id", assetToHardware.getId())); } if (null != assetToHardware.getAssetId()) { criteria.add(Restrictions.eq("assetId", assetToHardware .getAssetId())); } if (null != assetToHardware.getHardwareId()) { criteria.add(Restrictions.eq("hardwareId", assetToHardware .getHardwareId())); } if (null != assetToHardware.getDescription() && assetToHardware.getDescription().trim().length() > 0) { criteria.add(Restrictions.like("description", "%" + assetToHardware.getDescription().trim() + "%")); } return criteria; } /** * 根据设备Id查询所有硬件Id * @param deviceId * @return */ private List<Integer> getAssetHardwareIds(Serializable deviceId) { List<Integer> idList = null; if (deviceId != null && !"".equals(deviceId)) { String hql = "select device.hardwareId from AssetToHardwareBO as device where device.assetId=:assetId"; Query query = getSession().createQuery(hql); query.setParameter("assetId", deviceId); idList = query.list(); } return idList; } /** * 根据硬件Id查询所有设备Id * @param hardwareId * @return */ private List<Integer> getAssetDeviceIds(Serializable hardwareId) { List<Integer> idList = null; if (hardwareId != null && !"".equals(hardwareId)) { String hql = "select hardware.assetId from AssetToHardwareBO as hardware where hardware.hardwareId=:hardwareId"; Query query = getSession().createQuery(hql); query.setParameter("hardwareId", hardwareId); idList = query.list(); } return idList; } }