package edu.sjtu.infosec.ismp.manager.VPM.pm.web.actions;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.LinkedList;
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 org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceBO;
import edu.sjtu.infosec.ismp.manager.AM.service.AssetDeviceService;
import edu.sjtu.infosec.ismp.manager.GOSP.comm.LogUtil;
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.manager.SYSM.user.self.service.DomainService;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.HtmlFactory;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage;
import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPageUtil;
import edu.sjtu.infosec.ismp.manager.VPM.pm.model.PatchUpdateTactics;
import edu.sjtu.infosec.ismp.manager.VPM.pm.model.SensorClients;
import edu.sjtu.infosec.ismp.manager.VPM.pm.service.PatchTacticsService;
import edu.sjtu.infosec.ismp.manager.VPM.pm.service.SensorClientsService;
import edu.sjtu.infosec.ismp.manager.VPM.pm.web.form.PatchForm;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
public class PatchAction extends DispatchAction {
Logger logger = Logger.getLogger(PatchAction.class);
// SensorInfoManagerService
private SensorClientsService sensorClientsService;
private PatchTacticsService patchTacticsService;
//部门
private DomainService doaminService;
//资产
private AssetDeviceService assetDeviceService;
private SystemLogService systemlogservice;
/**
* @param systemlogservice the systemlogservice to set
*/
public void setSystemlogservice(SystemLogService systemlogservice) {
this.systemlogservice = systemlogservice;
}
/**
* Set get
* @return
*/
public DomainService getDoaminService() {
return doaminService;
}
public void setDoaminService(DomainService doaminService) {
this.doaminService = doaminService;
}
public AssetDeviceService getAssetDeviceService() {
return assetDeviceService;
}
public void setAssetDeviceService(AssetDeviceService assetDeviceService) {
this.assetDeviceService = assetDeviceService;
}
public SensorClientsService getSensorClientsService() {
return sensorClientsService;
}
public void setSensorClientsService(SensorClientsService sensorClientsService) {
this.sensorClientsService = sensorClientsService;
}
public PatchTacticsService getPatchTacticsService() {
return patchTacticsService;
}
public void setPatchTacticsService(PatchTacticsService patchTacticsService) {
this.patchTacticsService = patchTacticsService;
}
/**
* 获取winsensor 客户端
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
@SuppressWarnings("unchecked")
public ActionForward getWinSensorAssetInfo(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
PatchForm patchForm = (PatchForm) form;
OperatorDetails user= SecurityUserHolder.getCurrentUser();
//根据User 脚色权限查询委办局
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null)
{
userDomainList = user.getDomainList();
}else{
userDomainList=null;
}
PMPage page= HtmlFactory.getPage(request);
LinkedList linkList=sensorClientsService.getSensorInfos(userDomainList,patchForm.getS(), page.getBeginIndex(), page.getEveryPage(), patchForm.getCreateStartDate(), patchForm.getCreateEndDate());
Integer count =(Integer)linkList.getFirst();
PMPage page1 = PMPageUtil.createPage(page, count);
List<SensorClients> list = (List<SensorClients>) linkList.getLast();
StringBuffer sbf=new StringBuffer();
String[][] sObje={{"id","getId"},{"ip","getSensorIP"},{"name","getName"},{"gltime","getOperateTime"}};
String[][] adObje={{"acid","getId"},{"accode","getSingleCode"}};
String[][] dmainObje={{"dmid","getId"},{"dmname","getDomainName"}};
String[][] naObje ={{"accode","未关联"},{"acid","-1"}};
String[][] ndObje ={{"dmname","未关联"},{"dmid","-1"}};
for(SensorClients sc : list)
{
if(!(sc == null)){
AssetDeviceBO ad=sc.getAssetDevice();
Domain adom = sc.getDepartment();
boolean isad =HtmlFactory.isNotNull(ad);
boolean isdom =HtmlFactory.isNotNull(adom);
Object[][] objs={{sc,sObje},{ isad ? ad :"add", isad ? adObje: naObje},{isdom? adom : "add",isdom?dmainObje:ndObje}};
HtmlFactory.getDataArray(objs,sbf,"SH");
}
}
HtmlFactory.getDataArray(page1, sbf,"PAGE");
HtmlFactory.flushData(response,sbf);
return null;
}
/** 修改 资产 部门 名称
* updateSensorAssetInfo usai
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward usai(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
StringBuffer sbf = new StringBuffer();
String sid =request.getParameter("sid");
String name = request.getParameter("sname");
String sasset = request.getParameter("sasset");
String sdomain=request.getParameter("sdomain");
String unlink=request.getParameter("unlink");
// PatchUtil.isNotEmpty(msg) && PatchUtil.isNotEmpty(msg)
String msg ="";
String falg="成功!";
if(HtmlFactory.isNotEmpty(sid)){
SensorClients sc =sensorClientsService.getSensorClients(Integer.valueOf(sid));
if(HtmlFactory.isNotEmpty(name)){
name=HtmlFactory.conversionCoding(name);
sc.setName(name);
String[][] obj={{"data",name},{"general",""}};
Object objs[][]={{"add",obj}};
HtmlFactory.getDataArray(objs,sbf,"UPNAME");
msg ="修改winSensor客户端名称";
}else if(HtmlFactory.isNotEmpty(sasset)){
AssetDeviceBO asset = assetDeviceService.findById(Integer.valueOf(sasset));
sc.setAssetDevice(asset);
String[][] adObje={{"acid",asset.getId().toString()},{"data",asset.getSingleCode()},{"general","acid"}};
Object objs[][]={{"add",adObje}};
HtmlFactory.getDataArray(objs,sbf,"UPNAME");
msg ="修改winSensor客户端资产";
}else if(HtmlFactory.isNotEmpty(sdomain)){
try {
sdomain=HtmlFactory.conversionCoding(sdomain);
Domain domain= doaminService.findById(Integer.valueOf(sdomain));
sc.setDepartment(domain);
String[][] obj={{"dmid",domain.getId().toString()},{"data",domain.getDomainName()},{"general","dmid"}};
Object objs[][]={{"add",obj}};
HtmlFactory.getDataArray(objs,sbf,"UPNAME");
msg ="修改winSensor客户端域";
} catch (Exception e) {
e.printStackTrace();
}
}else if(HtmlFactory.isNotEmpty(unlink) && "unlink".equals(unlink)){
sc.setDepartment(null);
sc.setAssetDevice(null);
msg ="取消winSensor客户端关联";
}
try {
sensorClientsService.saveOrUpdateSensorClients(sc);
} catch (Exception e) {
falg = "失败!";
}finally{
try {
systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_pm, msg, new Timestamp(System.currentTimeMillis()), falg);
} catch (Exception e) {
logger.debug("连接日志出错",e);
}
}
}
HtmlFactory.flushData(response,sbf);
return null;
}
/** 查询 资产
* getAssetDeviceAll (getADL)
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward getADL(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
try {
StringBuffer sbf = new StringBuffer();
List<AssetDeviceBO> list = assetDeviceService.findAll();
String[][] adObje={{"acid","getId"},{"accode","getSingleCode"}};
for(AssetDeviceBO ad : list){
Object[][] objs ={{ad,adObje}};
HtmlFactory.getDataArray(objs,sbf,"ADL");
}
HtmlFactory.flushData(response,sbf);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/** 查询部门
* getDoMain (getDM)
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward getDM(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
OperatorDetails user= SecurityUserHolder.getCurrentUser();
//根据User 脚色权限查询委办局
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null)
{
userDomainList = user.getDomainList();
StringBuffer sbf = new StringBuffer();
String[][] dmainObje={{"dmid","getId"},{"dmname","getDomainName"}};
for(Domain dom : userDomainList){
Object[][] obj ={{dom,dmainObje}};
HtmlFactory.getDataArray(obj, sbf, "SDOM");
}
HtmlFactory.flushData(response,sbf);
}
return null;
}
/**
* 根据部门查询sernsor
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
@SuppressWarnings("unchecked")
public ActionForward getDoMainSensorCenter(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
PatchForm patchForm = (PatchForm) form;
OperatorDetails user= SecurityUserHolder.getCurrentUser();
//根据User 脚色权限查询委办局
List<Domain> userDomainList = new ArrayList<Domain>();
if(user != null)
{
userDomainList = user.getDomainList();
}else{
userDomainList=null;
}
String domainid=request.getParameter("domainid");
String clientid=request.getParameter("clientid");
String sd =request.getParameter("createStartDate");
String ed =request.getParameter("createEndDate");
sd= HtmlFactory.isNotEmpty(sd) ? sd : "";
ed= HtmlFactory.isNotEmpty(ed) ? ed : "" ;
List<SensorClients> list= null;
LinkedList linkList= null;
PMPage page = null;
if(HtmlFactory.isNotEmpty(domainid)){
Domain domain = new Domain();
domain.setId(new Integer(domainid));
page= HtmlFactory.getPage(request);
linkList= sensorClientsService.getSensorInfosByTactics(new SensorClients(domain),page.getBeginIndex(),page.getEveryPage(),patchForm.getCreateStartDate(),patchForm.getCreateEndDate());
Integer count = (Integer) linkList.getFirst();
page = PMPageUtil.createPage(page, count);
list = (List<SensorClients>) linkList.getLast();
}else if(HtmlFactory.isNotEmpty(clientid)){
SensorClients sensorClients= sensorClientsService.getSensorClients(Integer.valueOf(clientid));
list= new ArrayList<SensorClients>();
list.add(sensorClients);
}else{
page= HtmlFactory.getPage(request);
linkList=sensorClientsService.getSensorInfosAll(userDomainList,page.getBeginIndex(),page.getEveryPage(),patchForm.getCreateStartDate(),patchForm.getCreateEndDate());
Integer count = (Integer) linkList.getFirst();
page = PMPageUtil.createPage(page, count);
list = (List<SensorClients>) linkList.getLast();
}
StringBuffer sbf=new StringBuffer();
String[][] cvalue={{"0","不自动更新"},{"1","自动更新"}};
Object[][] patchObje={{"pid","getId"},{"uptime","getUpdateTime"},{"uttime","getLastChangeTime"},{"update","getIsAutoUpdate",cvalue}};
String[][] sObje={{"id","getId"},{"ip","getSensorIP"},{"name","getName"}};
String[][] ele ={{"starttime",sd},{"endtime",ed}};
for(SensorClients sc : list)
{
if(!(sc == null)){
PatchUpdateTactics put= sc.getPatchUpdateTactics() ;
Object[][] objs={{sc,sObje},{put,patchObje},{"add",ele}};
HtmlFactory.getDataArray(objs, sbf,"SH");
}
}
HtmlFactory.getDataArray(page, sbf,"PAGE",ele);
HtmlFactory.flushData(response,sbf);
return null;
}
/**
* 修改补丁策略
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward updateTactics(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
String sid =request.getParameter("sid");
String tid =request.getParameter("tid");
if(HtmlFactory.isNotEmpty(sid) && HtmlFactory.isNotEmpty(tid)){
SensorClients sensorClient = sensorClientsService.getSensorClients(Integer.valueOf(sid));
PatchUpdateTactics patchUpdateTactics= patchTacticsService.getPachStrategyById(Integer.valueOf(tid));
sensorClient.setPatchUpdateTactics(patchUpdateTactics);
String flag ="成功!";
try {
sensorClientsService.saveOrUpdateSensorClients(sensorClient);
} catch (Exception e1) {
flag ="失败!";
}finally{
try {
systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_pm, "修改补丁策略", new Timestamp(System.currentTimeMillis()), flag);
} catch (Exception e) {
logger.debug("连接日志出错",e);
}
}
return getDoMainSensorCenter(mapping,form,request,response);
}
return null;
}
/**
* 批量修改补丁策略
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward updateListTactics(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws IOException {
String[] sids =request.getParameterValues("sidList");
String tid =request.getParameter("tid");
if(HtmlFactory.isNotNull(sids) && HtmlFactory.isNotEmpty(tid)){
String flag ="成功!";
try {
for(String sid : sids){
SensorClients sensorClient = sensorClientsService.getSensorClients(Integer.valueOf(sid));
PatchUpdateTactics patchUpdateTactics= patchTacticsService.getPachStrategyById(Integer.valueOf(tid));
sensorClient.setPatchUpdateTactics(patchUpdateTactics);
sensorClientsService.saveOrUpdateSensorClients(sensorClient);
}
} catch (Exception e1) {
flag ="失败!";
}finally{
try {
systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_pm, "批量更新补丁策略", new Timestamp(System.currentTimeMillis()), flag);
} catch (Exception e) {
logger.debug("连接日志出错",e);
}
}
}
return getDoMainSensorCenter(mapping,form,request,response);
}
}