package edu.sjtu.infosec.ismp.manager.VPM.sd.web.actions; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.sql.Timestamp; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import key.HashStr; 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.apache.struts.upload.FormFile; import org.infosec.ismp.manager.rmi.comm.model.SystemModelInfo; 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.VPM.pm.comm.HtmlFactory; import edu.sjtu.infosec.ismp.manager.VPM.pm.comm.PMPage; import edu.sjtu.infosec.ismp.manager.VPM.pm.web.actions.TacticsAction; import edu.sjtu.infosec.ismp.manager.VPM.sd.comm.FileProcessUtil; import edu.sjtu.infosec.ismp.manager.VPM.sd.comm.XmlProcessUtil; import edu.sjtu.infosec.ismp.manager.VPM.sd.model.SoftwareInfo; import edu.sjtu.infosec.ismp.manager.VPM.sd.model.TypeInfo; import edu.sjtu.infosec.ismp.manager.VPM.sd.service.SoftwareManagerService; import edu.sjtu.infosec.ismp.manager.VPM.sd.service.SoftwareTypeInfoService; import edu.sjtu.infosec.ismp.manager.VPM.sd.web.form.SoftwareForm; import edu.sjtu.infosec.ismp.security.OperatorDetails; import edu.sjtu.infosec.ismp.security.Role; public class SoftwareAction extends DispatchAction { Logger logger = Logger.getLogger(SoftwareAction.class); //软件分发路径 private String softWarePatch; //软件分发接口 private SoftwareManagerService softwareManagerService; private SystemLogService systemlogservice; /** * @param systemlogservice the systemlogservice to set */ public void setSystemlogservice(SystemLogService systemlogservice) { this.systemlogservice = systemlogservice; } private SoftwareTypeInfoService softwareTypeInfoService; /** * @return the softwareManagerService */ public SoftwareManagerService getSoftwareManagerService() { return softwareManagerService; } /** * @param softwareManagerService the softwareManagerService to set */ public void setSoftwareManagerService( SoftwareManagerService softwareManagerService) { this.softwareManagerService = softwareManagerService; } /** * @return the softwareTypeInfoService */ public SoftwareTypeInfoService getSoftwareTypeInfoService() { return softwareTypeInfoService; } /** * @param softwareTypeInfoService the softwareTypeInfoService to set */ public void setSoftwareTypeInfoService( SoftwareTypeInfoService softwareTypeInfoService) { this.softwareTypeInfoService = softwareTypeInfoService; } /** * @return the softWarePatch */ public String getSoftWarePatch() { return softWarePatch.isEmpty() ? "c:\\manager" : softWarePatch; } /** * @param softWarePatch the softWarePatch to set */ public void setSoftWarePatch(String softWarePatch) { this.softWarePatch = softWarePatch; } /** * 查询所有软件信息 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward softwareAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ SoftwareForm softwareForm = (SoftwareForm)form; PMPage page = new PMPage(); String curpage = request.getParameter("currPage") != null && (!request.getParameter("currPage").equals("")) ? request .getParameter("currPage") : "1"; page.setCurrentPage(Integer.parseInt(curpage)); page.setBeginIndex((page.getCurrentPage() - 1) * page.getEveryPage()); Timestamp uploadStartTime=softwareForm.getStarttime() == null ? null : Timestamp.valueOf(softwareForm.getStarttime()); Timestamp uploadEndTime= softwareForm.getEndtime() == null ? null : Timestamp.valueOf(softwareForm.getEndtime()); List<SoftwareInfo> list = softwareManagerService.searchByConditions(softwareForm.getSi(), page, uploadStartTime , uploadEndTime); request.setAttribute("list", list); request.setAttribute("startTime", softwareForm.getStarttime()); request.setAttribute("endTime", softwareForm.getEndtime()); request.setAttribute("software", softwareForm.getSi()); request.setAttribute("page", page.getPageInfo()); request.setAttribute("currPage", page.getPageInfo().getCurrentPage()); request.setAttribute("totalPage", page.getPageInfo().getTotalPage()); return mapping.findForward("index"); } /* * 查询软件对象 */ public ActionForward softwareById(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ String softwareId = request.getParameter("sid"); if(HtmlFactory.isNotEmpty(softwareId)){ SoftwareInfo softwareInfo = softwareManagerService.searchById(Integer.valueOf(softwareId)); String startTime = TimeConvert(softwareInfo.getDispatchPolicy().getDispatchStartTime()); String endTime = TimeConvert(softwareInfo.getDispatchPolicy().getDispatchEndTime()); request.setAttribute("up_start_Time", startTime); request.setAttribute("up_end_Time", endTime); request.setAttribute("software", softwareInfo); return mapping.findForward("update"); } return null; } /** * 查询软件对象 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward softwareByIdAjax(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ String softwareId = request.getParameter("sid"); if(HtmlFactory.isNotEmpty(softwareId)){ StringBuffer sbf = new StringBuffer(); SoftwareInfo softwareInfo = softwareManagerService.searchById(Integer.valueOf(softwareId)); String startTime = TimeConvert(softwareInfo.getDispatchPolicy().getDispatchStartTime()); String endTime = TimeConvert(softwareInfo.getDispatchPolicy().getDispatchEndTime()); String info_conversion[][]={{"FILE","文件"},{"DIR","目录"}}; Object software_info[][] ={{"si_name","getName"},{"si_type","getType",info_conversion},{"si_size","getSize"},{"si_uploadTime","getUploadTime"}}; String software_type[][]= {{"t_name","getName"}}; String dispatch_conversion[][]={{"true","分发"},{"false","不分发"}}; String consistencyCheck[][]={{"true","是"},{"false","否"}}; Object softwaer_dispatch[][]={{"d_CheckTag","getDispatchCheckTag",dispatch_conversion}, {"d_consistencyCheckTag","getConsistencyCheckTag",consistencyCheck},{"d_StartDate","getDispatchStartDate"}, {"d_EndDate","getDispatchEndDate"},{"d_ThreadNum","getDispatchThreadNum"}}; String execute_conversion[][]={{"true","执行"},{"false","不执行"}}; Object softwaer_execute[][]={{"e_Tag","getExecuteCheckTag",execute_conversion},{"e_Path","getExecuteFilePath"},{"e_Parameter","getExecuteParameter"}, {"e_Message","getExecutePromptingMessage"}}; String validate_conversion[][]={{"true","验证"},{"false","不验证"}}; Object software_validate[][]={{"v_CheckTag","getValidateCheckTag",validate_conversion} ,{"v_FilePath","getValidateFilePath"}, {"v_FileVersion","getValidateFileVersion"} ,{"v_Key","getValidateRegisterKey"} ,{"v_Process","getValidateProcess"}, {"v_Service","getValidateService"}}; //分发策略时间转换 , String time_vonversion[][]={{"d_StartTime", startTime},{"d_EndTime",endTime},}; Object objs[][] = {{softwareInfo,software_info},{softwareInfo.getTypeInfo(),software_type} ,{softwareInfo.getDispatchPolicy(),softwaer_dispatch}, {softwareInfo.getExecutePolicy(),softwaer_execute},{softwareInfo.getValidatePolicy(),software_validate},{"add",time_vonversion}}; HtmlFactory.getDataArray(objs, sbf,"SOFTWAREINFO"); HtmlFactory.flushData(response,sbf); } return null; } /** * 添加软件 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward softwareAdd(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ SoftwareForm softwareForm = (SoftwareForm)form; if(upload(softwareForm)){ try { XmlProcessUtil.writeSoftwareXML(getSoftWarePatch(), softwareForm); softwareManagerService.save(softwareForm.getSi()); String falg="成功!"; try { softwareManagerService.save(softwareForm.getSi()); } catch (Exception e) { falg = "失败!"; }finally{ try { systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_sd, "添加软件", new Timestamp(System.currentTimeMillis()), falg); } catch (Exception e) { logger.debug("连接日志出错",e); } } } catch (Exception e) { FileProcessUtil.deletedSpecifyFile(softwareForm.getPath()); FileProcessUtil.deletedSpecifyFile(softwareForm.getXmlPath()); } } return null; } /** * 软件上传 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ private boolean upload(SoftwareForm softwareForm){ try { //将文件写入数出指定的目录 FormFile formFile =softwareForm.getFormFile(); if(!FileProcessUtil.checkDirectoryExist(getSoftWarePatch())){ FileProcessUtil.createDirectory(getSoftWarePatch()); } String path = getSoftWarePatch()+"\\"+formFile.getFileName(); InputStream in = formFile.getInputStream(); OutputStream out = new FileOutputStream(path); int read = 0; byte[] buffer = new byte[1024]; while((read = in.read(buffer,0,1024))!= -1){ out.write(buffer, 0, read); } in.close(); out.close(); //软件信息 String fileName = formFile.getFileName(); softwareForm.getSi().setName(fileName); softwareForm.getSi().setSize(Long.valueOf(formFile.getFileSize())); softwareForm.getSi().setMD5(FileProcessUtil.getHash(path, null, null)); softwareForm.getSi().setUploadTime(new Timestamp(System.currentTimeMillis())); String sub = fileName.substring(fileName.lastIndexOf("."),fileName.length()).toLowerCase(); softwareForm.getSi().setType(sub.equals(".rar") || sub.equals(".zip") ? "FILE" : "DIR"); softwareForm.getSi().getDispatchPolicy().setDispatchFormTag(false);//表示由用户打包 String hashStr = HashStr.getHash(FileProcessUtil.getHASHStr(softwareForm.getSi())); softwareForm.getSi().setValidate(hashStr); softwareForm.setPath(path); return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return false; } /** * 更新软件 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward updateSoftwareInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ SoftwareForm softwareForm = (SoftwareForm)form; if(HtmlFactory.isNotEmpty(softwareForm.getSi().getId().toString())){ SoftwareInfo softwareInfo = softwareManagerService.searchById(Integer.valueOf(softwareForm.getSi().getId())); softwareInfo.setValidatePolicy(softwareForm.getVp()); softwareInfo.setTypeInfo(softwareForm.getTi()); softwareInfo.setDispatchPolicy(softwareForm.getDp()); softwareInfo.setExecutePolicy(softwareForm.getEp()); softwareManagerService.update(softwareInfo); String falg="成功!"; try { softwareManagerService.update(softwareInfo); } catch (Exception e) { falg = "失败!"; }finally{ try { systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_sd, "更新软件", new Timestamp(System.currentTimeMillis()), falg); } catch (Exception e) { logger.debug("连接日志出错",e); } } } return null; } /** * 删除软件 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward delsoftware (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ SoftwareForm softwareForm = (SoftwareForm)form; String softwareId = request.getParameter("sid"); if(HtmlFactory.isNotEmpty(softwareId)){ String falg="成功!"; try { SoftwareInfo softwareInfo = softwareManagerService.searchById(Integer.valueOf(softwareId)); String path =getSoftWarePatch()+"\\"+softwareInfo.getName(); String xmlpath = getSoftWarePatch()+"\\"+softwareInfo.getName().substring(0, softwareInfo.getName().lastIndexOf("."))+".xml"; softwareManagerService.del(softwareInfo); if(FileProcessUtil.deleteFileByAbsolutePath(path)){ FileProcessUtil.deletedSpecifyFile(path); FileProcessUtil.deletedSpecifyFile(xmlpath); } } catch (Exception e) { falg = "失败!"; }finally{ try { systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_sd, "删除软件", new Timestamp(System.currentTimeMillis()), falg); } catch (Exception e) { logger.debug("连接日志出错",e); } } } return softwareAll(mapping,softwareForm,request,response); } /** * 批量删除 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward delsoftwareList (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ SoftwareForm softwareForm = (SoftwareForm)form; String strs[]= request.getParameterValues("sids"); String flag ="成功!"; try { for (int i = 0; i < strs.length; i++) { if(HtmlFactory.isNotEmpty(strs[i])){ SoftwareInfo softwareInfo = softwareManagerService.searchById(Integer.valueOf(strs[i])); String path =getSoftWarePatch()+"\\"+softwareInfo.getName(); String xmlpath = getSoftWarePatch()+"\\"+softwareInfo.getName().substring(0, softwareInfo.getName().lastIndexOf("."))+".xml"; softwareManagerService.del(softwareInfo); if(FileProcessUtil.deleteFileByAbsolutePath(path)){ FileProcessUtil.deletedSpecifyFile(path); FileProcessUtil.deletedSpecifyFile(xmlpath); } } } } catch (Exception e1) { flag ="失败!"; }finally{ try { systemlogservice.saveSystemLog(LogUtil.userName, LogUtil.roleName, SystemModelInfo.MOD_VPM_sd, "批量删除软件", new Timestamp(System.currentTimeMillis()), flag); } catch (Exception e) { logger.debug("连接日志出错",e); } } return softwareAll(mapping,softwareForm,request,response); } /** * 查询软件类型 * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward findAllSoftwareInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ StringBuffer sbf = new StringBuffer(); List<TypeInfo> list = softwareTypeInfoService.searchAll(); for(TypeInfo type : list){ HtmlFactory.getDataArray(type, sbf, "TYPE"); } HtmlFactory.flushData(response, sbf); return null; } /** * * @param timel * @return String 分钟转换成小时 */ private String TimeConvert(Long timel) { String time = ""; Long hour = timel / 60l; Long minute = timel % 60; if (minute == 0) { time = hour + ":00"; } else if (minute < 10) { time = hour + ":0" + minute; } else { time = hour + ":" + minute; } return time; } }