package edu.sjtu.infosec.ismp.manager.VPM.sd.comm;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.DispatchPolicy;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.ExecutePolicy;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.SoftwareInfo;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.ValidatePolicy;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.container.BaseInfoManagerBO;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.container.DispatchPolicyManagerBO;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.container.ExecutePolicyManagerBO;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.container.SoftwareManagerBO;
import edu.sjtu.infosec.ismp.manager.VPM.sd.model.container.ValidatePolicyManagerBO;
import edu.sjtu.infosec.ismp.manager.VPM.sd.web.form.SoftwareForm;
/**
* @Title: XmlProcessUtil.java
* @Package edu.sjtu.infosec.ismp.manager.virus.software.util
* @Description: TODO
* @author wjianzhuo
* @date 2009-8-12 下午05:12:51
* @version V1.0
*/
/**
* @ClassName: XmlProcessUtil
* @Description: TODO
* @author wjianzhuo
* @date 2009-8-12 下午05:12:51
*
*/
public class XmlProcessUtil {
// public static void main(String[] args) throws Exception {
// // 产生路径和文件名
// String path = "C:\\test\\software_temp.xml";
// // 产生软件BO
// SoftwareCenterBO bo = new SoftwareCenterBO();
// // 产生基本信息BO
// BaseInfoCenterBO baseInfo = new BaseInfoCenterBO();
// baseInfo.setUploadTime("2009-10-10 10:10:10");
// baseInfo.setMD5("XDDOL323444PDX");
// baseInfo.setName("software_temp.xml");
// baseInfo.setSize(101231313l);
// baseInfo.setType("FILE");
// baseInfo.setCategory("系统软件");
// // 把基本信息BO加入到软件信息BO中
// bo.setBaseInfoCenterBO(baseInfo);
//
// // 产生分发策略信息BO
// DispatchPolicyCenterBO dispatch = new DispatchPolicyCenterBO();
// dispatch.setConsistencyCheckTag(null);
// dispatch.setDispatchFormTag(false);
// dispatch.setDispatchCheckTag(true);
// dispatch.setDispatchThreadNum(10);
// dispatch.setDispatchEndDate(null);
// dispatch.setDispatchStartDate(null);
// dispatch.setDispatchEndTime(19 * 60 * 60 * 1000L);
// dispatch.setDispatchStartTime((24 - 19 + 7) * 60 * 60 * 1000L);
// dispatch.setDispatchPriority(2);
// // 把分发策略BO加入到软件信息BO中
// bo.setDispatchPolicyCenterBO(dispatch);
//
// // 产生执行策略信息BO
// ExecutePolicyCenterBO execute = new ExecutePolicyCenterBO();
// execute.setExecuteCheckTag(true);
// execute.setExecuteFilePath(".//setup//setup.exe");
// execute.setExecuteParameter("-d setup.exe");
// execute.setExecutePromptingMessage("正在安装软件....");
// // 把执行策略BO加入到软件信息BO中
// bo.setExecutePolicyCenterBO(execute);
//
// // 产生验证策略信息BO
// ValidatePolicyCenterBO validate = new ValidatePolicyCenterBO();
// validate.setValidateCheckTag(true);
// validate.setValidateFilePath("c://dest//360setup.exe");
// validate.setValidateFileVersion(1.0);
// validate.setValidateProcess("360.exe");
// validate.setValidateRegisterKey("LOCALHOST_SOFTWARE.exe.exe");
// validate.setValidateService("360.service");
// bo.setValidatePolicyCenterBO(validate);
// // 调用写入XML操作方法
// writeSoftwareXML(path, bo);
// XMLConfiguration config = getConfiguration(path);
// // 只有new一个XMLConfiguration的实例就可以了.
// String executeTag = config.getString("base-info.type");
//
// System.out.println("execute-policy.execute-tag: "
// + config.getString("base-info.type"));
// String version = config
// .getString("validate-policy.validate-file-version");
// bo = getSoftwareCenterBOByXml(path);
// if (bo != null) {
// System.out.println(bo.toString());
// } else {
// System.out.println("BO is null");
// }
// }
/**
*
* getConfiguration decription : 得到XML操作对象
*
* @param absolutePath
* 需要添加的文件路径和文件名 如:c:/test/newbook.xml 或 c:\\test\\newbook.xml
* @return
*/
public static XMLConfiguration getConfiguration(String absolutePath) {
File file = new File(absolutePath);
if (file == null || !file.exists()) {
return null;
}
XMLConfiguration config = null;
try {
config = new XMLConfiguration(file);
} catch (ConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return config;
}
/**
*
* getSoftwareCenterBOByXml decription : 根据XML文件的绝对路径得到该文件对应的软件信息对象
*
* @param absolutePath
* 需要操作的XML文件路径和文件名 如:c://test//newbook.xml
* @return
*/
public static SoftwareManagerBO getSoftwareManagerBOByXml(
String absolutePath) {
SoftwareManagerBO software = null;
try {
// 根据绝对路径得到XML操作句柄
XMLConfiguration config = getConfiguration(absolutePath);
if (config == null) {
return null;
}
// 分发软件基础类
software = new SoftwareManagerBO();
// 判断根据该XML得到对应的软件信息BO对象是否为空的标志
boolean isNullTag = true;
// 根据XML操作句柄得到软件基本信息BO对象
BaseInfoManagerBO baseInfo = getBaseInfoManagerBO(config);
if (baseInfo != null) {
// 设置基本信息BO对象
software.setBaseInfoManagerBO(baseInfo);
isNullTag = false;
}
// 根据XML操作句柄得到软件分发策略信息BO对象
DispatchPolicyManagerBO dispatch = getDispatchPolicyManagerBO(config);
if (dispatch != null) {
// 设置软件分发策略信息BO对象
software.setDispatchPolicyManagerBO(dispatch);
isNullTag = false;
}
// 根据XML操作句柄得到软件执行策略信息BO对象
ExecutePolicyManagerBO execute = getExecutePolicyManagerBO(config);
if (execute != null) {
// 设置软件执行策略信息BO对象
software.setExecutePolicyManagerBO(execute);
isNullTag = false;
}
// 根据XML操作句柄得到软件验证策略信息BO对象
ValidatePolicyManagerBO validate = getValidatePolicyManagerBO(config);
if (validate != null) {
// 设置软件验证策略信息BO对象
software.setValidatePolicyManagerBO(validate);
isNullTag = false;
}
// 根据该XML文件并没有得到相对应的软件信息对象的情况
if (isNullTag) {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return software;
}
return software;
}
/**
*
* writeSoftwareXML decription : 书写软件XML标签集
*
* @param absolutePath
* 需要添加的文件路径和文件名 如:c:/test/newbook.xml 或 c:\\test\\newbook.xml
* @param bo
* @throws IOException
*/
public static void writeSoftwareXML(String absolutePath,
SoftwareForm sfotwareFomr) throws IOException {
// 如果产生XML文件的路径和文件名为空的情况或者软件对象为空,或者软件对象中的基本信息为空,
// 或者软件对象分发策略为空,或者软件对象的执行策略为空,或者软件的验证策略为空的情况
SoftwareInfo bo = sfotwareFomr.getSi();
if (absolutePath == null || absolutePath.trim().length() <= 0
|| bo == null || bo == null
|| bo.getDispatchPolicy() == null
|| bo.getExecutePolicy() == null
|| bo.getValidatePolicy() == null) {
return;
}
String name = bo.getName().substring(0,bo.getName().lastIndexOf("."));
String path = absolutePath+"\\"+name+".xml";
// 根据路径和文件名得到文件输出流
OutputStreamWriter fs = new OutputStreamWriter(new FileOutputStream(path), "UTF-8");
// 书写软件XML头信息
writeXmlHeadInfo(fs);
// 书写软件基本信息XML标签集
writeBaseInfoManagerXml(fs, bo);
// 书写软件分发策略XML标签集
writeDispatchPolicyManagerXml(fs, bo.getDispatchPolicy());
// 书写软件执行策略XML标签集
writeExecutePolicyManagerXml(fs, bo.getExecutePolicy());
// 书写软件验证策略XML标签集
writeValidatePolicyManagerXml(fs, bo.getValidatePolicy());
// 书写软件XML尾部信息
writeXmlFootInfo(fs);
fs.flush();
// 关闭写入流
fs.close();
sfotwareFomr.setXmlPath(path);
}
/**
*
* writeXmlHeadInfo decription : 书写软件XML头部信息
*
* @param fs
* @throws IOException
*/
private static void writeXmlHeadInfo(OutputStreamWriter fs)
throws IOException {
fs.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
fs.write("\n<software>");
}
/**
*
* writeBaseInfoManagerXml decription : 书写软件基本信息XML标签集
*
* @param fs
* @param BaseInfoManagerBO
* @throws IOException
*/
private static void writeBaseInfoManagerXml(OutputStreamWriter fs,
SoftwareInfo bo) throws IOException {
// --- 基本信息 ---
fs.write("\n\t<!-- 基本信息 -->");
fs.write("\n\t<base-info>\n");
// 软件名
fs.write("\t\t<!-- 软件名 -->\n");
fs.write("\t\t<name>");
fs.write(bo.getName() == null ? "" : bo.getName().trim());
fs.write("</name>\n");
// 软件类型
fs.write("\t\t<!-- 软件类型 FILE or DIR -->\n");
fs.write("\t\t<type>");
fs.write(bo.getType() == null ? "" : bo.getType().trim());
fs.write("</type>\n");
// 软件类别
fs.write("\t\t<!-- 软件类别 -->\n");
fs.write("\t\t<category>");
fs.write(bo.getTypeInfo().getName() == null ? "" : bo.getTypeInfo().getName().trim());
fs.write("</category>\n");
// 软件大小
fs.write("\t\t<!-- 软件大小,字节 -->\n");
fs.write("\t\t<size>");
fs.write(bo.getSize() == null ? "" : bo.getSize() + "");
fs.write("</size>\n");
// 软件MD5
fs.write("\t\t<!-- 软件MD5 -->\n");
fs.write("\t\t<MD5>");
fs.write(bo.getMD5() == null ? "" : bo.getMD5());
fs.write("</MD5>\n");
// 软件发布时间
fs.write("\t\t<!-- 软件发布时间 -->\n");
fs.write("\t\t<upload-time>");
fs.write(bo.getUploadTime() == null ? TimeProcessUtil
.getNowDateString() : bo.getUploadTime().toString().trim() + "");
fs.write("</upload-time>\n");
// 验证信息
fs.write("\t\t<!-- 验证信息-->\n");
fs.write("\t\t<validate>");
fs.write(bo.getValidate() == null ? "" : bo.getValidate().trim() + "");
fs.write("\t\t</validate>\n");
fs.write("\t</base-info>\n");
}
/**
*
* writeDispatchPolicyManagerXml decription : 书写软件分发策略XML标签集
*
* @param fs
* @param bo
* @throws IOException
*/
private static void writeDispatchPolicyManagerXml(OutputStreamWriter fs,
DispatchPolicy bo) throws IOException {
// --- 分发策略 ---
fs.write("\n\t<!-- 分发策略 -->");
fs.write("\n\t<dispatch-policy>\n");
// 是否需要分发标志
fs.write("\t\t<!-- 分发标志,是否需要分发标志 -->\n");
fs.write("\t\t<dispatch-check-tag>");
fs.write(bo.getDispatchCheckTag() == null ? "false" : bo
.getDispatchCheckTag()
+ "");
fs.write("</dispatch-check-tag>\n");
// 是否需要进行一致性检查标志
fs.write("\t\t<!-- 是否需要进行一致性检查标志 -->\n");
fs.write("\t\t<consistency-check-tag>");
fs.write(bo.getConsistencyCheckTag() == null ? "false" : bo
.getConsistencyCheckTag()
+ "");
fs.write("</consistency-check-tag>\n");
// rar形态表示标志 true:表示是我们自己打的rar包 false:表示是用户上传的rar包
fs
.write("\t\t<!-- rar形态表示标志 true:表示是我们自己打的rar包 false:表示是用户上传的rar包 -->\n");
fs.write("\t\t<dispatch-form-tag>");
fs.write(bo.getDispatchFormTag() == null ? "" : bo.getDispatchFormTag()
+ "");
fs.write("</dispatch-form-tag>\n");
// 分发优先级, 0, 1, 2
fs.write("\t\t<!-- 分发优先级,0,1,2 -->\n");
fs.write("\t\t<dispatch-priority>");
fs.write(bo.getDispatchPriority() == null ? "0" : bo
.getDispatchPriority()
+ "");
fs.write("</dispatch-priority>\n");
// 并发分发数量
fs.write("\t\t<!-- 并发分发数量 -->\n");
fs.write("\t\t<dispatch-thread-num>");
fs.write(bo.getDispatchThreadNum() == null ? "5" : bo
.getDispatchThreadNum()
+ "");
fs.write("</dispatch-thread-num>\n");
// 分发开始日期
fs.write("\t\t<!-- 分发开始日期 -->\n");
fs.write("\t\t<dispatch-start-date>");
fs.write(bo.getDispatchStartDate() == null ? "" : bo
.getDispatchStartDate().toString().trim()
+ "");
fs.write("</dispatch-start-date>\n");
// 分发结束日期
fs.write("\t\t<!-- 分发结束日期 -->\n");
fs.write("\t\t<dispatch-end-date>");
fs.write(bo.getDispatchEndDate() == null ? "" : bo.getDispatchEndDate().toString().trim()
+ "");
fs.write("</dispatch-end-date>\n");
// 分发开始时间
fs.write("\t\t<!-- 分发开始时间 -->\n");
fs.write("\t\t<dispatch-start-time>");
fs.write(bo.getDispatchStartTime() == null ? "" : bo
.getDispatchStartTime()
+ "");
fs.write("</dispatch-start-time>\n");
// 分发结束时间
fs.write("\t\t<!-- 分发结束时间 -->\n");
fs.write("\t\t<dispatch-end-time>");
fs.write(bo.getDispatchEndTime() == null ? "" : bo.getDispatchEndTime()
+ "");
fs.write("</dispatch-end-time>");
fs.write("\n\t</dispatch-policy>\n");
}
/**
*
* writeExecutePolicyManagerXml decription : 书写软件执行策略XML标签集
*
* @param fs
* @param bo
* @throws IOException
*/
private static void writeExecutePolicyManagerXml(OutputStreamWriter fs,
ExecutePolicy bo) throws IOException {
// --- 执行策略 ---
fs.write("\n\t<!-- 执行策略 -->");
fs.write("\n\t<execute-policy>\n");
// 分发后执行标志
fs.write("\t\t<!-- 分发后执行标志 -->\n");
fs.write("\t\t<execute-check-tag>");
fs.write(bo.getExecuteCheckTag() == null ? "false" : bo
.getExecuteCheckTag()
+ "");
fs.write("</execute-check-tag>\n");
// 执行文件,相对路径
fs.write("\t\t<!-- 执行文件,相对路径 -->\n");
fs.write("\t\t<execute-file-path>");
fs
.write(bo.getExecuteFilePath() == null ? "" : bo
.getExecuteFilePath().trim());
fs.write("</execute-file-path>\n");
// 执行参数
fs.write("\t\t<!-- 执行参数 -->\n");
fs.write("\t\t<execute-parameter>");
fs.write(bo.getExecuteParameter() == null ? "" : bo
.getExecuteParameter().trim());
fs.write("</execute-parameter>\n");
// 提示信息
fs.write("\t\t<!-- 提示信息 -->\n");
fs.write("\t\t<execute-prompting-message>");
fs.write(bo.getExecutePromptingMessage() == null ? "" : bo
.getExecutePromptingMessage().trim());
fs.write("</execute-prompting-message>");
fs.write("\n\t</execute-policy>\n");
}
/**
*
* writeValidatePolicyManagerXml decription : 书写软件验证策略XML标签集
*
* @param fs
* @param bo
* @throws IOException
*/
private static void writeValidatePolicyManagerXml(OutputStreamWriter fs,
ValidatePolicy bo) throws IOException {
// --- 验证策略 ---
fs.write("\n\t<!-- 验证策略 -->");
fs.write("\n\t<validate-policy>\n");
// 验证标志
fs.write("\t\t<!-- 验证标志 -->\n");
fs.write("\t\t<validate-check-tag>");
fs.write(bo.getValidateCheckTag() == null ? "false" : bo
.getValidateCheckTag()
+ "");
fs.write("</validate-check-tag>\n");
// 验证文件路径
// fs.write("\t\t<!-- 验证文件路径 -->\n");
fs.write("\t\t<validate-file-path>");
fs.write(bo.getValidateFilePath() == null ? "" : bo
.getValidateFilePath().trim());
fs.write("</validate-file-path>\n");
// 验证文件版本
fs.write("\t\t<!-- 验证文件版本 -->\n");
fs.write("\t\t<validate-file-version>");
fs.write(bo.getValidateFileVersion() == null ? "" : bo
.getValidateFileVersion().trim()
+ "");
fs.write("</validate-file-version>\n");
// 注册表项/键
fs.write("\t\t<!-- 注册表项/键 -->\n");
fs.write("\t\t<validate-register-key>");
fs.write(bo.getValidateRegisterKey() == null ? "" : bo
.getValidateRegisterKey().trim());
fs.write("</validate-register-key>\n");
// 进程
fs.write("\t\t<!-- 进程 -->\n");
fs.write("\t\t<validate-process>");
fs
.write(bo.getValidateProcess() == null ? "" : bo
.getValidateProcess().trim());
fs.write("</validate-process>\n");
// 服务
fs.write("\t\t<!-- 服务 -->\n");
fs.write("\t\t<validate-service>");
fs
.write(bo.getValidateService() == null ? "" : bo
.getValidateService().trim());
fs.write("</validate-service>");
fs.write("\n\t</validate-policy>\n");
// fs.write("</software>");
}
/**
*
* writeXmlFootInfo decription : 书写软件XML尾部信息
*
* @param fs
* @throws IOException
*/
private static void writeXmlFootInfo(OutputStreamWriter fs)
throws IOException {
fs.write("</software>");
}
/**
*
* getBaseInfoManagerBO decription : 根据XML操作句柄得到软件基本信息BO对象
*
* @param config
* @return
*/
private static BaseInfoManagerBO getBaseInfoManagerBO(
XMLConfiguration config) {
// 产生基本信息BO
BaseInfoManagerBO baseInfo = new BaseInfoManagerBO();
if (config == null) {
return null;
}
// 软件名
baseInfo.setName(config.getString("base-info.name").trim());
// 软件发布时间
baseInfo.setUploadTime(config.getString("base-info.upload-time").trim());
// 软件类型,FILE or DIR
baseInfo.setType(config.getString("base-info.type").trim());
// 软件类别
baseInfo.setCategory(config.getString("base-info.category").trim());
// 软件大小
Long size = config.getString("base-info.size") == null ? null
: new Long(config.getString("base-info.size").trim());
baseInfo.setSize(size);
// 软件MD5
baseInfo.setMD5(config.getString("base-info.MD5"));
baseInfo.setValidate(config.getString("base-info.validate"));
return baseInfo;
}
/**
*
* getDispatchPolicyManagerBO decription : 根据XML操作句柄得到软件分发策略信息BO对象
*
* @param config
* @return
*/
private static DispatchPolicyManagerBO getDispatchPolicyManagerBO(
XMLConfiguration config) {
// // 产生分发策略信息BO
DispatchPolicyManagerBO dispatch = new DispatchPolicyManagerBO();
if (config == null) {
return null;
}
Boolean tag = null;
// 是否需要一致性检查标志
tag = config.getString("dispatch-policy.consistency-check-tag") == null ? false
: new Boolean(config
.getString("dispatch-policy.consistency-check-tag").trim());
dispatch.setConsistencyCheckTag(tag);
// 分发标志,是否需要分发
tag = config.getString("dispatch-policy.dispatch-check-tag") == null ? false
: new Boolean(config
.getString("dispatch-policy.dispatch-check-tag").trim());
dispatch.setDispatchCheckTag(tag);
// rar形态表示标志 true:表示是我们自己打的rar包 false:表示是用户上传的rar包
tag = config.getString("dispatch-policy.dispatch-form-tag") == null ? false
: new Boolean(config
.getString("dispatch-policy.dispatch-form-tag").trim());
dispatch.setDispatchFormTag(tag);
// 分发开始日期
dispatch.setDispatchStartDate(config
.getString("dispatch-policy.dispatch-start-date").trim());
// 分发结束日期
dispatch.setDispatchEndDate(config
.getString("dispatch-policy.dispatch-end-date").trim());
String time = config.getString("dispatch-policy.dispatch-start-time");
if (time != null && time.trim().length() > 0) {
// 分发开始时间
dispatch.setDispatchStartTime(new Long(time.trim()));
}
time = config.getString("dispatch-policy.dispatch-end-time");
if (time != null && time.trim().length() > 0) {
// 分发结束时间
dispatch.setDispatchEndTime(new Long(time.trim()));
}
// 并发分发数量
Integer num = config.getString("dispatch-policy.dispatch-thread-num") == null ? null
: new Integer(config
.getString("dispatch-policy.dispatch-thread-num").trim());
dispatch.setDispatchThreadNum(num);
// 分发优先级, 0, 1, 2
Integer priority = config
.getString("dispatch-policy.dispatch-priority") == null ? null
: new Integer(config
.getString("dispatch-policy.dispatch-priority").trim());
dispatch.setDispatchPriority(priority);
return dispatch;
}
/**
*
* getExecutePolicyManagerBO decription : 根据XML操作句柄得到软件执行策略信息BO对象
*
* @param config
* @return
*/
private static ExecutePolicyManagerBO getExecutePolicyManagerBO(
XMLConfiguration config) {
ExecutePolicyManagerBO execute = new ExecutePolicyManagerBO();
if (config == null) {
return null;
}
Boolean tag = null;
// 分发后执行标志
tag = config.getString("execute-policy.execute-check-tag") == null ? false
: new Boolean(config
.getString("execute-policy.execute-check-tag").trim());
execute.setExecuteCheckTag(tag);
// 执行文件,相对路径
execute.setExecuteFilePath(config
.getString("execute-policy.execute-file-path"));
// 执行参数
execute.setExecuteParameter(config
.getString("execute-policy.execute-parameter"));
// 提示信息
execute.setExecutePromptingMessage(config
.getString("execute-policy.execute-prompting-message"));
return execute;
}
/**
*
* getValidatePolicyManagerBO decription : 根据XML操作句柄得到软件验证策略信息BO对象
*
* @param config
* @return
*/
private static ValidatePolicyManagerBO getValidatePolicyManagerBO(
XMLConfiguration config) {
// // 产生验证策略信息BO
ValidatePolicyManagerBO validate = new ValidatePolicyManagerBO();
if (config == null) {
return null;
}
Boolean tag = null;
// 验证标志
tag = config.getString("validate-policy.validate-check-tag") == null ? false
: new Boolean(config
.getString("validate-policy.validate-check-tag").trim());
validate.setValidateCheckTag(tag);
// 验证文件版本
String version = config
.getString("validate-policy.validate-file-version");
validate.setValidateFileVersion(version);
// 验证文件路径
validate.setValidateFilePath(config
.getString("validate-policy.validate-file-path"));
// 注册表项/键
validate.setValidateRegisterKey(config
.getString("validate-policy.validate-register-key"));
// 进程
validate.setValidateProcess(config
.getString("validate-policy.validate-process"));
// 服务
validate.setValidateService(config
.getString("validate-policy.validate-service"));
return validate;
}
}