package edu.sjtu.infosec.ismp.manager.AIM.dao.impl;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.infosec.ismp.manager.rmi.aim.model.AlertInfoBO;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.sjtu.infosec.ismp.manager.AIM.dao.SendAlertDao;
import edu.sjtu.infosec.ismp.manager.AIM.model.AlertRuleBO;
import edu.sjtu.infosec.ismp.manager.AIM.service.AlertFusionRuleServices;
import edu.sjtu.infosec.ismp.manager.comm.comm.send.SendMsg;
public class SendAlertDaoImpl extends HibernateDaoSupport implements
SendAlertDao {
private String mailaddress;// 邮件服务器地址
private String addresser;// 发件人
private String mailPassword;// 邮件密码
private String socketServerAddress;// 发送手机短消息的socket服务器 IP地址
private Integer port;// 端口
public void setSocketServerAddress(String socketServerAddress) {
this.socketServerAddress = socketServerAddress;
}
public void setPort(Integer port) {
this.port = port;
}
public void setMailaddress(String mailaddress) {
this.mailaddress = mailaddress;
}
public void setAddresser(String addresser) {
this.addresser = addresser;
}
public void setMailPassword(String mailPassword) {
this.mailPassword = mailPassword;
}
public boolean sendAlertService(AlertInfoBO alertInfoBO) throws Exception {
initConfig();
Criteria cri = getSession().createCriteria(AlertRuleBO.class);
List<AlertRuleBO> list = this.getListByCriteria(alertInfoBO, cri);
if(list!=null && list.size()>0){
for(AlertRuleBO alertRuleBO :list){
// 并且根据规则执行相应的消息发送
// 判断是否发送邮件
if (alertRuleBO.getSendEmail() != null
&& alertRuleBO.getSendEmail() > 0
&& alertRuleBO.getSendEmail() == 1) {
String emailTargets []=alertRuleBO.getEmailTarget().split(";");
if(emailTargets!=null&&emailTargets.length>0){
int i=0;
for (String string : emailTargets) {
if(i>=10){
break;
}
SendMsg.sendMail(string, alertInfoBO.getAlertReason(), socketServerAddress, port);
i++;
}
}
}
// 判断是否发送桌面消息
if (alertRuleBO.getSendMsg() != null
&& alertRuleBO.getSendMsg() > 0
&& alertRuleBO.getSendMsg() == 1) {
String msgTargets[]=alertRuleBO.getMsgTarget().split(";");
if(msgTargets!=null&&msgTargets.length>0){
int i=0;
for (String string : msgTargets) {
if(i>=10){
break;
}
i++;
SendMsg.sendNetMsg(string, alertInfoBO.getAlertReason());
}
}
}
// 判读规则中是否要发送短消息
if (alertRuleBO.getSendSms() != null
&& alertRuleBO.getSendSms() > 0
&& alertRuleBO.getSendSms() == 1) {
String mobileMess [] =alertRuleBO.getSmsTarget().split(";");
if(mobileMess!=null&&mobileMess.length>0){
int i=0;
//发送邮件到规则中指定的 邮箱地址 ,最多10个
for (String string : mobileMess) {
if(i>=10){
break;
}
i++;
// MsgSend.sendMobileMes(string,
// context, socketServerAddress, port);
SendMsg.sendMobileMes(string, alertInfoBO.getAlertReason(), socketServerAddress, port);
}
}
}
}
}
return false;
}
private List<AlertRuleBO> getListByCriteria(AlertInfoBO alertInfoBO,Criteria criteria){
criteria.add(Restrictions.gt("priority", alertInfoBO.getLevel()));
criteria.add(Restrictions.eq("type", alertInfoBO.getAlertType()));
criteria.add(Restrictions.eq("subType", alertInfoBO.getAlertSubType()));
criteria.add(Restrictions.eq("deprecated", 1));
criteria.add(Restrictions.eq("enabled", 1));
return criteria.list();
}
private void initConfig(){
Properties properties = new Properties();
try {
properties.load(this.getClass().getClassLoader().getResourceAsStream("mailConfig.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socketServerAddress = properties.getProperty("socket.address");
port = Integer.parseInt(properties.getProperty("socket.port"));
}
}