package org.infosec.ismp.applet.discover.ui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; import org.infosec.ismp.applet.comm.TopoDiscoverService; import org.infosec.ismp.applet.discover.service.CDPSearchAppletService; import org.infosec.ismp.manager.rmi.tm.discover.model.Line; import org.infosec.ismp.manager.rmi.tm.discover.model.Node; import org.infosec.ismp.manager.rmi.tm.discover.model.NodeType; /** * CDPResultPanel * @author sshanshan * @date 2009-06-19 * @version 1.0 */ public class CDPResultPanel extends JPanel implements ActionListener { private JLabel title = new JLabel("请选择需要加入拓扑视图的节点", SwingConstants.CENTER); private JButton selectAll = new JButton("全选"); private JButton removeAll = new JButton("重置"); private JButton okbutton = new JButton("确定"); private DefaultTableModel model = new DefaultTableModel(); private JTable table; private List<CDPEntryData> data = null; private List<Line> lineListAll = new ArrayList<Line>(); private List<Node> nodeListResult = new ArrayList<Node>(); private List<Line> lineListResult = new ArrayList<Line>(); private Map<String,List> result = new HashMap<String,List>(); // private AgentBO agentBO = null; /** * 构造函数 * @param data cdp搜索的参数 * @param agentBO */ // public CDPResultPanel(List<CDPEntryData> data,List<Line> lineList,AgentBO agentBO) { public CDPResultPanel(List<CDPEntryData> data,List<Line> lineList) { this.data = data; // this.agentBO = agentBO; this.lineListAll = lineList; init(); } /** * 初始函数 */ public void init() { this.setLayout(new BorderLayout()); table = new JTable(model) { @Override public boolean isCellEditable(int row, int column) { if (column == 0) { return true; } else { return false; } } @Override public Class getColumnClass(int index) { if (index == 0) return Boolean.class; else return String.class; } }; model.addColumn("请选择"); model.addColumn("节点IP"); model.addColumn("SNMP端口"); model.addColumn("团体名"); model.addColumn("连接邻居的接口"); // model.addColumn("对端接口"); model.addColumn("节点类型"); model.addColumn("子网掩码"); model.addColumn("搜索层次"); model.addColumn("尝试次数"); model.addColumn("响应时间"); model.addColumn("节点描述"); model.addColumn("备注"); table.setAutoCreateColumnsFromModel(false); table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); table.setShowGrid(true); // table.setPreferredSize(new Dimension(920, 300)); table.getTableHeader().setReorderingAllowed(false); table.getTableHeader().setPreferredSize(new Dimension(1, 23)); table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table.getTableHeader().setResizingAllowed(false); table.setColumnSelectionAllowed(true); table.setAutoResizeMode(table.AUTO_RESIZE_OFF); TableColumn tableColumn = table.getColumn("请选择"); tableColumn.setMinWidth(50); tableColumn.setMaxWidth(50); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("节点IP"); tableColumn.setMinWidth(100); tableColumn.setMaxWidth(100); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("SNMP端口"); tableColumn.setMinWidth(0); tableColumn.setMaxWidth(0); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("团体名"); tableColumn.setMinWidth(0); tableColumn.setMaxWidth(0); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("连接邻居的接口"); tableColumn.setMinWidth(150); tableColumn.setMaxWidth(150); tableColumn.setCellRenderer(new EDCellRenderer()); /*tableColumn = table.getColumn("对端接口"); tableColumn.setMinWidth(100); tableColumn.setMaxWidth(100); tableColumn.setCellRenderer(new EDCellRenderer());*/ tableColumn = table.getColumn("节点类型"); tableColumn.setMinWidth(100); tableColumn.setMaxWidth(100); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("子网掩码"); tableColumn.setMinWidth(100); tableColumn.setMaxWidth(100); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("搜索层次"); tableColumn.setMinWidth(80); tableColumn.setMaxWidth(80); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("尝试次数"); tableColumn.setMinWidth(80); tableColumn.setMaxWidth(80); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("响应时间"); tableColumn.setMinWidth(80); tableColumn.setMaxWidth(80); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("节点描述"); tableColumn.setMinWidth(180); tableColumn.setMaxWidth(180); tableColumn.setCellRenderer(new EDCellRenderer()); tableColumn = table.getColumn("备注"); tableColumn.setMinWidth(0); tableColumn.setMaxWidth(0); tableColumn.setCellRenderer(new EDCellRenderer()); for (CDPEntryData cdp : data) { Vector v = new Vector(); v.add(cdp.getIsSelect()); v.add(cdp.getIp()); v.add(cdp.getPort()); v.add(cdp.getCommunity()); v.add(cdp.getSelfInterface()); // v.add(cdp.getNeighborInterface()); v.add(cdp.getType()); v.add(cdp.getMask()); v.add(cdp.getLayer()); v.add(cdp.getTryTimes()); v.add(cdp.getResponseTime()); v.add(cdp.getDescription()); v.add(cdp.getRemarks()); model.addRow(v); } JPanel titlePane = new JPanel(); GridBagLayout grid = new GridBagLayout(); GridBagConstraints cons = new GridBagConstraints(); cons.insets = new Insets(5, 20, 5, 20); cons.anchor = GridBagConstraints.CENTER; cons.fill = GridBagConstraints.BOTH; cons.gridx = 0; cons.gridy = 0; cons.gridwidth = 1; cons.weightx = 1; cons.weighty = 1; titlePane.setLayout(grid); grid.setConstraints(title, cons); titlePane.add(title); JPanel buttonPane = new JPanel(); buttonPane.setLayout(new GridLayout(2, 1, 5, 5)); JPanel checkboxPane = new JPanel(); checkboxPane.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5)); selectAll.addActionListener(this); removeAll.addActionListener(this); checkboxPane.add(selectAll); checkboxPane.add(removeAll); JPanel okPane = new JPanel(); okPane.setLayout(grid); cons.insets = new Insets(0, 5, 5, 5); okbutton.addActionListener(this); grid.setConstraints(okbutton, cons); okPane.add(okbutton); buttonPane.add(checkboxPane); buttonPane.add(okPane); this.add("North", titlePane); this.add("Center", new JScrollPane(table)); this.add("South", buttonPane); } class EDCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { Component com = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); com.setFont(new java.awt.Font("Dialog", 0, 12)); com.setForeground(new Color(0, 0, 0)); if (col == 0) { JCheckBox box = new JCheckBox(); box.setHorizontalAlignment(CENTER); box.setSelected((Boolean) value); com = box; } else { ((JLabel) com).setToolTipText(((JLabel) com).getText()); ((JLabel) com).setHorizontalAlignment(CENTER); } if (row % 2 == 0) { com.setBackground(new Color(255, 255, 220)); } else { com.setBackground(new Color(220, 220, 200)); } if (table.isRowSelected(row)) { com.setBackground(new Color(100, 150, 250)); } return com; } } public static void main(String[] args) { JFrame mainFrame = new JFrame(); CDPEntryData snmpdata = new CDPEntryData(); CDPEntryData snmpdata1 = new CDPEntryData(); ArrayList<CDPEntryData> data = new ArrayList<CDPEntryData>(); snmpdata.setIp("127.0.0.1"); snmpdata1.setIp("123.123.123.123"); data.add(snmpdata); data.add(snmpdata1); for(int i=1; i<100; i++){ CDPEntryData snmpdata3 = new CDPEntryData(); snmpdata3.setIp("192.168.9."+i); data.add(snmpdata3); } List<Node> nodeList = new ArrayList<Node>(); Node node1 = new Node(); Node node2 = new Node(); node1.setIpAddr(snmpdata.getIp()); node2.setIpAddr(snmpdata1.getIp()); nodeList.add(node1); nodeList.add(node2); List<Line> lineList = new ArrayList<Line>(); Line line = new Line(); line.setNodeDest(node1); line.setNodeDest(node2); lineList.add(line); // CDPResultPanel test = new CDPResultPanel(data,lineList,null); CDPResultPanel test = new CDPResultPanel(data,lineList); Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize(); mainFrame.setSize(920, 400); mainFrame.setLocation( (screenDimension.width - mainFrame.getSize().width) / 2, (screenDimension.height - mainFrame.getSize().height) / 2); mainFrame.setTitle("发现节点"); mainFrame.setLayout(new BorderLayout()); mainFrame.getContentPane().add(test, BorderLayout.CENTER); mainFrame.setVisible(true); mainFrame.setResizable(false); try { // UIManager.setLookAndFeel(UIManager // .getCrossPlatformLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(mainFrame); } catch (Exception e) { System.err.println("can't get SystemLookAndFeel"); } mainFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } /** * 事件处理函数,全选/重置/确定 */ public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == selectAll) { int j = 0; for(int i=0; i<model.getRowCount(); i++){ model.setValueAt(true, i, j); } }else if (source == removeAll){ int j = 0; for(int i = 0; i<model.getRowCount(); i++){ model.setValueAt(false, i, j); } }else if(source == okbutton){ int j = 0; nodeListResult.clear(); for(int i = 0; i<model.getRowCount(); i++){ if (model.getValueAt(i,j).equals(true)){ Node node = new Node(); node.setIpAddr((model.getValueAt(i, 1)==null)?"":model.getValueAt(i, 1).toString()); node.setPort(Integer.parseInt((model.getValueAt(i, 2)== null)?"":model.getValueAt(i, 2).toString())); node.setCommunity((model.getValueAt(i, 3)==null)?"":model.getValueAt(i, 3).toString()); node.setSelfInterface((model.getValueAt(i, 4)==null)?"":model.getValueAt(i, 4).toString()); // node.setNeighborInterface((model.getValueAt(i, 4)==null)?"":model.getValueAt(i, 4).toString()); node.setNodeType((model.getValueAt(i, 5)==null)?(new NodeType()):(NodeType)(model.getValueAt(i, 5))); node.setNetMask((model.getValueAt(i, 6)==null)?"":model.getValueAt(i, 6).toString()); node.setLevel(Integer.parseInt((model.getValueAt(i, 7)== null)?"":model.getValueAt(i, 7).toString())); node.setTryNum(Integer.parseInt((model.getValueAt(i, 8)==null)?"":model.getValueAt(i, 8).toString())); node.setSearchTime((model.getValueAt(i, 9)==null)?"":model.getValueAt(i, 9).toString()); node.setDescription((model.getValueAt(i, 10)==null)?"":model.getValueAt(i, 10).toString()); node.setRemarks((model.getValueAt(i, 11)==null)?"":model.getValueAt(i, 11).toString()); node.setName(node.getIpAddr()); nodeListResult.add(node); } } if(nodeListResult!=null && nodeListResult.size() > 0){ result.put("nodeList", nodeListResult); result.put("lineList", lineListAll); CDPSearchAppletService cdpSearchService = CDPSearchAppletService.getInstance(); cdpSearchService.addNodeList(result); try { // TopoDeviceClassManager.displayTopoDiscover(this.agentBO); TopoDiscoverService.displayTopoDiscover(); //FindTopo.displayTopoDiscover(this.agentBO); } catch (Exception e1) { e1.printStackTrace(); } ((JFrame)this.getParent().getParent().getParent().getParent()).setVisible(false); ((JFrame)this.getParent().getParent().getParent().getParent()).dispose(); }else{ javax.swing.JOptionPane.showMessageDialog(this, "请选择记录再保存!"); } } } }