package org.infosec.ismp.applet.manager.component;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import javax.swing.JColorChooser;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import org.infosec.ismp.applet.manager.application.action.ActionInfo;
import org.infosec.ismp.applet.manager.application.active.ActiveDevice;
import org.infosec.ismp.applet.manager.application.active.ActiveLink;
import org.infosec.ismp.applet.manager.component.dialog.DialogBuilder;
import org.infosec.ismp.applet.manager.model.DomainModel;
import org.infosec.ismp.applet.manager.model.LinkModel;
import org.infosec.ismp.applet.manager.model.NodeModel;
import org.infosec.ismp.applet.manager.model.TopoDatabaseModel;
import org.infosec.ismp.applet.manager.model.TopoFirewallModel;
import org.infosec.ismp.applet.manager.model.TopoIdsModel;
import org.infosec.ismp.applet.manager.model.TopoRouterModel;
import org.infosec.ismp.applet.manager.model.TopoSensorModel;
import org.infosec.ismp.applet.manager.model.TopoServerModel;
import org.infosec.ismp.applet.manager.model.TopoSwitchModel;
import org.infosec.ismp.applet.manager.model.TopoWeblogicModel;
import org.infosec.ismp.applet.manager.utilities.TopoConst;
import twaver.Element;
import twaver.Node;
import twaver.PopupMenuGenerator;
import twaver.TDataBox;
import twaver.TView;
import twaver.network.TNetwork;
import twaver.network.action.AlignBottomAction;
import twaver.network.action.AlignCenterAction;
import twaver.network.action.AlignLeftAction;
import twaver.network.action.AlignMiddleAction;
import twaver.network.action.AlignRightAction;
import twaver.network.action.AlignTopAction;
import twaver.network.action.BottomPileAction;
import twaver.network.action.EvenHSpaceAction;
import twaver.network.action.EvenVSpaceAction;
import twaver.network.action.LeftPileAction;
import twaver.network.action.RightPileAction;
import twaver.network.action.TopPileAction;
import twaver.network.background.ColorBackground;
public class TopoPopupMenuGenerator implements PopupMenuGenerator{
private TNetwork network;
public TopoPopupMenuGenerator(TNetwork network){
this.network = network;
}
//@Override
public JPopupMenu generate(TView view, MouseEvent event) {
final TDataBox box = view.getDataBox();
Element element = box.getLastSelectedElement();
if(element instanceof DomainModel) {
return getDomainPopupMenu((DomainModel)element);
} else if(element instanceof LinkModel) {
LinkModel link = (LinkModel)element;
return getLinkPopupMenu(link);
} else if(element instanceof TopoSensorModel) {
TopoSensorModel pc = (TopoSensorModel)element;
return getSensorPopupMenu(pc);
} else if(element instanceof NodeModel) {
NodeModel node = (NodeModel)element;
return getDevicePopupMenu(node);
} else {
return getNullPopupMenu();
}
}
//空白处右键菜单
private JPopupMenu getNullPopupMenu() {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(getAddDomain());
popMenu.add(getAddServerDevice());
popMenu.add(getAddSwitchDevice());
popMenu.add(getAddRouterDevice());
popMenu.add(getAddIDSDevice());
popMenu.add(getAddFirewallDevice());
popMenu.add(getAddWeblogic());
popMenu.add(getAddDatabaseDevice());
popMenu.addSeparator();
popMenu.add(getColorMenu());
return popMenu;
}
//普通SNMP设备右键菜单 isAgent 是否已激活
private JPopupMenu getDevicePopupMenu(NodeModel node) {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(getDeviceInfo(node));
if(node.getStatus() != null && node.getStatus() == 1) {
popMenu.add(getCloseAgent(node));
} else {
popMenu.add(getStartAgent(node));
}
popMenu.add(getUpdateDevice(node));
popMenu.add(getDeleteDevice(node));
popMenu.addSeparator();
popMenu.add(getPing());
popMenu.add(getAlarmInfo());
popMenu.addSeparator();
popMenu.add(getAlignMenu());
popMenu.add(getEvenSpaceMenu());
popMenu.add(getPileMenu());
return popMenu;
}
//普通云图右键菜单
private JPopupMenu getDomainPopupMenu(DomainModel domain) {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(getUpdateDevice(domain));
popMenu.add(getDeleteDevice(domain));
popMenu.addSeparator();
popMenu.add(getAlarmInfo());
popMenu.addSeparator();
popMenu.add(getAlignMenu());
popMenu.add(getEvenSpaceMenu());
popMenu.add(getPileMenu());
return popMenu;
}
//PC右键菜单 isAgent 是否已激活
private JPopupMenu getSensorPopupMenu(NodeModel node) {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(getDeviceInfo(node));
if(node.getStatus()!= null && node.getStatus() == 1) {
popMenu.add(getCloseAgent(node));
} else {
popMenu.add(getStartAgent(node));
}
popMenu.add(getDeleteDevice(node));
popMenu.addSeparator();
popMenu.add(getAlarmInfo());
popMenu.addSeparator();
popMenu.add(getAlignMenu());
popMenu.add(getEvenSpaceMenu());
popMenu.add(getPileMenu());
return popMenu;
}
//连接线右键菜单 isAgent 是否已激活
private JPopupMenu getLinkPopupMenu(LinkModel link) {
JPopupMenu popMenu = new JPopupMenu();
popMenu.add(getLinkInfo());
Node fromNode = link.getFrom();
Node toNode = link.getTo();
if(fromNode == null || toNode == null ||
!(fromNode instanceof NodeModel) || !(toNode instanceof NodeModel)) {
} else {
if(link.getLinkState() != null && link.getLinkState() == 1) {
popMenu.add(getCloseAgent(link));
} else {
popMenu.add(getStartAgent(link));
}
}
popMenu.add(getDeleteDevice(link));
popMenu.addSeparator();
popMenu.add(getAlarmInfo());
return popMenu;
}
private JMenu getAlignMenu() {
JMenu menu = new JMenu("对齐");
menu.add(new AlignLeftAction(network));
menu.add(new AlignCenterAction(network));
menu.add(new AlignRightAction(network));
menu.addSeparator();
menu.add(new AlignTopAction(network));
menu.add(new AlignMiddleAction(network));
menu.add(new AlignBottomAction(network));
return menu;
}
private JMenu getEvenSpaceMenu() {
JMenu menu = new JMenu("间距");
menu.add(new EvenHSpaceAction(network));
menu.add(new EvenVSpaceAction(network));
return menu;
}
private JMenu getPileMenu() {
JMenu menu = new JMenu("堆列");
menu.add(new LeftPileAction(network));
menu.add(new RightPileAction(network));
menu.add(new TopPileAction(network));
menu.add(new BottomPileAction(network));
return menu;
}
private JMenuItem getColorMenu() {
JMenuItem item = new JMenuItem("背景颜色");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Color color = JColorChooser.showDialog(network, "颜色选择器",
Color.white);
if (color != null) {
network.setCurrentBackground(new ColorBackground(color));
}
}
});
return item;
}
private JMenuItem getDeviceInfo(final NodeModel node) {
JMenuItem item = new JMenuItem("设备详细信息");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(node instanceof TopoDatabaseModel) {
ActionInfo.actionDatabaseInfo(node);
} else if(node instanceof TopoSensorModel) {
ActionInfo.actionSensorInfo(node);
} else if(node instanceof TopoWeblogicModel) {
ActionInfo.actionWeblogicInfo(node);
} else {
ActionInfo.actionDeviceInfo(node);
}
}
});
return item;
}
private JMenuItem getLinkInfo() {
JMenuItem item = new JMenuItem("连接详细信息");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"功能正在开发中..." , "提示", JOptionPane.INFORMATION_MESSAGE);
}
});
return item;
}
private JMenuItem getCloseAgent(final NodeModel node) {
JMenuItem item = new JMenuItem("关闭设备监控");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ActiveDevice.unActionDevice(node);
}
});
return item;
}
private JMenuItem getStartAgent(final NodeModel node) {
JMenuItem item = new JMenuItem("开启设备监控");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ActiveDevice.activeDevice(node);
}
});
return item;
}
private JMenuItem getStartAgent(final LinkModel link) {
final JMenuItem item = new JMenuItem("开启连接监控");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ActiveLink.activeLink(link);
}
});
return item;
}
private JMenuItem getCloseAgent(final LinkModel link) {
JMenuItem item = new JMenuItem("关闭连接监控");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ActiveLink.unActionLink(link);
}
});
return item;
}
private JMenuItem getUpdateDevice(final NodeModel node) {
JMenuItem item = new JMenuItem("修改设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(node instanceof TopoDatabaseModel) {
DialogBuilder.builderDatabaseDialog(node,network);
} else {
DialogBuilder.builderDeviceDialog(node , network);
}
}
});
return item;
}
private JMenuItem getUpdateDevice(final DomainModel domain) {
JMenuItem item = new JMenuItem("修改云图");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDomainDialog(domain , network);
}
});
return item;
}
private JMenuItem getDeleteDevice(final LinkModel link) {
JMenuItem item = new JMenuItem("删除连接");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TopoConst.BOX.removeElement(link);
//new DeleteLinkTask(link).execute();
}
});
return item;
}
private JMenuItem getDeleteDevice(final DomainModel domain) {
JMenuItem item = new JMenuItem("删除云图");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// new DeleteDomainTask(domain).execute();
TopoConst.BOX.removeElement(domain);
}
});
return item;
}
private JMenuItem getDeleteDevice(final NodeModel node) {
JMenuItem item = new JMenuItem("删除设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//new DeleteNodeTask(node).execute();
TopoConst.BOX.removeElement(node);
}
});
return item;
}
private JMenuItem getPing() {
JMenuItem item = new JMenuItem("Ping 操作");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"功能正在开发中..." , "提示", JOptionPane.INFORMATION_MESSAGE);
}
});
return item;
}
private JMenuItem getAlarmInfo() {
JMenuItem item = new JMenuItem("告警信息");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"功能正在开发中..." , "提示", JOptionPane.INFORMATION_MESSAGE);
}
});
return item;
}
private JMenuItem getAddServerDevice() {
JMenuItem item = new JMenuItem("新增服务器设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoServerModel(), network);
}
});
return item;
}
private JMenuItem getAddSwitchDevice() {
JMenuItem item = new JMenuItem("新增交换机设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoSwitchModel(), network);
}
});
return item;
}
private JMenuItem getAddWeblogic() {
JMenuItem item = new JMenuItem("新增Weblogic服务");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoWeblogicModel(), network);
}
});
return item;
}
private JMenuItem getAddRouterDevice() {
JMenuItem item = new JMenuItem("新增路由器设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoRouterModel(), network);
}
});
return item;
}
private JMenuItem getAddIDSDevice() {
JMenuItem item = new JMenuItem("新增IDS设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoIdsModel(), network);
}
});
return item;
}
private JMenuItem getAddFirewallDevice() {
JMenuItem item = new JMenuItem("新增防火墙设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDeviceDialog(new TopoFirewallModel(), network);
}
});
return item;
}
private JMenuItem getAddDatabaseDevice() {
JMenuItem item = new JMenuItem("新增数据库设备");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDatabaseDialog(new TopoDatabaseModel(), network);
}
});
return item;
}
private JMenuItem getAddDomain() {
JMenuItem item = new JMenuItem("新增云图");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
DialogBuilder.builderDomainDialog(new DomainModel(), network);
}
});
return item;
}
}