package jdepend.server.ui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.rmi.Naming; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import jdepend.framework.exception.JDependException; import jdepend.framework.ui.component.TableSorter; import jdepend.framework.ui.panel.StatusField; import jdepend.server.service.JDependRemoteService; import jdepend.server.service.RemoteServiceFactory; import jdepend.server.service.impl.JDependRemoteServiceImpl; import jdepend.server.service.impl.JDependSessionMgr; import jdepend.server.service.impl.ServiceMonitor; import jdepend.server.service.session.JDependRequest; import jdepend.server.service.session.JDependSession; public class ServiceMonitorPanel extends JPanel implements ServiceMonitor { private JDependServer server; private JDependRemoteServiceImpl service; private DefaultTableModel requestListModel; private JLabel statusLabel; private JButton start; private JButton stop; private boolean status; private final static String STOP = "未启动"; private final static String RUN = "正在运行"; public ServiceMonitorPanel(JDependServer server) { this.server = server; this.setLayout(new BorderLayout()); this.add(BorderLayout.NORTH, this.createMenuPanel()); JPanel workspace = new JPanel(new GridLayout(1, 1)); JPanel tasks = new JPanel(new BorderLayout()); tasks.add(BorderLayout.NORTH, new JLabel("执行的任务列表:")); JTable requestsTable = this.initRequestList(); tasks.add(BorderLayout.CENTER, new JScrollPane(requestsTable)); workspace.add(tasks); this.add(BorderLayout.CENTER, workspace); } private JTable initRequestList() { requestListModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { return false; } }; TableSorter sorter = new TableSorter(requestListModel); JTable requestsTable = new JTable(sorter); sorter.setTableHeader(requestsTable.getTableHeader()); requestListModel.addColumn("执行时间"); requestListModel.addColumn("会话ID"); requestListModel.addColumn("客户端IP"); requestListModel.addColumn("用户名"); requestListModel.addColumn("组名称"); requestListModel.addColumn("命令名称"); return requestsTable; } private void refresh() { } private JComponent createMenuPanel() { JPanel statusPanel = new JPanel(); statusLabel = new JLabel(); statusPanel.add(statusLabel); start = new JButton("启动"); start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { start(); } catch (JDependException e1) { e1.printStackTrace(); server.showStatusError(e1.getMessage()); } } }); statusPanel.add(start); stop = new JButton("停止"); stop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { stop(); } catch (JDependException e1) { e1.printStackTrace(); server.showStatusError(e1.getMessage()); } } }); statusPanel.add(stop); changeStatusSkin(); JPanel menuPanel = new JPanel(new BorderLayout()); menuPanel.add(BorderLayout.CENTER, statusPanel); JPanel settingPanel = new JPanel(); JButton settingButton = new JButton("设置"); settingButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { ServiceSettingDialog d = new ServiceSettingDialog(server); d.setModal(true); d.setVisible(true); } }); settingPanel.add(settingButton); menuPanel.add(BorderLayout.EAST, settingPanel); return menuPanel; } private void changeStatusSkin() { if (this.status) { statusLabel.setText(RUN); start.setEnabled(false); stop.setEnabled(true); server.getStatusField().setText("服务已启动", StatusField.Center); } else { statusLabel.setText(STOP); start.setEnabled(true); stop.setEnabled(false); server.getStatusField().setText("服务已停止", StatusField.Center); } } public void onAnalyse(JDependRequest request) throws JDependException { JDependSession session = JDependSessionMgr.getInstance().getSession(request); Object[] row = new Object[6]; row[0] = (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(Calendar.getInstance().getTime()); row[1] = request.getSessionId(); row[2] = session.getClient(); row[3] = session.getUserName(); row[4] = request.getGroupName(); row[5] = request.getCommandName(); requestListModel.addRow(row); } public void start() throws JDependException { if (!this.status) { this.bindService(); this.status = true; changeStatusSkin(); } } public void stop() throws JDependException { if (this.status) { this.unbindService(); this.status = false; changeStatusSkin(); } } private void bindService() throws JDependException { try { this.service = RemoteServiceFactory.createJDependRemoteService(); this.service.addMonitor(this); Naming.rebind("rmi://localhost:1099/JDependRemoteService", service); } catch (Exception e) { throw new JDependException("绑定解析服务错误!", e); } } private void unbindService() throws JDependException { try { Naming.unbind("rmi://localhost:1099/JDependRemoteService"); } catch (Exception e) { throw new JDependException("解除解析服务绑定错误!", e); } } }