package edu.sjtu.infosec.ismp.manager.EM.web.actions;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import edu.sjtu.infosec.ismp.manager.EM.comm.BaseAction;
import edu.sjtu.infosec.ismp.manager.EM.comm.Page;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventcorrruleResult;
import edu.sjtu.infosec.ismp.manager.EM.dao.queryResult.EventrealdispResult;
import edu.sjtu.infosec.ismp.manager.EM.model.Eventcorrrule;
import edu.sjtu.infosec.ismp.manager.EM.model.Eventrealdisp;
import edu.sjtu.infosec.ismp.manager.EM.util.PageUtil;
import edu.sjtu.infosec.ismp.manager.EM.web.form.EventCorrelationForm;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
/**
* web层 事件关联Action.
*
* @version 2009-06-02
* @author yang li
*/
public class EventCorrelationAction extends BaseAction {
//private static int curPage = 1;
private static final int everyPageSize = 18;
protected final Log log = LogFactory.getLog(getClass());
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private EventBaseClass eventBaseClass;
private OperatorDetails eventLogClass = null;
public void setEventBaseClass(EventBaseClass eventBaseClass) {
this.eventBaseClass = eventBaseClass;
}
/**
* 获取查询参数
*
* @param request
* HttpServletRequest
* @return 查询参数Map
* @throws UnsupportedEncodingException
*/
public Map getParamMap(HttpServletRequest request)
throws UnsupportedEncodingException {
Map paramMap = new HashMap();
String encoding = "ISO-8859-1";
// String encoding = "GBK";
Enumeration paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String paramName = (String) paramNames.nextElement();
if (null != request.getParameter(paramName)
&& !"".equals(request.getParameter(paramName).trim())) {
String paramValue = new String(request.getParameter(paramName)
.getBytes(), "utf-8");
if (null != paramValue && !paramValue.trim().equals("")) {
paramMap.put(paramName, paramValue);
request.setAttribute(paramName, paramValue);
}
}
}
return paramMap;
}
/**
* 得到委办局ID
* @param request
* @return
*/
public Integer getBureauId(HttpServletRequest request){
String bureauId = request.getParameter("bureauId");
Integer id = new Integer(0);
if(bureauId == null || bureauId.equals("")){
List<Domain> managerBoList = SecurityUserHolder.getCurrentUser().getDomainList();
if(managerBoList != null && managerBoList.size() > 0){
Domain managerBo = managerBoList.get(0);
id = managerBo.getId();
}
}else{
id = Integer.parseInt(bureauId);
}
return id;
}
/**
* 跳转到事件关联页面,带过一个事件关联表记录的list
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventCorrelation(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Page page = new Page();
page.setEveryPage(15);
// mark用来标记选择跳转到的页数
String pageMark = request.getParameter("mark");
String pageNo = request.getParameter("pageno") == null ? "1" : request.getParameter("pageno");
if (null == pageMark) {
pageMark = pageNo;
page.setCurrentPage(Integer.parseInt(pageNo));
request.setAttribute("pageMark", Integer.parseInt(pageMark));
} else {
page.setCurrentPage(Integer.parseInt(pageMark==""?"1":pageMark));
request.setAttribute("pageMark", pageMark);
}
EventcorrruleResult results = eventBaseClass.getEventcorrruleService().queryAllByPage(page, SecurityUserHolder.getCurrentUser().getUsername());
if(results != null){
List<Eventcorrrule> list = results.getEvcors();
page = results.getPage();
request.setAttribute("eventcorrruleList", list);
request.setAttribute("page", page);
}else{
request.setAttribute("page", new Page());
}
return mapping.findForward("eventCorrelation");
}
/**
* 添加事件关联规则
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventCorrelationSave(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/**
* 日志信息添加
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
eventBaseClass.getLogService().saveSystemLog(eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块",
"添加事件关联规则", Timestamp.valueOf(sdf.format(new Date())), "true");
// System.out.println(request.getContentType());
// request.setCharacterEncoding("UTF-8");
EventCorrelationForm eventCorrelationForm = (EventCorrelationForm)form;
// Map map = getParamMap(request);
Eventcorrrule eventcorrrule = new Eventcorrrule();
BeanUtils.copyProperties(eventcorrrule, eventCorrelationForm);
eventcorrrule.setUserName(eventLogClass.getUsername());
eventcorrrule.setOperation((byte)1);
eventBaseClass.getEventcorrruleService().add(eventcorrrule);
return eventCorrelation(mapping, form, request, response);
}
/**
* 关联规则应用
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventCorrelationInUse(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
/**
* 日志信息添加
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
List<Domain> managerBoList = eventLogClass.getDomainList();
Integer[] ids = new Integer[managerBoList.size()];//当前登陆用户所属委办局的数组
if(managerBoList != null && managerBoList.size() > 0){
for(int i = 0; i < managerBoList.size(); i ++){
Domain managerBo = managerBoList.get(i);
int id = managerBo.getId();
ids[i] = id;
}
}
eventBaseClass.getLogService().saveSystemLog(eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块",
"关联规则应用", Timestamp.valueOf(sdf.format(new Date())), "");
Page page = new Page();
page.setEveryPage(everyPageSize);
String pageMark = request.getParameter("mark");
String pageNo = request.getParameter("pageno") == null ? "1" : request.getParameter("pageno");
if (null == pageMark) {
pageMark = pageNo;
page.setCurrentPage(Integer.parseInt(pageNo));
request.setAttribute("pageMark", Integer.parseInt(pageMark));
} else {
page.setCurrentPage(Integer.parseInt(pageMark==""?"1":pageMark));
request.setAttribute("pageMark", pageMark);
}
String useIn = request.getParameter("useIn");
String winLen = request.getParameter("winLen");
String inUseStri = "";
// 传多个关联规则的ID的字符串:inUseStri;时间戳:timeLen(时间戳改为毫秒:秒*1000;分*1000*60)
if(useIn != null && useIn.length() > 0){
inUseStri = useIn.substring(0, useIn.length() - 1);
}
long timeLen = Long.parseLong(winLen) * 1000;
/**
* 把inUseStri和timeLen传入到service层调用方法返回一个List,对这个List进行分页
*/
List<Eventrealdisp> eventRealDispList = eventBaseClass.getEventStatisticsService().queryEventrealdispByRules(inUseStri, timeLen, ids);
EventrealdispResult results = myListGroup(page, eventRealDispList);
//表示的分页后的List,但是这个list里面存储的是一个数组
List<Object> realDispList = new ArrayList<Object>();
if(results != null){
realDispList = results.getList();//list里面存储的是数组
page = results.getPage();
}
request.setAttribute("timeLen", winLen);
request.setAttribute("useIn", useIn);
request.setAttribute("page", page);
request.setAttribute("realDispList", realDispList);
return mapping.findForward("eventCorrelationInUse");
}
/**
* 将一个List进行分页
* @param page
* @param list
* @return
*/
public static EventrealdispResult myListGroup(Page page, List<Eventrealdisp> list){
if(list != null && list.size() > 0){
EventrealdispResult result = new EventrealdispResult();
PageUtil util = new PageUtil();
page = util.createPage(page.getEveryPage(), page.getCurrentPage(), list.size());
List<Object> targetList = new ArrayList<Object>();
int begin = page.getEveryPage() * (page.getCurrentPage() - 1);
int end = begin + everyPageSize;
for(int i = begin; i < end; i ++){
if(i < list.size()){
targetList.add(list.get(i));
}
}
result.setPage(page);
result.setList(targetList);
return result;
}
return null;
}
/**
* 该方法用来删除点击关联规则应用后的数据
*/
public ActionForward eventCorrelationDel(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception{
String str = request.getParameter("deleteIn");
List ids = new ArrayList();
for(String s : str.split(",")){
ids.add(Integer.parseInt(s));
}
eventBaseClass.getEventrealdispService().delete(ids);
return eventCorrelationInUse(mapping, form, request, response);
}
/**
* 该方法用来删除关联规则
*/
public ActionForward correlationDelete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
/**
* 日志信息添加
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
eventBaseClass.getLogService().saveSystemLog(eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块",
"关联规则删除", Timestamp.valueOf(sdf.format(new Date())), "");
String ids = request.getParameter("deleteIn");
List list = new ArrayList();
for(String id : ids.split(",")){
list.add(Integer.parseInt(id));
}
eventBaseClass.getEventcorrruleService().delete(list);
return eventCorrelation(mapping, form, request, response);
}
/**
* 进行修改页面的跳转
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventCorrelationUpdate(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
String id = request.getParameter("id");
Eventcorrrule eventcorrrule = eventBaseClass.getEventcorrruleService().get(Integer.parseInt(id));
request.setAttribute("eventcorrrule", eventcorrrule);
return eventCorrelation(mapping, form, request, response);
}
/**
* 执行修改的操作
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward eventCorrelationDoUpdate(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
/**
* 日志信息添加
*/
eventLogClass = SecurityUserHolder.getCurrentUser();
eventBaseClass.getLogService().saveSystemLog(eventLogClass.getUsername(),
eventLogClass.getRoleList().get(0).getName(), "事件模块",
"修改关联规则", Timestamp.valueOf(sdf.format(new Date())), "");
EventCorrelationForm eventCorrelationForm = (EventCorrelationForm)form;
// Map map = getParamMap(request);
Eventcorrrule eventcorrrule = new Eventcorrrule();
BeanUtils.copyProperties(eventcorrrule, eventCorrelationForm);
eventcorrrule.setOperation((byte)1);
eventcorrrule.setUserName(eventLogClass.getUsername());
eventBaseClass.getEventcorrruleService().update(eventcorrrule);
return eventCorrelation(mapping, form, request, response);
}
}