package jdepend.client.ui.remote;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.rmi.RemoteException;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import jdepend.client.core.remote.session.RemoteSessionProxy;
import jdepend.framework.context.ClientContext;
import jdepend.framework.context.JDependContext;
import jdepend.framework.exception.JDependException;
import jdepend.framework.log.BusiLogUtil;
import jdepend.framework.log.Operation;
import jdepend.framework.ui.component.JDependFrame;
import jdepend.framework.ui.panel.StatusField;
import jdepend.framework.util.BundleUtil;
import jdepend.client.ui.framework.ExceptionUtil;
public final class LoginDialog extends JDialog {
private JDependFrame frame;
private JTextField userName;
private JTextField passWord;
public static final String Login = BundleUtil.getString(BundleUtil.State_Logined);
public static final String Logout = BundleUtil.getString(BundleUtil.State_unLogin);
public LoginDialog(JDependFrame frame) {
this.frame = frame;
setTitle("登录");
setResizable(false);
getContentPane().setLayout(new FlowLayout());
setSize(300, 140);
this.setLocationRelativeTo(null);// 窗口在屏幕中间显示
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
this.setLayout(new BorderLayout());
try {
if (RemoteSessionProxy.getInstance().isValid()) {
getContentPane().add(getLogoutPanel());
} else {
getContentPane().add(getLoginPanel());
}
} catch (Exception e1) {
e1.printStackTrace();
getContentPane().add(getLoginPanel());
}
}
private JPanel getLogoutPanel() {
JPanel logoutPanel = new JPanel(new BorderLayout());
JPanel content = new JPanel(new FlowLayout());
content.add(new JLabel("您已登录,登录用户名:" + RemoteSessionProxy.getInstance().getUserName()));
JPanel buttonBar = new JPanel(new FlowLayout());
buttonBar.add(createCloseButton());
logoutPanel.add(BorderLayout.CENTER, content);
logoutPanel.add(BorderLayout.SOUTH, buttonBar);
return logoutPanel;
}
private JPanel getLoginPanel() {
JPanel loginPanel = new JPanel(new BorderLayout());
JPanel content = new JPanel(new BorderLayout());
JPanel left = new JPanel(new GridLayout(2, 1));
JPanel right = new JPanel(new GridLayout(2, 1));
left.add(new JLabel("用户名:"));
left.add(new JLabel("口令:"));
userName = new JTextField();
passWord = new JPasswordField();
userName.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
login();
}
}
});
passWord.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
login();
}
}
});
right.add(userName);
right.add(passWord);
content.add(BorderLayout.WEST, left);
content.add(BorderLayout.CENTER, right);
JPanel buttonBar = new JPanel(new FlowLayout());
buttonBar.add(createLoginButton());
buttonBar.add(createCancelButton());
loginPanel.add(BorderLayout.CENTER, content);
loginPanel.add(BorderLayout.SOUTH, buttonBar);
return loginPanel;
}
private JButton createLoginButton() {
JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_Login));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
login();
}
});
return button;
}
private JButton createCloseButton() {
JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_Close));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
return button;
}
private JButton createCancelButton() {
JButton button = new JButton(BundleUtil.getString(BundleUtil.Command_Cancel));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
return button;
}
private void login() {
try {
doLogin();
dispose();
} catch (Exception e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(frame, ExceptionUtil.getMessage(e1), "错误", JOptionPane.CLOSED_OPTION);
}
}
private void doLogin() throws JDependException, RemoteException {
String username = userName.getText();
String password = passWord.getText();
if (username == null || username.length() == 0) {
throw new JDependException("用户名不能为空");
}
RemoteSessionProxy.getInstance().login(username, password);
ClientContext.setUser(username);
frame.getStatusField().setText(Login, StatusField.Right);
BusiLogUtil.getInstance().businessLog(Operation.login);
}
}