package edu.sjtu.infosec.ismp.manager.BSAM.web.actions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 edu.sjtu.infosec.ismp.manager.BSAM.comm.Constants;
import edu.sjtu.infosec.ismp.manager.BSAM.comm.DomainComparator;
import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineCabinet;
import edu.sjtu.infosec.ismp.manager.BSAM.model.MachineRoom;
import edu.sjtu.infosec.ismp.manager.BSAM.model.SubUnitVO;
import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineCabinetService;
import edu.sjtu.infosec.ismp.manager.BSAM.service.MachineRoomService;
import edu.sjtu.infosec.ismp.manager.BSAM.service.SecurityAreaService;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.comm.SecurityUserHolder;
import edu.sjtu.infosec.ismp.manager.SYSM.user.self.service.DomainService;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
public class SituationAction extends DispatchAction {
private static Logger logger = Logger.getLogger(SituationAction.class);
private SecurityAreaService securityAreaService;
private MachineRoomService machineRoomService;
private MachineCabinetService machineCabinetService;
private DomainService domainService;
public void setSecurityAreaService(SecurityAreaService securityAreaService) {
this.securityAreaService = securityAreaService;
}
public void setMachineRoomService(MachineRoomService machineRoomService) {
this.machineRoomService = machineRoomService;
}
public void setMachineCabinetService(MachineCabinetService machineCabinetService) {
this.machineCabinetService = machineCabinetService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public ActionForward getSecurityAreaSituationList(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String toPage = "securityAreaSituationList";///跳转的页面
List<Domain> userDomainList = null;
StringBuffer userDomainStr = new StringBuffer();
try{
String isAll = (null == request.getParameter("isAll"))?"0":request.getParameter("isAll");///如果为空则赋值为0。
OperatorDetails user = SecurityUserHolder.getCurrentUser();///取得当前用户。
if(null != user){
userDomainList = user.getDomainList();///如果用户不为空,将用户所在的所有域查出赋值到userDomainList。
DomainComparator comparator = new DomainComparator();///新建一个domain比较器
///将得到的userDomainList按照comparator定义的顺序排序,保证页面每次出现的顺序一致
Collections.sort(userDomainList,comparator);
///遍历userDomainList,将domain的id组成一个字符串
for (int i = 0; i < userDomainList.size(); i++) {
if(i != (userDomainList.size()-1)){
userDomainStr.append(userDomainList.get(i).getId()).append(",");
}else{
userDomainStr.append(userDomainList.get(i).getId());
}
}
}
request.setAttribute("userDomainStr", userDomainStr.toString());///用户域id
request.setAttribute("userDomainList", userDomainList);///用户域
request.setAttribute("isAll", isAll );
}catch(Exception e){
toPage = "failed";
logger.debug("态势分析--态势管理--首页访问出错啦!");
e.printStackTrace();
}
logger.debug("=====toPage======="+toPage);
request.setAttribute("situationMenu", "location");
return mapping.findForward(toPage);
}
public ActionForward getTopMachineSituationList(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
String isAll = (null == request.getParameter("isAll"))?"0":request.getParameter("isAll");///如果为空则赋值为0。
request.setAttribute("isAll", isAll );
request.setAttribute("situationMenu", "topSituation");
return mapping.findForward("topMachineSituationList");
}
public ActionForward getSubUnitList(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
int currPage = 1;
Double totalPage = 0d;
int totalNum = 0;
int startResult = 0;
int maxResult = 5;
String toPage = "";
try {
// 分页定义的相关的基本信息
String cp = (request.getParameter("currPage") == null) ? "1" : request.getParameter("currPage");
if (null != cp && !cp.equals("")) {
currPage = Integer.parseInt(cp);
}
startResult = (currPage - 1) * maxResult;
if (startResult < 0) {
startResult = 0;
}
//数据相关的基本信息
List<SubUnitVO> subUnitList = new ArrayList<SubUnitVO>();
String type = request.getParameter("type");
String id = request.getParameter("id");
StringBuffer subUnitIds = new StringBuffer();
if(Constants.AnQuanYu.equals(type)){
String name = "域";
if(null != domainService.findById(Integer.parseInt(id))){
name = domainService.findById(Integer.parseInt(id)).getDomainName();
}
///取得域下的机房和主机(散户)列表 分页
subUnitList = securityAreaService.getSubUnitById(id, startResult, maxResult);
totalNum = securityAreaService.getSubUnitCountById(id);
///拼接subUnit的id,机房用","分隔,机柜用";"分隔,主机用":"分隔。
if(null != subUnitList && subUnitList.size() > 0){
for (int i = 0; i < subUnitList.size(); i++) {
if(Constants.JiFang.equals(subUnitList.get(i).getType())){
subUnitIds.append(subUnitList.get(i).getId() + ",");
}else if(Constants.ZhuJi.equals(subUnitList.get(i).getType())){
subUnitIds.append(":" + subUnitList.get(i).getId());
}
}
}
request.setAttribute("name", name);
toPage = "securityAreaSubUnitList";///跳转标识
}else if(Constants.JiFang.equals(type)){
String name = "机房";
MachineRoom tempMachineRoom = machineRoomService.getMachineRoomById(Integer.parseInt(id));
if(null != tempMachineRoom){
name = tempMachineRoom.getDomain().getDomainName() + "|" + tempMachineRoom.getMachineRoomName();
}
///取得机房下的机柜和主机列表 分页
subUnitList = machineRoomService.getSubUnitById(id, startResult, maxResult);
totalNum = machineRoomService.getSubUnitCountById(id);
///拼接subUnit的id,机房用","分隔,机柜用";"分隔,主机用":"分隔。
if(null != subUnitList && subUnitList.size() > 0){
for (int i = 0; i < subUnitList.size(); i++) {
if(Constants.JiGui.equals(subUnitList.get(i).getType())){
subUnitIds.append(subUnitList.get(i).getId() + ";");
}else if(Constants.ZhuJi.equals(subUnitList.get(i).getType())){
subUnitIds.append(":" + subUnitList.get(i).getId());
}
}
}
request.setAttribute("name", name);
toPage = "machineRoomSubUnitList";///跳转标识
}else if(Constants.JiGui.equals(type)){
String name = "机柜";
MachineCabinet tempMachineCabinet = machineCabinetService.getMachineCabinetById(Integer.parseInt(id));
if(null != tempMachineCabinet){
name = tempMachineCabinet.getMachineRoom().getDomain().getDomainName()
+ "|" + tempMachineCabinet.getMachineRoom().getMachineRoomName()
+ "|" + tempMachineCabinet.getMachineCabinetName();
}
///取得机柜下的主机列表 分页
subUnitList = machineCabinetService.getSubUnitById(id, startResult, maxResult);
totalNum = machineCabinetService.getSubUnitCountById(id);
///拼接subUnit的id,机房用","分隔,机柜用";"分隔,主机用":"分隔。
if(null != subUnitList && subUnitList.size() > 0){
for (int i = 0; i < subUnitList.size(); i++) {
subUnitIds.append(":" + subUnitList.get(i).getId());
}
}
request.setAttribute("name", name);
toPage = "machineCabinetSubUnitList";///跳转标识
}
//分页定义的相关的基本信息
totalPage = Math.ceil((double) totalNum / maxResult);
if (totalPage > 0 && currPage <= 0) {
currPage = 1;
}
request.setAttribute("subUnitIds", subUnitIds.toString());
request.setAttribute("type", type);
request.setAttribute("id", id);
request.setAttribute("subUnitList", subUnitList);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("currPage", currPage);
request.setAttribute("totalPage", totalPage.intValue());
request.setAttribute("situationMenu", "location");
return mapping.findForward(toPage);
}
}