1 package fr.ifremer.quadrige3.ui.swing.content.login;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import fr.ifremer.quadrige3.ui.swing.AbstractUIHandler;
27 import org.apache.commons.lang3.StringUtils;
28 import org.nuiton.jaxx.application.swing.util.Cancelable;
29
30 import javax.swing.*;
31 import java.awt.event.ActionEvent;
32
33 import static org.nuiton.i18n.I18n.t;
34
35
36
37
38 public class LoginUIHandler extends AbstractUIHandler<LoginUIModel, LoginUI> implements Cancelable {
39
40 private long delay;
41
42
43 @Override
44 public void beforeInit(LoginUI ui) {
45 super.beforeInit(ui);
46
47 ui.setContextValue(new LoginUIModel());
48 }
49
50
51 @Override
52 public void afterInit(LoginUI ui) {
53 initUI(ui);
54
55 addAutoSelectOnFocus(ui.getLoginField());
56 addAutoSelectOnFocus(ui.getPasswordField());
57
58
59 delay = System.currentTimeMillis() + 100;
60 KeyStroke enterKeyStroke = KeyStroke.getKeyStroke("pressed ENTER");
61 Action acceptAction = new AbstractAction() {
62 @Override
63 public void actionPerformed(ActionEvent e) {
64 if (getUI().getAcceptButton().isEnabled()
65
66 && System.currentTimeMillis() > delay)
67 SwingUtilities.invokeLater(() -> accept());
68 }
69 };
70 ui.getLoginField().getKeymap().addActionForKeyStroke(enterKeyStroke, acceptAction);
71 ui.getPasswordField().getKeymap().addActionForKeyStroke(enterKeyStroke, acceptAction);
72
73 getModel().addPropertyChangeListener(LoginUIModel.PROPERTY_URL, evt -> {
74 getUI().getInfoMessage().setVisible(StringUtils.isNotBlank(getModel().getUrl()));
75 getUI().getInfoMessage().setText(t("quadrige3.login.infoMessage", getModel().getUrl()));
76 });
77 }
78
79 @Override
80 protected JComponent getComponentToFocus() {
81 return getModel().getLogin() == null ? getUI().getLoginField() : getUI().getPasswordField();
82 }
83
84
85 @Override
86 public void cancel() {
87 getModel().setLogin(null);
88 getModel().setPassword(null);
89 closeDialog();
90 }
91
92
93
94
95 public void accept() {
96 closeDialog();
97 }
98
99 @Override
100 public void closeDialog() {
101
102
103 getUI().getLoginField().getKeymap().removeBindings();
104 getUI().getPasswordField().getKeymap().removeBindings();
105
106 super.closeDialog();
107 }
108 }