diff --git a/src/main/java/envoy/client/data/ClientConfig.java b/src/main/java/envoy/client/data/ClientConfig.java index 63381a0..0b11e40 100644 --- a/src/main/java/envoy/client/data/ClientConfig.java +++ b/src/main/java/envoy/client/data/ClientConfig.java @@ -1,7 +1,6 @@ package envoy.client.data; import java.io.File; -import java.security.NoSuchAlgorithmException; import java.util.function.Function; import java.util.logging.Level; @@ -110,11 +109,5 @@ public class ClientConfig extends Config { * the registration option * @since Envoy Client v0.3-alpha */ - public LoginCredentials getLoginCredentials() { - try { - return new LoginCredentials(getUser(), getPassword(), false); - } catch (NoSuchAlgorithmException e) { - return null; - } - } + public LoginCredentials getLoginCredentials() { return new LoginCredentials(getUser(), getPassword(), false); } } diff --git a/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java b/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java deleted file mode 100644 index a04b41a..0000000 --- a/src/main/java/envoy/client/event/HandshakeSuccessfulEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package envoy.client.event; - -import envoy.event.Event; - -/** - * This {@link Event} indicates that a handshake was completed successfully. - * - * Project: envoy-client
- * File: HandshakeSuccessfulEvent.java
- * Created: 8 Feb 2020
- * - * @author Leon Hofmeister - * @since Envoy Client v0.3-alpha - */ -public class HandshakeSuccessfulEvent extends Event.Valueless { - - private static final long serialVersionUID = 0L; -} diff --git a/src/main/java/envoy/client/net/Client.java b/src/main/java/envoy/client/net/Client.java index ab555ab..ea684a9 100644 --- a/src/main/java/envoy/client/net/Client.java +++ b/src/main/java/envoy/client/net/Client.java @@ -46,9 +46,10 @@ public class Client implements Closeable { private volatile Set contacts; private volatile boolean rejected; - // Configuration and logging - private static final ClientConfig config = ClientConfig.getInstance(); - private static final Logger logger = EnvoyLog.getLogger(Client.class); + // Configuration, logging and event management + private static final ClientConfig config = ClientConfig.getInstance(); + private static final Logger logger = EnvoyLog.getLogger(Client.class); + private static final EventBus eventBus = EventBus.getInstance(); /** * Enters the online mode by acquiring a user ID from the server. As a @@ -80,7 +81,7 @@ public class Client implements Closeable { // Register user creation processor, contact list processor and message cache receiver.registerProcessor(User.class, sender -> { this.sender = sender; contacts = sender.getContacts(); }); receiver.registerProcessor(Message.class, receivedMessageCache); - receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; EventBus.getInstance().dispatch(evt); }); + receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; eventBus.dispatch(evt); }); rejected = false; @@ -106,11 +107,12 @@ public class Client implements Closeable { Thread.sleep(500); } - logger.info("Handshake completed."); online = true; // Remove user creation processor receiver.removeAllProcessors(); + + logger.info("Handshake completed."); } /** @@ -146,20 +148,19 @@ public class Client implements Closeable { receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator); // Process name changes - receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); EventBus.getInstance().dispatch(evt); }); + receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); eventBus.dispatch(evt); }); // Process contact searches - receiver.registerProcessor(ContactSearchResult.class, EventBus.getInstance()::dispatch); + receiver.registerProcessor(ContactSearchResult.class, eventBus::dispatch); receiver.registerProcessor(Contact.class, - contacts -> EventBus.getInstance() - .dispatch(new ContactOperationEvent(contacts.getContacts().iterator().next(), ElementOperation.ADD))); + contacts -> eventBus.dispatch(new ContactOperationEvent(contacts.getContacts().iterator().next(), ElementOperation.ADD))); // Process group size changes - receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); EventBus.getInstance().dispatch(evt); }); + receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); eventBus.dispatch(evt); }); // Send event - EventBus.getInstance().register(SendEvent.class, evt -> { + eventBus.register(SendEvent.class, evt -> { try { sendEvent(evt.get()); } catch (IOException e) { diff --git a/src/main/java/envoy/client/ui/LoginDialog.fxml b/src/main/java/envoy/client/ui/LoginDialog.fxml new file mode 100644 index 0000000..a1503f4 --- /dev/null +++ b/src/main/java/envoy/client/ui/LoginDialog.fxml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/envoy/client/ui/LoginDialog.java b/src/main/java/envoy/client/ui/LoginDialog.java new file mode 100644 index 0000000..bc84bcc --- /dev/null +++ b/src/main/java/envoy/client/ui/LoginDialog.java @@ -0,0 +1,162 @@ +package envoy.client.ui; + +import java.io.IOException; +import java.util.logging.Logger; + +import javax.naming.TimeLimitExceededException; + +import envoy.client.data.Cache; +import envoy.client.data.ClientConfig; +import envoy.client.data.LocalDB; +import envoy.client.net.Client; +import envoy.data.LoginCredentials; +import envoy.data.Message; +import envoy.data.User; +import envoy.event.EventBus; +import envoy.event.HandshakeRejectionEvent; +import envoy.exception.EnvoyException; +import envoy.util.EnvoyLog; +import javafx.application.Platform; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.*; +import javafx.scene.control.Alert.AlertType; + +/** + * Project: envoy-client
+ * File: LoginDialog.java
+ * Created: 03.04.2020
+ * + * @author Kai S. K. Engelbart + * @since Envoy Client v0.1-beta + */ +public final class LoginDialog extends Dialog { + + @FXML + private TextField userTextField; + + @FXML + private PasswordField passwordField; + + @FXML + private PasswordField repeatPasswordField; + + @FXML + private Label repeatPasswordLabel; + + @FXML + private CheckBox registerCheckBox; + + private final Client client; + private final LocalDB localDB; + private final Cache receivedMessageCache; + + private static final Logger logger = EnvoyLog.getLogger(LoginDialog.class); + private static final EventBus eventBus = EventBus.getInstance(); + private static final ClientConfig config = ClientConfig.getInstance(); + + /** + * Loads the login dialog using the FXML file {@code LoginDialog.fxml}. + * + * @param client the client used to perform the handshake + * @param localDB the local database used for offline login + * @param receivedMessageCache the cache storing messages received during the + * handshake + * @throws IOException if an exception occurs during loading + * @since Envoy Client v0.1-beta + */ + public LoginDialog(Client client, LocalDB localDB, Cache receivedMessageCache) throws IOException { + this.client = client; + this.localDB = localDB; + this.receivedMessageCache = receivedMessageCache; + + final var loader = new FXMLLoader(getClass().getResource("LoginDialog.fxml")); + loader.setController(this); + final var dialogPane = loader.load(); + + // Configure dialog buttons + dialogPane.getButtonTypes().addAll(ButtonType.CLOSE, ButtonType.OK); + + // Close button + dialogPane.lookupButton(ButtonType.CLOSE).addEventHandler(ActionEvent.ACTION, e -> abortLogin()); + + // Login button + final var loginButton = (Button) dialogPane.lookupButton(ButtonType.OK); + loginButton.setText("Login"); + loginButton.addEventFilter(ActionEvent.ACTION, e -> { + e.consume(); + + // Prevent registration with unequal passwords + if (registerCheckBox.isSelected() && !passwordField.getText().equals(repeatPasswordField.getText())) { + clearPasswordFields(); + new Alert(AlertType.ERROR, "The entered password is unequal to the repeated one").showAndWait(); + } else + performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), registerCheckBox.isSelected())); + }); + + // Perform automatic login if configured + setOnShown(e -> { if (config.hasLoginCredentials()) performHandshake(config.getLoginCredentials()); }); + + setDialogPane(dialogPane); + } + + @FXML + private void initialize() { + + // Show an alert after an unsuccessful handshake + eventBus.register(HandshakeRejectionEvent.class, + e -> Platform.runLater(() -> { clearPasswordFields(); new Alert(AlertType.ERROR, e.get()).showAndWait(); })); + + // Set initial cursor + userTextField.requestFocus(); + } + + @FXML + private void registerCheckboxChanged() { + + // Make repeat password field and label visible / invisible + repeatPasswordField.setVisible(registerCheckBox.isSelected()); + repeatPasswordLabel.setVisible(registerCheckBox.isSelected()); + + clearPasswordFields(); + } + + private void abortLogin() { + logger.info("The login process has been cancelled. Exiting..."); + System.exit(0); + } + + private void performHandshake(LoginCredentials credentials) { + try { + client.performHandshake(credentials, receivedMessageCache); + if (client.isOnline()) { + client.initReceiver(localDB, receivedMessageCache); + Platform.runLater(this::hide); + } + } catch (IOException | InterruptedException | TimeLimitExceededException e) { + logger.warning("Could not connect to server. Trying offline mode..."); + e.printStackTrace(); + try { + // Try entering offline mode + localDB.loadUsers(); + User clientUser = (User) localDB.getUsers().get(credentials.getIdentifier()); + if (clientUser == null) throw new EnvoyException("Could not enter offline mode: user name unknown"); + client.setSender(clientUser); + Platform.runLater(() -> { + new Alert(AlertType.WARNING, "A connection to the server could not be established. Starting in offline mode.\n" + e) + .showAndWait(); + hide(); + }); + } catch (Exception e1) { + Platform.runLater(() -> new Alert(AlertType.ERROR, "Client error: " + e.toString()).showAndWait()); + System.exit(1); + } + } + } + + private void clearPasswordFields() { + passwordField.clear(); + repeatPasswordField.clear(); + } +} diff --git a/src/main/java/envoy/client/ui/Startup.java b/src/main/java/envoy/client/ui/Startup.java index e007058..af33ae2 100644 --- a/src/main/java/envoy/client/ui/Startup.java +++ b/src/main/java/envoy/client/ui/Startup.java @@ -7,12 +7,9 @@ import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; -import javax.swing.JOptionPane; - import envoy.client.data.*; import envoy.client.net.Client; import envoy.client.net.WriteProxy; -import envoy.client.ui.container.LoginDialog; import envoy.data.Message; import envoy.data.User; import envoy.data.User.UserStatus; @@ -21,6 +18,8 @@ import envoy.util.EnvoyLog; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; import javafx.scene.image.Image; import javafx.scene.layout.GridPane; import javafx.stage.Stage; @@ -47,7 +46,7 @@ public final class Startup extends Application { * {@inheritDoc} */ @Override - public void init() throws Exception { + public void start(Stage stage) throws Exception { try { // Load the configuration from client.properties first Properties properties = new Properties(); @@ -61,7 +60,7 @@ public final class Startup extends Application { // Check if all mandatory configuration values have been initialized if (!config.isInitialized()) throw new EnvoyException("Configuration is not fully initialized"); } catch (Exception e) { - JOptionPane.showMessageDialog(null, "Error loading configuration values:\n" + e, "Configuration error", JOptionPane.ERROR_MESSAGE); + new Alert(AlertType.ERROR, "Error loading configuration values:\n" + e); e.printStackTrace(); System.exit(1); } @@ -75,15 +74,12 @@ public final class Startup extends Application { // Initialize the local database if (config.isIgnoreLocalDB()) { localDB = new TransientLocalDB(); - JOptionPane.showMessageDialog(null, - "Ignoring local database.\nMessages will not be saved!", - "Local database warning", - JOptionPane.WARNING_MESSAGE); + new Alert(AlertType.WARNING, "Ignoring local database.\nMessages will not be saved!").showAndWait(); } else try { localDB = new PersistentLocalDB(new File(config.getHomeDirectory(), config.getLocalDB().getPath())); } catch (IOException e3) { logger.log(Level.SEVERE, "Could not initialize local database", e3); - JOptionPane.showMessageDialog(null, "Could not initialize local database!\n" + e3, "Local database error", JOptionPane.ERROR_MESSAGE); + new Alert(AlertType.ERROR, "Could not initialize local database!\n" + e3).showAndWait(); System.exit(1); return; } @@ -93,7 +89,7 @@ public final class Startup extends Application { cache = new Cache<>(); // Try to connect to the server - new LoginDialog(client, localDB, cache); + new LoginDialog(client, localDB, cache).showAndWait(); // Set client user in local database localDB.setUser(client.getSender()); @@ -106,10 +102,7 @@ public final class Startup extends Application { // The local database file has not yet been created, probably first login } catch (Exception e) { e.printStackTrace(); - JOptionPane.showMessageDialog(null, - "Error while loading local database: " + e + "\nChats will not be stored locally.", - "Local DB error", - JOptionPane.WARNING_MESSAGE); + new Alert(AlertType.ERROR, "Error while loading local database: " + e + "\nChats will not be stored locally.").showAndWait(); } // Initialize write proxy @@ -128,13 +121,6 @@ public final class Startup extends Application { .filter(u -> u instanceof User && u != localDB.getUser()) .map(User.class::cast) .forEach(u -> u.setStatus(UserStatus.OFFLINE)); - } - - /** - * {@inheritDoc} - */ - @Override - public void start(Stage stage) throws Exception { // Prepare stage and load ChatScene var loader = new FXMLLoader(getClass().getResource("ChatScene.fxml")); diff --git a/src/main/java/envoy/client/ui/container/LoginDialog.java b/src/main/java/envoy/client/ui/container/LoginDialog.java deleted file mode 100644 index b523849..0000000 --- a/src/main/java/envoy/client/ui/container/LoginDialog.java +++ /dev/null @@ -1,346 +0,0 @@ -package envoy.client.ui.container; - -import java.awt.*; -import java.awt.event.ItemEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.IOException; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.logging.Logger; - -import javax.naming.TimeLimitExceededException; -import javax.swing.*; -import javax.swing.border.EmptyBorder; - -import envoy.client.data.*; -import envoy.client.event.HandshakeSuccessfulEvent; -import envoy.client.net.Client; -import envoy.client.ui.Theme; -import envoy.client.ui.primary.PrimaryButton; -import envoy.data.LoginCredentials; -import envoy.data.Message; -import envoy.data.User; -import envoy.event.EventBus; -import envoy.event.HandshakeRejectionEvent; -import envoy.exception.EnvoyException; -import envoy.util.EnvoyLog; - -/** - * Project: envoy-client
- * File: LoginDialog.java
- * Created: 01.01.2020
- * - * @author Kai S. K. Engelbart - * @author Maximilian Käfer - * @since Envoy Client v0.3-alpha - */ -public class LoginDialog extends JDialog { - - private JPanel contentPanel; - private JTextField textField; - private JPasswordField passwordField; - private JPasswordField repeatPasswordField; - - private JLabel lblUserName; - private JLabel lblPassword; - private JLabel lblRepeatPassword; - private JLabel errorMessage; - - private GridBagConstraints gbc_lblRepeatPassword; - private GridBagConstraints gbc_repeatPasswordField; - private GridBagConstraints gbc_errorMessage; - - private JPanel buttonPane; - private JTextPane registerText; - private JCheckBox registerCheckBox; - private PrimaryButton okButton; - private PrimaryButton cancelButton; - - private LoginCredentials credentials; - - private final Client client; - private final LocalDB localDB; - private final Cache receivedMessageCache; - - private static final ClientConfig config = ClientConfig.getInstance(); - private static final Logger logger = EnvoyLog.getLogger(LoginDialog.class); - private static final long serialVersionUID = 0L; - - /** - * Displays a dialog enabling the user to enter their user name and password. - * - * @param client the client used to perform the handshake - * @param localDB the local database in which data is persisted - * @param receivedMessageCache the cache that stored messages received during - * the handshake - * @since Envoy Client v0.3-alpha - */ - public LoginDialog(Client client, LocalDB localDB, Cache receivedMessageCache) { - this.client = client; - this.localDB = localDB; - this.receivedMessageCache = receivedMessageCache; - - // Prepare handshake - localDB.loadIDGenerator(); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { abortLogin(); } - }); - - initUi(); - - okButton.addActionListener((evt) -> { - try { - if (registerCheckBox.isSelected()) { - // Check password equality - if (Arrays.equals(passwordField.getPassword(), repeatPasswordField.getPassword())) { - credentials = new LoginCredentials(textField.getText(), passwordField.getPassword(), true); - performHandshake(); - } else { - JOptionPane.showMessageDialog(this, "The repeated password is not the original password!"); - clearPasswordFields(); - } - } else { - credentials = new LoginCredentials(textField.getText(), passwordField.getPassword(), false); - performHandshake(); - } - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } - }); - - // Listen to handshake rejections - EventBus.getInstance() - .register(HandshakeRejectionEvent.class, - evt -> { clearPasswordFields(); errorMessage.setVisible(true); errorMessage.setText(evt.get()); }); - - // Exit the application when the dialog is cancelled - cancelButton.addActionListener(evt -> abortLogin()); - - // Log in directly if configured - if (config.hasLoginCredentials()) { - credentials = config.getLoginCredentials(); - performHandshake(); - return; - } - - setVisible(true); - } - - private void performHandshake() { - try { - client.performHandshake(credentials, receivedMessageCache); - if (client.isOnline()) { - client.initReceiver(localDB, receivedMessageCache); - dispose(); - } - } catch (IOException | InterruptedException | TimeLimitExceededException e) { - logger.warning("Could not connect to server. Trying offline mode..."); - e.printStackTrace(); - try { - // Try entering offline mode - localDB.loadUsers(); - User clientUser = (User) 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, - "A connection to the server could not be established. Starting in offline mode.\n" + e, - "Connection error", - JOptionPane.WARNING_MESSAGE); - dispose(); - } catch (Exception e1) { - JOptionPane.showMessageDialog(null, e1, "Client error", JOptionPane.ERROR_MESSAGE); - System.exit(1); - return; - } - } - } - - private void initUi() { - setSize(338, 123); - setLocationRelativeTo(null); - setResizable(false); - getContentPane().setLayout(new BorderLayout()); - contentPanel = new JPanel(); - contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); - getContentPane().add(contentPanel, BorderLayout.CENTER); - GridBagLayout gbl_contentPanel = new GridBagLayout(); - gbl_contentPanel.columnWidths = new int[] { 0, 0, 0 }; - gbl_contentPanel.rowHeights = new int[] { 0, 0, 0 }; - gbl_contentPanel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE }; - gbl_contentPanel.rowWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE }; - contentPanel.setLayout(gbl_contentPanel); - - lblUserName = new JLabel("Username:"); - GridBagConstraints gbc_lblUserName = new GridBagConstraints(); - gbc_lblUserName.anchor = GridBagConstraints.EAST; - gbc_lblUserName.insets = new Insets(0, 0, 5, 5); - gbc_lblUserName.gridx = 0; - gbc_lblUserName.gridy = 0; - contentPanel.add(lblUserName, gbc_lblUserName); - - textField = new JTextField(); - textField.setBorder(null); - GridBagConstraints gbc_textField = new GridBagConstraints(); - gbc_textField.insets = new Insets(0, 0, 5, 0); - gbc_textField.fill = GridBagConstraints.HORIZONTAL; - gbc_textField.gridx = 1; - gbc_textField.gridy = 0; - contentPanel.add(textField, gbc_textField); - textField.setColumns(10); - - lblPassword = new JLabel("Password:"); - GridBagConstraints gbc_lblPassword = new GridBagConstraints(); - gbc_lblPassword.anchor = GridBagConstraints.EAST; - gbc_lblPassword.insets = new Insets(0, 0, 0, 5); - gbc_lblPassword.gridx = 0; - gbc_lblPassword.gridy = 1; - contentPanel.add(lblPassword, gbc_lblPassword); - - passwordField = new JPasswordField(); - passwordField.setBorder(null); - GridBagConstraints gbc_passwordField = new GridBagConstraints(); - gbc_passwordField.fill = GridBagConstraints.HORIZONTAL; - gbc_passwordField.gridx = 1; - gbc_passwordField.gridy = 1; - contentPanel.add(passwordField, gbc_passwordField); - - lblRepeatPassword = new JLabel("Repeat Password:"); - gbc_lblRepeatPassword = new GridBagConstraints(); - gbc_lblRepeatPassword.anchor = GridBagConstraints.EAST; - gbc_lblRepeatPassword.insets = new Insets(0, 0, 0, 5); - gbc_lblRepeatPassword.gridx = 0; - gbc_lblRepeatPassword.gridy = 2; - - repeatPasswordField = new JPasswordField(); - gbc_repeatPasswordField = new GridBagConstraints(); - gbc_repeatPasswordField.fill = GridBagConstraints.HORIZONTAL; - gbc_repeatPasswordField.gridx = 1; - gbc_repeatPasswordField.gridy = 2; - - errorMessage = new JLabel(); - gbc_errorMessage = new GridBagConstraints(); - gbc_errorMessage.gridx = 1; - gbc_errorMessage.gridy = 3; - gbc_errorMessage.fill = GridBagConstraints.HORIZONTAL; - gbc_errorMessage.insets = new Insets(5, 5, 5, 5); - errorMessage.setForeground(Color.RED); - errorMessage.setVisible(false); - contentPanel.add(errorMessage, gbc_errorMessage); - - buttonPane = new JPanel(); - - registerText = new JTextPane(); - registerText.setEditable(false); - registerText.setText("Register?"); - registerText.setFont(new Font("Arial", Font.BOLD, 12)); - registerText.setAlignmentX(LEFT_ALIGNMENT); - buttonPane.add(registerText); - - registerCheckBox = new JCheckBox(); - registerCheckBox.setAlignmentX(LEFT_ALIGNMENT); - registerCheckBox.addItemListener(e -> { - switch (e.getStateChange()) { - case ItemEvent.SELECTED: - contentPanel.add(lblRepeatPassword, gbc_lblRepeatPassword); - contentPanel.add(repeatPasswordField, gbc_repeatPasswordField); - setSize(338, 173); - break; - - case ItemEvent.DESELECTED: - if (repeatPasswordField.getParent() == contentPanel) { - contentPanel.remove(lblRepeatPassword); - contentPanel.remove(repeatPasswordField); - setSize(338, 148); - } - break; - } - contentPanel.revalidate(); - contentPanel.repaint(); - }); - buttonPane.add(registerCheckBox); - - buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); - getContentPane().add(buttonPane, BorderLayout.SOUTH); - okButton = new PrimaryButton("OK"); - okButton.setActionCommand("OK"); - buttonPane.add(okButton); - getRootPane().setDefaultButton(okButton); - - cancelButton = new PrimaryButton("Cancel"); - cancelButton.setActionCommand("Cancel"); - buttonPane.add(cancelButton); - setTheme(); - - setModalityType(Dialog.DEFAULT_MODALITY_TYPE); - - EventBus.getInstance().register(HandshakeSuccessfulEvent.class, evt -> dispose()); - } - - /** - * Resets the text stored in the password fields. - * - * @since Envoy Client v0.3-alpha - */ - private void clearPasswordFields() { - passwordField.setText(null); - repeatPasswordField.setText(null); - } - - private void setTheme() { - Theme theme = Settings.getInstance().getCurrentTheme(); - - // Panels - contentPanel.setBackground(theme.getBackgroundColor()); - contentPanel.setForeground(theme.getBackgroundColor()); - - buttonPane.setBackground(theme.getBackgroundColor()); - buttonPane.setForeground(theme.getBackgroundColor()); - - // Input Fields - textField.setBackground(theme.getCellColor()); - textField.setForeground(theme.getUserNameColor()); - - passwordField.setBackground(theme.getCellColor()); - passwordField.setForeground(theme.getUserNameColor()); - - repeatPasswordField.setBackground(theme.getCellColor()); - repeatPasswordField.setForeground(theme.getUserNameColor()); - - // JLabels - lblUserName.setBackground(theme.getCellColor()); - lblUserName.setForeground(theme.getUserNameColor()); - - lblPassword.setBackground(theme.getCellColor()); - lblPassword.setForeground(theme.getUserNameColor()); - - lblRepeatPassword.setBackground(theme.getCellColor()); - lblRepeatPassword.setForeground(theme.getUserNameColor()); - - // Register - registerText.setBackground(theme.getCellColor()); - registerText.setForeground(theme.getUserNameColor()); - - registerCheckBox.setBackground(theme.getCellColor()); - - // Buttons - okButton.setBackground(theme.getInteractableBackgroundColor()); - okButton.setForeground(theme.getInteractableForegroundColor()); - - cancelButton.setBackground(theme.getInteractableBackgroundColor()); - cancelButton.setForeground(theme.getInteractableForegroundColor()); - } - - /** - * Shuts the system down properly if the login was aborted. - * - * @since Envoy Client v0.1-beta - */ - private void abortLogin() { - logger.info("The login process has been cancelled. Exiting..."); - System.exit(0); - } -} diff --git a/src/main/java/envoy/client/ui/container/package-info.java b/src/main/java/envoy/client/ui/container/package-info.java deleted file mode 100644 index aab40a5..0000000 --- a/src/main/java/envoy/client/ui/container/package-info.java +++ /dev/null @@ -1,13 +0,0 @@ -/** - * This package contains all graphical Containers, like Dialogs and Frames.
- *
- * Project: envoy-client
- * File: package-info.java
- * Created: 16 Mar 2020
- * - * @author Leon Hofmeister - * @author Kai S. K. Engelbart - * @author Maximilian Käfer - * @since Envoy Client v0.1-beta - */ -package envoy.client.ui.container;