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.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
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.util.BundleUtil;
import jdepend.server.service.RemoteServiceFactory;
import jdepend.server.service.impl.JDependSessionMgr;
import jdepend.server.service.impl.SessionListener;
import jdepend.server.service.session.JDependSession;
import jdepend.server.service.session.JDependSessionService;
public class SessionMgrPanel extends JPanel implements SessionListener {
private JDependServer server;
private DefaultTableModel sessionListModel;
private JDependSessionService sessionService;
protected Long currentSession;
public SessionMgrPanel(JDependServer server) {
this.server = server;
this.setLayout(new BorderLayout());
JPanel workspace = new JPanel(new GridLayout(1, 1));
JPanel clients = new JPanel(new BorderLayout());
clients.add(BorderLayout.NORTH, new JLabel("连接的客户端列表:"));
JTable sessionsTable = this.initSessionList();
clients.add(BorderLayout.CENTER, new JScrollPane(sessionsTable));
workspace.add(clients);
this.add(BorderLayout.CENTER, workspace);
}
private JTable initSessionList() {
final JPopupMenu popupMenu = new JPopupMenu();
JMenuItem removeItem = new JMenuItem(BundleUtil.getString(BundleUtil.Command_Delete));
removeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
remove();
}
});
popupMenu.add(removeItem);
sessionListModel = new DefaultTableModel() {
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
TableSorter sorter = new TableSorter(sessionListModel);
JTable sessionsTable = new JTable(sorter);
sessionsTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
JTable table = (JTable) e.getSource();
int currentRow = table.rowAtPoint(e.getPoint());
if (currentRow >= 0) {
table.setRowSelectionInterval(currentRow, currentRow);
}
}
@Override
public void mousePressed(MouseEvent e) {
JTable table = (JTable) e.getSource();
int currentRow = table.rowAtPoint(e.getPoint());
if (currentRow >= 0) {
table.setRowSelectionInterval(currentRow, currentRow);
}
currentSession = (Long) table.getValueAt(table.rowAtPoint(e.getPoint()), 0);
if (e.getButton() == 3) {
popupMenu.show(table, e.getX(), e.getY());
}
}
});
sorter.setTableHeader(sessionsTable.getTableHeader());
sessionListModel.addColumn("会话ID");
sessionListModel.addColumn("用户名");
sessionListModel.addColumn("IP地址");
sessionListModel.addColumn("创建时间");
sessionListModel.addColumn("操作");
sessionListModel.addColumn("注销时间");
return sessionsTable;
}
private void remove() {
JDependSessionMgr.getInstance().removeSession(currentSession);
}
private void refresh() {
}
@Override
public void onCreateSession(JDependSession session) {
Object[] row = new Object[6];
row[0] = session.getId();
row[1] = session.getUserName();
row[2] = session.getClient();
row[3] = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(session.getCreateTime());
row[4] = "登陆";
sessionListModel.addRow(row);
}
@Override
public void onRemoveSession(JDependSession session) {
for (int row = 0; row < sessionListModel.getRowCount(); row++) {
if ((Long) sessionListModel.getValueAt(row, 0) == session.getId()) {
sessionListModel.setValueAt("注销", row, 4);
sessionListModel.setValueAt(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(Calendar.getInstance()
.getTime()), row, 5);
}
}
}
@Override
public void onChangeState(JDependSession session) {
}
public void bindService() throws JDependException {
try {
this.sessionService = RemoteServiceFactory.createJDependSessionService();
JDependSessionMgr.getInstance().addListener(this);
Naming.rebind("rmi://localhost:1099/JDependSessionService", sessionService);
} catch (Exception e) {
throw new JDependException("绑定会话服务错误!", e);
}
}
public void unbindService() throws JDependException {
try {
Naming.unbind("rmi://localhost:1099/JDependSessionService");
} catch (Exception e) {
throw new JDependException("解除会话服务绑定错误!", e);
}
}
}