package edu.sjtu.infosec.ismp.manager.ERM.web.actions.respList;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
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.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo;
import org.infosec.ismp.manager.rmi.lm.pfLog.model.SystemLog;
import edu.sjtu.infosec.ismp.manager.ERM.model.LinkMan;
import edu.sjtu.infosec.ismp.manager.ERM.service.LinkManService;
import edu.sjtu.infosec.ismp.manager.ERM.service.RespProcService;
import edu.sjtu.infosec.ismp.manager.ERM.web.form.PhoneTreeform;
import edu.sjtu.infosec.ismp.manager.LM.pfLog.service.SystemLogService;
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;
import edu.sjtu.infosec.ismp.security.Role;
public class PhoneTreeAction extends DispatchAction {
private static Logger logger = Logger.getLogger(RespShowAction.class);
private SystemLogService logService;
public void setLogService(SystemLogService logService){
this.logService = logService;
}
/**
* 电话树
*/
private LinkManService linkManService;
private RespProcService respProcService;
public void setLinkManService(LinkManService linkManService) {
this.linkManService = linkManService;
}
public void setRespProcService(RespProcService respProcService) {
this.respProcService = respProcService;
}
//显示电话树
public ActionForward showtree(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String toPage = "success";
try{
toPage = "success";
String isAll = (request.getParameter("isAll")==null)?"0":request.getParameter("isAll");
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null){
userDomainList = user.getDomainList();
}else{
userDomainList = null;
}
//数据相关的基本信息
List<LinkMan> linkManList = new ArrayList<LinkMan>();
String respId=request.getParameter("respid");
if(respId==null || "".equals(respId)){
respId = (String) request.getSession().getAttribute("respid");
}
request.getSession().setAttribute("respid", respId);
String respname=request.getParameter("respname");
if(respname!=null){
respname=new String(request.getParameter("respname").getBytes("ISO8859-1"), "UTF-8");
request.setAttribute("respname",respname);
}else{
respname = (String) request.getAttribute("respname");
request.setAttribute("respname",respname);
}
if(respId==null){
if(isAll.equals("1")){
linkManList = linkManService.findAll();
}else{
linkManList = linkManService.findAllByDomain(userDomainList);
}
}else{
linkManList = linkManService.findByRespInfoId(Integer.parseInt(respId));
}
String basePath = request.getContextPath();
String treeList=linkManService.getTree(linkManList, basePath,respname);
//System.out.println("treeList==="+treeList);
request.setAttribute("treeList", treeList);
}catch(Exception e){
toPage = "failed";
logger.debug("应急响应--预案管理--电话树访问出错!");
e.printStackTrace();
}
logger.debug("=====toPage======="+toPage);
return mapping.findForward(toPage);
}
public ActionForward showedit(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
if(request.getParameter("respname")!=null){
request.setAttribute("respname",new String(request.getParameter("respname").getBytes("ISO8859-1"), "UTF-8"));
}
Integer linkManid = Integer.parseInt(request.getParameter("treeid"));
request.setAttribute("linkManid", linkManid);
LinkMan linkman = linkManService.findById(linkManid);
request.setAttribute("teamCode", linkman.getTeamCode());
if(linkman.getTeamCode()!=null&&!"".equals(linkman.getTeamCode())) {
request.setAttribute("isTeam", "yes");
}
request.setAttribute("link", linkman);
showtree(mapping,form,request,response);
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("success");
}
public ActionForward edit(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PhoneTreeform editlinkmanForm = (PhoneTreeform) form;
LinkMan linkman = linkManService.findById(new Integer(editlinkmanForm.getId()));
linkman.setEmail(editlinkmanForm.getEmail());
linkman.setName(editlinkmanForm.getName());
linkman.setFax(editlinkmanForm.getFax());
linkman.setJob(editlinkmanForm.getJob());
linkman.setMp(editlinkmanForm.getMp());
if(editlinkmanForm.getTeam_code()==null){
linkman.setJobid("DA_"+editlinkmanForm.getPid().toString());
}
linkman.setPid(new Integer(editlinkmanForm.getPid()));
linkman.setFid(new Integer(editlinkmanForm.getFid()));
String respid=(String) request.getSession().getAttribute("respid");
linkman.setRespInfo(respProcService.findRespBoById(respid));
linkManService.saveorupdate(linkman);
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_ERM);
if(linkman.getTeamCode()!=null&&!"".equals(linkman.getTeamCode())){
log.setOperationDesc("应急响应模块,修改电话树中小组信息,ID为:"+linkman.getId()+",小组编号为:"+linkman.getTeamCode());
}else{
log.setOperationDesc("应急响应模块,修改电话树中人员信息,ID为:"+linkman.getId()+",姓名为:"+linkman.getName());
}
log.setControl("成功");
logService.saveSystemLog(log);
showtree(mapping,form,request,response);
return mapping.findForward("success");
}
//addNode:添加子节点
public ActionForward addNode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IllegalAccessException, InvocationTargetException {
String forward = "success";
String respid = (String)request.getSession().getAttribute("respid");
PhoneTreeform editlinkmanForm = (PhoneTreeform) form;
LinkMan linkmanbo = new LinkMan();
//获得pid
Integer pid = linkManService.getMaxPid(Integer.parseInt(respid))+1;
//获得teamcode
String teamId = editlinkmanForm.getTeam_code();
boolean teamIdExit = false;
if(teamId!=null && !"".equals(teamId)) {
teamIdExit = linkManService.checkTeamId(Integer.parseInt(respid), teamId);
}
Integer fid = -1;
if(editlinkmanForm.getLinkManid()!=null&&editlinkmanForm.getLinkManid()!=""){
Integer linkmanId =Integer.parseInt(editlinkmanForm.getLinkManid());
if(linkmanId!=null&&!"".equals(linkmanId)){
LinkMan linkMan = linkManService.findById(linkmanId);
//获得fid
fid = linkMan.getPid();
}
}
if(!teamIdExit) {
BeanUtils.copyProperties(linkmanbo, editlinkmanForm);
linkmanbo.setFid(fid);
linkmanbo.setPid(pid);
if(teamId==null || "".equals(teamId)){
linkmanbo.setJobid("DA_"+pid.toString());
}
linkmanbo.setId(null);
linkmanbo.setRespInfo(respProcService.findRespBoById(respid));
if(teamId!=null || !"".equals(teamId)){
linkmanbo.setTeamCode(teamId);
}else{
linkmanbo.setTeamCode(null);
}
}else{
linkmanbo = linkManService.findByTeamId(teamId,respid);
linkmanbo.setEmail(editlinkmanForm.getEmail());
linkmanbo.setFax(editlinkmanForm.getFax());
linkmanbo.setJob(editlinkmanForm.getJob());
linkmanbo.setMp(editlinkmanForm.getMp());
linkmanbo.setName(editlinkmanForm.getName());
linkmanbo.setJobid("DA_"+linkmanbo.getPid().toString());
}
try {
linkManService.saveorupdate(linkmanbo);
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_ERM);
if(linkmanbo.getTeamCode()!=null&&!"".equals(linkmanbo.getTeamCode())){
log.setOperationDesc("应急响应模块,新增电话树中小组信息,ID为:"+linkmanbo.getId()+",小组编号为:"+linkmanbo.getTeamCode());
}else{
log.setOperationDesc("应急响应模块,新增电话树中人员信息,ID为:"+linkmanbo.getId()+",姓名为:"+linkmanbo.getName());
}
log.setControl("成功");
logService.saveSystemLog(log);
PrintWriter out = response.getWriter();
out = response.getWriter();
response.setContentType("text/html; charset=UTF-8");
out.println("<script language=\"javascript\">");
out.println("window.opener.location.href=window.opener.location.href;");
out.println("window.opener.location.reload();");
out.println("window.close();");
out.println("</script>");
out.close();
return null;
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward(forward);
}
/**
* addNode:删除子节点
*/
public ActionForward deleteNode(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String linkManId = request.getParameter("linkManId");
String respid = (String)request.getSession().getAttribute("respid");
LinkMan linkMan = linkManService.findById(new Integer(linkManId));
try{
if(linkMan!=null&&!"".equals(linkMan)){
String delStr=delete(linkMan.getPid(),respid);
//System.out.println("---deleteid---"+delStr);
linkManService.deleteByPid(delStr,respid);
//添加日志
OperatorDetails user = SecurityUserHolder.getCurrentUser();
SystemLog log = new SystemLog();
log.setUsername(user.getUsername());
List<Role> list=user.getRoleList();
String roles="";
for(Role role:list){
roles+=role.getRole()+",";
}
log.setRoleName(roles.substring(0,roles.length()-1));
log.setTime(new Timestamp(new Date().getTime()));
log.setModuleName(SystemModelInfo.MOD_ERM);
if(linkMan.getTeamCode()!=null&&!"".equals(linkMan.getTeamCode())){
log.setOperationDesc("应急响应模块,删除电话树小组中,ID为:"+linkMan.getId()+"下所有子节点");
}else{
log.setOperationDesc("应急响应模块,删除电话树人员信息,ID为:"+linkMan.getId()+",姓名为:"+linkMan.getName());
}
log.setControl("成功");
logService.saveSystemLog(log);
}
}catch(Exception e){
e.printStackTrace();
}
showtree(mapping,form,request,response);
System.out.println("删除成功");
return mapping.findForward("success");
}
//递归删除节点
String s ="";
public String delete(int pid,String respid) {//递归方法,循环调用
s += pid+",";
//根据当前pid查找其他fid=pid记录的id
List<LinkMan> list= linkManService.queryByPid(pid,respid);
for(LinkMan link:list){
delete(link.getPid(),respid);
}
return s.substring(0,s.lastIndexOf(","));
}
public ActionForward addteam(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("linkManid", request.getParameter("linkManid"));
request.setAttribute("teamCode", request.getParameter("teamCode"));
System.out.println("linkManid===="+request.getParameter("linkManid"));
System.out.println("teamCode===="+request.getParameter("teamCode"));
return mapping.findForward("addteam");
}
public ActionForward addperson(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
request.setAttribute("linkManid", request.getParameter("linkManid"));
request.setAttribute("teamCode", request.getParameter("teamCode"));
System.out.println("linkManid===="+request.getParameter("linkManid"));
System.out.println("teamCode===="+request.getParameter("teamCode"));
return mapping.findForward("addperson");
}
}