diff --git a/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java b/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java new file mode 100644 index 0000000..3322ce4 --- /dev/null +++ b/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java @@ -0,0 +1,18 @@ +package envoy.client.event; + +import envoy.event.Event; + +/** + * This {@link Event} indicates that a handshake completed successful + * + * Project: envoy-client
+ * File: HandshakeSuccessfulEvent.java
+ * Created: 8 Feb 2020
+ * + * @author Leon Hofmeister + * @since Envoy v0.3-alpha + */ +public class HandshakeSuccessfulEvent implements Event { + + private static final long serialVersionUID = -157972384126278855L; +} diff --git a/src/main/java/envoy/client/net/Client.java b/src/main/java/envoy/client/net/Client.java index 0d6a9d3..f1432f6 100644 --- a/src/main/java/envoy/client/net/Client.java +++ b/src/main/java/envoy/client/net/Client.java @@ -74,6 +74,7 @@ public class Client implements Closeable { receiver.registerProcessor(User.class, sender -> { logger.info("Acquired user object " + sender); this.sender = sender; }); receiver.registerProcessor(Contacts.class, contacts -> { logger.info("Acquired contacts object " + contacts); this.contacts = contacts; }); receiver.registerProcessor(Message.class, receivedMessageCache); + receiver.registerProcessor(HandshakeRejectionEvent.class, EventBus.getInstance()::dispatch); // Start receiver new Thread(receiver).start(); diff --git a/src/main/java/envoy/client/ui/LoginDialog.java b/src/main/java/envoy/client/ui/LoginDialog.java index d81ecc1..e58b0b1 100644 --- a/src/main/java/envoy/client/ui/LoginDialog.java +++ b/src/main/java/envoy/client/ui/LoginDialog.java @@ -2,20 +2,22 @@ package envoy.client.ui; import java.awt.*; import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import javax.swing.*; import javax.swing.border.EmptyBorder; +import envoy.client.event.HandshakeSuccessfulEvent; import envoy.data.LoginCredentials; +import envoy.event.EventBus; +import envoy.event.HandshakeRejectionEvent; /** * Project: envoy-client
* File: LoginDialog.java
* Created: 01.01.2020
- * + * * @author Kai S. K. Engelbart * @author Maximilian Käfer * @since Envoy v0.3-alpha @@ -28,8 +30,11 @@ public class LoginDialog extends JDialog { private JTextField textField; private JPasswordField passwordField; - private JPasswordField repeatPasswordField; - private JLabel lblRepeatPassword; + private JPasswordField repeatPasswordField; + private JLabel lblRepeatPassword; + private JLabel errorMessage; + + private GridBagConstraints gbc_errorMessage; private GridBagConstraints gbc_lblRepeatPassword; private GridBagConstraints gbc_repeatPasswordField; @@ -37,7 +42,7 @@ public class LoginDialog extends JDialog { /** * Displays a dialog enabling the user to enter their user name and password. - * + * * @since Envoy v0.3-alpha */ public LoginDialog() { @@ -97,12 +102,27 @@ public class LoginDialog extends JDialog { gbc_lblRepeatPassword.gridy = 2; } { - repeatPasswordField = new JPasswordField(); + repeatPasswordField = new JPasswordField(); gbc_repeatPasswordField = new GridBagConstraints(); gbc_repeatPasswordField.fill = GridBagConstraints.HORIZONTAL; gbc_repeatPasswordField.gridx = 1; gbc_repeatPasswordField.gridy = 2; } + { + EventBus.getInstance().register(HandshakeRejectionEvent.class, evt -> { + contentPanel.remove(errorMessage); + clearPasswordFields(); + // TODO delete - only for testing purposes + System.out.println("Caught HandshakeRejectionEvent with reason" + ((HandshakeRejectionEvent) evt).get()); + errorMessage = new JLabel(((HandshakeRejectionEvent) evt).get()); + gbc_errorMessage = new GridBagConstraints(); + gbc_errorMessage.gridx = 2; + gbc_errorMessage.gridy = 0; + gbc_errorMessage.fill = GridBagConstraints.HORIZONTAL; + gbc_errorMessage.insets = new Insets(5, 5, 5, 5); + contentPanel.add(errorMessage, gbc_errorMessage); + }); + } { JPanel buttonPane = new JPanel(); @@ -114,30 +134,24 @@ public class LoginDialog extends JDialog { JCheckBox registerCheckBox = new JCheckBox(); registerCheckBox.setAlignmentX(LEFT_ALIGNMENT); - registerCheckBox.addItemListener(new ItemListener() { + registerCheckBox.addItemListener(e -> { + switch (e.getStateChange()) { + case ItemEvent.SELECTED: + contentPanel.add(lblRepeatPassword, gbc_lblRepeatPassword); + contentPanel.add(repeatPasswordField, gbc_repeatPasswordField); + setSize(338, 160); + break; - @Override - public void itemStateChanged(ItemEvent e) { - switch (e.getStateChange()) { - case ItemEvent.SELECTED: - contentPanel.add(lblRepeatPassword, gbc_lblRepeatPassword); - contentPanel.add(repeatPasswordField, gbc_repeatPasswordField); - setSize(338, 160); - contentPanel.revalidate(); - contentPanel.repaint(); - break; - - case ItemEvent.DESELECTED: - if (repeatPasswordField.getParent() == contentPanel) { - contentPanel.remove(lblRepeatPassword); - contentPanel.remove(repeatPasswordField); - setSize(338, 123); - contentPanel.revalidate(); - contentPanel.repaint(); - } - break; - } + case ItemEvent.DESELECTED: + if (repeatPasswordField.getParent() == contentPanel) { + contentPanel.remove(lblRepeatPassword); + contentPanel.remove(repeatPasswordField); + setSize(338, 123); + } + break; } + contentPanel.revalidate(); + contentPanel.repaint(); }); buttonPane.add(registerCheckBox); @@ -148,18 +162,14 @@ public class LoginDialog extends JDialog { okButton.addActionListener((evt) -> { try { if (registerCheckBox.isSelected()) { - if (Arrays.equals(passwordField.getPassword(), repeatPasswordField.getPassword())) { + // password checking + if (Arrays.equals(passwordField.getPassword(), repeatPasswordField.getPassword())) credentials = new LoginCredentials(textField.getText(), passwordField.getPassword(), true); - dispose(); - } else { - JOptionPane.showMessageDialog(this, "The repeated password is unequal to the origional password!"); - passwordField.setText(null); - repeatPasswordField.setText(null); + else { + JOptionPane.showMessageDialog(this, "The repeated password is not the origional password!"); + clearPasswordFields(); } - } else { - credentials = new LoginCredentials(textField.getText(), passwordField.getPassword(), false); - dispose(); - } + } else credentials = new LoginCredentials(textField.getText(), passwordField.getPassword(), false); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } @@ -178,6 +188,17 @@ public class LoginDialog extends JDialog { setModal(true); setVisible(true); + EventBus.getInstance().register(HandshakeSuccessfulEvent.class, evt -> this.dispose()); + } + + /** + * Resets the text stored by this + * + * @since Envoy v0.3-alpha + */ + public void clearPasswordFields() { + passwordField.setText(null); + repeatPasswordField.setText(null); } /** diff --git a/src/main/java/envoy/client/ui/Startup.java b/src/main/java/envoy/client/ui/Startup.java index a976824..7cd09a7 100644 --- a/src/main/java/envoy/client/ui/Startup.java +++ b/src/main/java/envoy/client/ui/Startup.java @@ -117,7 +117,7 @@ public class Startup { try { // Try entering offline mode localDb.loadUsers(); - User clientUser = localDb.getUsers().get(credentials.getName()); + User clientUser = localDb.getUsers().get(credentials.getIdentifier()); if (clientUser == null) throw new EnvoyException("Could not enter offline mode: user name unknown"); client.setSender(clientUser); JOptionPane.showMessageDialog(null,