package edu.sjtu.infosec.ismp.manager.AM.web.actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.tm.manager.model.DeviceModelEntity;
import org.infosec.ismp.manager.rmi.tm.manager.model.NodeEntity;
import org.infosec.ismp.manager.rmi.tm.manager.model.TradeMarkEntity;
import org.infosec.ismp.manager.rmi.tm.manager.service.TopoWebService;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import edu.sjtu.infosec.ismp.manager.AM.comm.AssetConstant;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceBO;
import edu.sjtu.infosec.ismp.manager.AM.model.AssetDeviceForComm;
import edu.sjtu.infosec.ismp.manager.AM.service.AssetDeviceService;
import edu.sjtu.infosec.ismp.manager.AM.web.form.AssetForm;
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.SYSM.user.self.service.UserService;
import edu.sjtu.infosec.ismp.manager.comm.model.page.Page;
import edu.sjtu.infosec.ismp.manager.comm.model.page.PageUtil;
import edu.sjtu.infosec.ismp.security.Domain;
import edu.sjtu.infosec.ismp.security.OperatorDetails;
import edu.sjtu.infosec.ismp.util.RandomCodeUtil;
@Component
public class AssetAction extends DispatchAction {
private static Log log = LogFactory.getLog(AssetAction.class);
// 注入assetService层接口
private AssetDeviceService assetDeviceService;
private TopoWebService topoWebService;
// private static ClassPathXmlApplicationContext appContext;
// static {
// try {
// appContext = new ClassPathXmlApplicationContext(new String[] {
// "classpath:applicationContext.xml"
// });
// } catch (Throwable t) {
// throw new Error(t);
// }
// }
// 注入委办局 信息 service
private DomainService domainService;
public void setTopoWebService(TopoWebService topoWebService) {
this.topoWebService = topoWebService;
}
// 注入用户service接口
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void setDomainService(DomainService domainService) {
this.domainService = domainService;
}
public void setAssetDeviceService(AssetDeviceService assetDeviceService) {
this.assetDeviceService = assetDeviceService;
}
// public void setInfoForAssetDevice(InfoForAssetDevice infoForAssetDevice) {
// this.infoForAssetDevice = infoForAssetDevice;
// }
//
// public void setAssetSenderWrapper(AssetSenderWrapper assetSenderWrapper) {
// this.assetSenderWrapper = assetSenderWrapper;
// }
/*public ActionForward initData(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String temp = "pddc0000000";
List<AssetDeviceBO> deviceList = assetserv.getListByAssetDevice(null);
List<AssetDeviceBO> devList = new ArrayList<AssetDeviceBO>();
AssetDeviceBO device = null;
if (deviceList != null && !deviceList.isEmpty()) {
for (int i = 0; i < deviceList.size(); i++) {
device = deviceList.get(i);
device.setSn(temp + i);
devList.add(device);
}
}
if (devList != null && !devList.isEmpty()) {
for (AssetDeviceBO dev : devList)
assetserv.updateAssetDevice(dev);
}
return mapping.findForward("chilmain");
}*/
// 根据类别查询资产 并且分页显示
public ActionForward findAssetByLoc(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// System.out.println(DeviceTradeMarkUtil.getMarkList().size() +
// "品牌类型");
// request.setAttribute("tmList", DeviceTradeMarkUtil.getMarkList());
// if (DeviceTradeMarkUtil.getMarkList() != null
// && DeviceTradeMarkUtil.getMarkList().size() > 0) {
// request.setAttribute("models", DeviceTradeMarkUtil.getModelList());
// }
Map<TradeMarkEntity,List<DeviceModelEntity>> map = topoWebService.getModelsByTradeMark();
if(map!=null && map.size()>0){
request.setAttribute("tmList", map.keySet());
Iterator it = map.keySet().iterator();
if(it.hasNext()){
Object key =it.next();
List<DeviceModelEntity> models = map.get(key);
request.setAttribute("models", models);
}
}else{
request.setAttribute("tmList", null);
request.setAttribute("models", null);
}
// request.setAttribute("tmList", topoWebService.getTradeMarkAll());
// if(topoWebService.getTradeMarkAll()!=null && topoWebService.getTradeMarkAll().size()>0){
// TradeMarkEntity tradeMarkEntity = topoWebService.getTradeMarkAll().get(0);
// List<DeviceModelEntity> models = map.get(tradeMarkEntity);
// request.setAttribute("models", models);
// }
request.setAttribute("deviceTypeList", topoWebService.getNodeTypeAll());
// 获得类型ID
Page page = new Page();
page.setEveryPage(15);
AssetDeviceBO asbo = new AssetDeviceBO();
Integer locid = 0;
String locId = request.getParameter("locid");
if (locId != null && !"".equals(locId.trim())){
locid = Integer.parseInt(request.getParameter("locid"));
}
int typeid = 0;
if (request.getParameter("tid") != null) {
typeid = Integer.parseInt(request.getParameter("tid"));
}
if (request.getAttribute("tid") != null)
typeid = Integer.parseInt(request.getAttribute("tid").toString());
// 将ID存起来 添加的时候要用
request.getSession().setAttribute("deviceType", typeid);
if (typeid == 1)
asbo.setAssetType(AssetConstant.NETWORK_DEVICE_TYPE);
if (typeid == 2)
asbo.setAssetType(AssetConstant.SECURITY_DEVICE_TYPE);
if (typeid == 3)
asbo.setAssetType(AssetConstant.SERVER_DEVICE_TYPE);
if (typeid == 4)
asbo.setAssetType(AssetConstant.TERMINAL_DEVICE_TYPE);
asbo.setLocationId(locid);
// 获得当前页数
String curpage = request.getParameter("curpage") == null ? "1"
: request.getParameter("curpage");
page.setCurrentPage(Integer.parseInt(curpage));
page.setBeginIndex((page.getCurrentPage() - 1) * page.getEveryPage());
List<AssetDeviceBO> result = assetDeviceService.getPageListByAssetDevice(asbo, page, null);
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(), page.getTotalCount());
request.setAttribute("page", page);
request.setAttribute("listd", result);
request.setAttribute("typid", typeid);
request.setAttribute("locid", locid);
saveToken(request);
return mapping.findForward("chilmain");
}
// 根据类别查询资产 并且分页显示
public ActionForward findAssetAll(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// System.out.println(DeviceTradeMarkUtil.getMarkList().size() +
// "品牌类型");
// request.setAttribute("tmList", DeviceTradeMarkUtil.getMarkList());
// if (DeviceTradeMarkUtil.getMarkList() != null
// && DeviceTradeMarkUtil.getMarkList().size() > 0) {
// request.setAttribute("models", DeviceTradeMarkUtil.getModelList());
// }
// 获得类型ID
Page page = new Page();
page.setEveryPage(20);
AssetDeviceBO asbo = new AssetDeviceBO();
int typeid = 0;
if (request.getParameter("tid") != null) {
typeid = Integer.parseInt(request.getParameter("tid"));
}
if (request.getAttribute("tid") != null)
typeid = Integer.parseInt(request.getAttribute("tid").toString());
// 将ID存起来 添加的时候要用
request.getSession().setAttribute("deviceType", typeid);
if (typeid == 1)
asbo.setAssetType(AssetConstant.NETWORK_DEVICE_TYPE);
if (typeid == 2)
asbo.setAssetType(AssetConstant.SECURITY_DEVICE_TYPE);
if (typeid == 3)
asbo.setAssetType(AssetConstant.SERVER_DEVICE_TYPE);
if (typeid == 4)
asbo.setAssetType(AssetConstant.TERMINAL_DEVICE_TYPE);
// 获得当前页数
String curpage = request.getParameter("curpage") == null ? "1"
: request.getParameter("curpage");
page.setCurrentPage(Integer.parseInt(curpage));
page.setBeginIndex((page.getCurrentPage() - 1) * page.getEveryPage());
asbo.setLocationId(null);
List<AssetDeviceBO> result = assetDeviceService.getPageListByAssetDevice(asbo, page,null);
page = PageUtil.createPage(page.getEveryPage(), page.getCurrentPage(), page.getTotalCount());
request.setAttribute("page", page);
request.setAttribute("list", result);
request.setAttribute("typid", typeid);
saveToken(request);
return mapping.findForward("chilmain");
}
// 添加资产信息
public ActionForward addAsset(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AssetDeviceBO assetBO = new AssetDeviceBO();
request.setAttribute("operation", "添加资产信息");
setManagerBoToRequest(request);
// 获得类型ID
AssetForm assetForm = (AssetForm) form;
assetBO = assetForm.getAssetBo();
assetBO.setId(null);
assetBO.setMonitorStatus(0);
assetBO.setSingleCode(RandomCodeUtil.getSingleRandomCode());
request.setAttribute("tid", assetForm.getAssetBo().getAssetType());
if (isTokenValid(request)) {
assetDeviceService.add(assetBO);
resetToken(request);
// 传送添加资产的信息
try {
sendDevice(assetBO, AssetConstant.ASSET_ADD);
} catch (Exception e) {
e.printStackTrace();
}
return this.findAssetByLoc(mapping, assetForm, request, response);
} else {
saveToken(request);
return this.findAssetByLoc(mapping, assetForm, request, response);
}
}
// 根据资产编号删除资产信息
public ActionForward deleteAsset(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
// 获得类型ID
// 根据资产ID 删除某个资产信息
request.setAttribute("operation", "删除资产信息");
if (request.getParameter("aid") != null) {
AssetDeviceBO asset = assetDeviceService.findById(Integer
.parseInt(request.getParameter("aid")));
if (asset != null) {
assetDeviceService.delete(asset);
// 传送删除资产的信息
sendDevice(asset, AssetConstant.ASSET_DELETE);
// infoForAssetDevice.deleteByAsset(asset);
// infoForAssetDevice.deleteFromAssetDevice(asset.getSingleCode());
}
}
request.setAttribute("tid", request.getParameter("tid"));
request.setAttribute("locid", request.getParameter("locid"));
return this.findAssetByLoc(mapping, form, request, response);
}
// 根据资产编号删除资产信息
public ActionForward delAsset(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
// 获得类型ID
// 根据资产ID 删除某个资产信息
request.setAttribute("operation", "删除资产信息");
if (request.getParameter("aid") != null) {
AssetDeviceBO asset = assetDeviceService.findById(Integer
.parseInt(request.getParameter("aid")));
if (asset != null) {
assetDeviceService.delete(asset);
// 传送删除资产的信息
sendDevice(asset, AssetConstant.ASSET_DELETE);
// infoForAssetDevice.deleteByAsset(asset);
// infoForAssetDevice.deleteFromAssetDevice(asset.getSingleCode());
}
}
request.setAttribute("tid", request.getParameter("tid"));
return mapping.findForward("deviceMain");
}
// 查询单个资产信息
public ActionForward getOneAsset(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
setManagerBoToRequest(request);
// 获得id 根据ID 进行查询
AssetForm assetForm = (AssetForm) form;
if (request.getParameter("aid") != null) {
// 根据ID查询资产信息
AssetDeviceBO assetDevicebo = new AssetDeviceBO();
assetDevicebo = assetDeviceService.findById(Integer.parseInt(request
.getParameter("aid")));
Map<TradeMarkEntity,List<DeviceModelEntity>> map = topoWebService.getModelsByTradeMark();
request.setAttribute("tmList", topoWebService.getTradeMarkAll());
if(topoWebService.getTradeMarkAll()!=null && topoWebService.getTradeMarkAll().size()>0){
TradeMarkEntity tradeMarkEntity = topoWebService.getTradeMarkAll().get(0);
List<DeviceModelEntity> models = map.get(tradeMarkEntity);
request.setAttribute("models", models);
}
request.setAttribute("deviceTypeList", topoWebService.getNodeTypeAll());
// request.setAttribute("tmList", DeviceTradeMarkUtil.getMarkList());
// if (DeviceTradeMarkUtil.getMarkList() != null
// && DeviceTradeMarkUtil.getMarkList().size() > 0) {
// if (assetDevicebo.getManufacturer() != null
// && !"".equals(assetDevicebo.getManufacturer())) {
// TradeMark mark = DeviceTradeMarkUtil
// .getTradeMadeByEn(assetDevicebo.getManufacturer());
// if (mark != null) {
// List<DeviceModel> dmList = mark.getModels();
// request.setAttribute("models", dmList);
// }
// }
// }
assetForm.setAssetBo(assetDevicebo);
// 设置查询条件的起始时间,不为空的时候就转换
if (assetDevicebo.getStockTime() != null
&& (!assetDevicebo.getStockTime().equals(""))) {
request.setAttribute("stocktimepage", assetDevicebo
.getStockTime().toString());
}
if (assetDevicebo.getRegistrationTime() != null
&& (!assetDevicebo.getRegistrationTime().equals(""))) {
request.setAttribute("registrationtimepage", assetDevicebo
.getRegistrationTime().toString());
}
request.setAttribute("assetBo", assetDevicebo);
}
request.setAttribute("aid", request.getParameter("aid"));
request.setAttribute("locid", request.getParameter("locid"));
// 判断如果是查看详细的话跳转到详细界面。否则就是跳转到更新界面
if (request.getParameter("part") != null) {
return mapping.findForward("assetpart");
} else {
return mapping.findForward("showassetOne");
}
}
// 更新资产信息
public ActionForward updateAsset(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "删除资产信息");
setManagerBoToRequest(request);
// 获得id 根据ID 进行查询
AssetForm assetForm = (AssetForm) form;
AssetDeviceBO assetbo = assetForm.getAssetBo();
// System.out.println(assetbo.toString() +
// "update asset>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
assetDeviceService.update(assetbo);
// infoForAssetDevice.updateByAsset(assetbo);
// infoForAssetDevice.editFromAssetDevice(assetbo);
// 传送更新资产的信息
sendDevice(assetbo, AssetConstant.ASSET_UPDATE);
request.setAttribute("tid", assetForm.getAssetBo().getAssetType());
return this.findAssetByLoc(mapping, assetForm, request, response);
}
public ActionForward monitor(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String devId = request.getParameter("deviceId");
if (devId != null && !"".equals(devId.trim())) {
AssetDeviceBO device = assetDeviceService.findById(Integer
.valueOf(devId));
if (device != null) {
NodeEntity nodeEntity = new NodeEntity();
nodeEntity.setNodeStyle(1);
// System.out.println(topoWebService+"==="+nodeEntity);
// if(topoWebService==null){
// topoWebService = new TopoWebServiceImpl();
// }
// topoWebService = (TopoWebService)appContext.getBean("topoWebService");
// System.out.println("==========="+topoWebService);
topoWebService.saveOrUpdateNode(nodeEntity);
// topoNodeDao.saveOrUpdateNode(nodeEntity);
String node_id = nodeEntity.getNodeId();
if (device.getNodeId()==null || device.getNodeId().equals("")) {
device.setNodeId(node_id);
}
device.setMonitorStatus(1);
assetDeviceService.update(device);
}
request.setAttribute("tid", device.getAssetType());
sendDevice(device, AssetConstant.ASSET_UPDATE);
}
request.setAttribute("locid", request.getParameter("locid"));
return this.findAssetByLoc(mapping, form, request, response);
}
// 批量导入
public ActionForward excelImport(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
request.setAttribute("operation", "批量导入资产信息");
String locId = request.getParameter("locid");
Integer locationId = null;
if (locId != null && !"".equals(locId)) {
locationId = Integer.parseInt(locId);
}
// 获得id 根据ID 进行查询
AssetForm assetForm = (AssetForm) form;
request.setAttribute("tid", assetForm.getAssettypeid());
assetDeviceService.excelImport(assetForm.getExcelFile().getInputStream(),
assetForm.getAssettypeid(), locationId);
return this.findAssetByLoc(mapping, assetForm, request, response);
}
public ActionForward doExcel(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String locId = request.getParameter("locid");
String devType = request.getParameter("devTy");
request.setAttribute("deviceType", devType);
request.setAttribute("locid", locId);
return mapping.findForward("excel_import");
}
public ActionForward updateSearchDevice(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute("operation", "更新资产信息");
AssetForm assetForm = (AssetForm) form;
AssetDeviceBO device = assetForm.getAssetBo();
assetDeviceService.update(device);
request.setAttribute("device", device);
return mapping.findForward("viewDevice");
}
// 传送资产的信息
private void sendDevice(AssetDeviceBO bean, String method) {
log.info("设备信息发送");
// if (assetSenderWrapper == null) {
// log.info("发送器对象为Null,终止服务!");
// System.out.println("发送器对象为Null,终止服务!");
// return;
// }
AssetDeviceForComm comm = new AssetDeviceForComm();
comm.setMethod(method);
List<AssetDeviceBO> list = new ArrayList<AssetDeviceBO>();
list.add(bean);
comm.setAssetDeviceList(list);
// try {
// assetSenderWrapper.executeSend(comm);
// } catch (Exception e) {
// e.printStackTrace();
// }
}
// 选择类型
public ActionForward selectModels(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
String enName = request.getParameter("enName");
StringBuffer enNames = new StringBuffer();
// List<edu.sjtu.infosec.ismp.micommon.topo.topomanage.model.DeviceModel> models = DeviceTradeMarkUtil
// .getTradeMadeByEn(enName).getModels();
// for (DeviceModel model : models) {
// enNames.append('@').append(model.getName());
// }
Map<TradeMarkEntity,List<DeviceModelEntity>> map = topoWebService.getModelsByTradeMark();
response.getWriter().write(enNames.toString());
enNames = null;
return null;
}
private void setManagerBoToRequest(HttpServletRequest request) {
OperatorDetails user = SecurityUserHolder.getCurrentUser();
List<Domain> domainList = user.getDomainList();
request.setAttribute("managerbo", domainList);
// HttpSession session = request.getSession();
// if (session != null) {
// User userbo = (User) session.getAttribute("userbo");
// List<Domain> managerList = getManagerList(userbo);
// request.setAttribute("managerbo", managerList);
// }
}
/*private List<Domain> getManagerList(User uservo) {
if (uservo != null) {
String managsStr = uservo.getUserToManager();
boolean status = userService.checkAdminService(uservo.getId());
// 如果是管理员就查询所有的委办局信息
if (status) {
return managerService.getManagerAllService();
} else {
if (managsStr != null && managsStr.length() > 0) {
String mStr[] = managsStr.split(",");
List<Integer> ids = new ArrayList();
if (mStr != null && mStr.length > 0) {
for (String string : mStr) {
ids.add(Integer.parseInt(string));
}
}
return managerService.getManagerByUserIDsService(ids);
}
}
}
return null;
}*/
}