package edu.sjtu.infosec.ismp.manager.TM.manager.dao;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.hibernate.Query;
import org.infosec.ismp.manager.rmi.tm.manager.model.NodeEntity;
import org.infosec.ismp.manager.rmi.tm.manager.model.TopoManageConstant;
import org.springframework.stereotype.Component;
import org.springside.modules.orm.hibernate.HibernateDao;
@Component(value="topoNodeDao")
public class TopoNodeDao extends HibernateDao<NodeEntity,String>{
private static final String SENSOR = "from NodeEntity where parentDomain=null and managerStyle='"+TopoManageConstant.SENSOR+"'";
private static final String DELETE_NODES = "delete from NodeEntity where nodeId in(:ids)";
private static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 删除节点集合(没做联删除云图处理)
* @param nodeEntitys
*/
public void deleteNodes(List<NodeEntity> nodeEntitys) {
if(nodeEntitys == null) return;
List<String> ids = new ArrayList<String>();
for(NodeEntity nodeEntity:nodeEntitys) {
ids.add(nodeEntity.getNodeId());
}
Map<String, List<String>> map = Collections.singletonMap("ids", ids);
batchExecute(DELETE_NODES,map);
}
/**
* 保存或更新节点
* @param nodeEntity
*/
public void saveOrUpdateNode(NodeEntity nodeEntity) {
if(getSession() != null) {
if(nodeEntity.getParentDomain() != null && nodeEntity.getParentDomain().getId() == null) {
nodeEntity.setDomain(null);
}
nodeEntity.setCreateTime(Timestamp.valueOf(simpleDateFormat.format(new Date())));
getSession().saveOrUpdate(nodeEntity);
}
}
@SuppressWarnings("unchecked")
public List<NodeEntity> findSensorByUnDomain() {
Query query = createQuery(SENSOR);
return distinct(query).list();
}
}