Added LoginDialog
This commit is contained in:
		
							
								
								
									
										118
									
								
								src/main/java/envoy/client/ui/LoginDialog.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								src/main/java/envoy/client/ui/LoginDialog.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.*; | ||||
| import java.security.NoSuchAlgorithmException; | ||||
|  | ||||
| import javax.swing.*; | ||||
| import javax.swing.border.EmptyBorder; | ||||
|  | ||||
| import envoy.data.LoginCredentials; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>LoginDialog.java</strong><br> | ||||
|  * Created: <strong>01.01.2020</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  * @since Envoy v0.3-alpha | ||||
|  */ | ||||
| public class LoginDialog extends JDialog { | ||||
|  | ||||
| 	private final JPanel contentPanel = new JPanel(); | ||||
|  | ||||
| 	private static final long	serialVersionUID	= 352021600833907468L; | ||||
| 	private JTextField			textField; | ||||
| 	private JPasswordField		passwordField; | ||||
|  | ||||
| 	private LoginCredentials credentials; | ||||
|  | ||||
| 	/** | ||||
| 	 * Displays a dialog enabling the user to enter their user name and password. | ||||
| 	 *  | ||||
| 	 * @since Envoy v0.3-alpha | ||||
| 	 */ | ||||
| 	public LoginDialog() { | ||||
| 		setSize(338, 123); | ||||
| 		setLocationRelativeTo(null); | ||||
| 		getContentPane().setLayout(new BorderLayout()); | ||||
| 		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); | ||||
| 		{ | ||||
| 			JLabel				lblUserName		= new JLabel("User name:"); | ||||
| 			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(); | ||||
| 			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); | ||||
| 		} | ||||
| 		{ | ||||
| 			JLabel				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(); | ||||
| 			GridBagConstraints gbc_passwordField = new GridBagConstraints(); | ||||
| 			gbc_passwordField.fill	= GridBagConstraints.HORIZONTAL; | ||||
| 			gbc_passwordField.gridx	= 1; | ||||
| 			gbc_passwordField.gridy	= 1; | ||||
| 			contentPanel.add(passwordField, gbc_passwordField); | ||||
| 		} | ||||
| 		{ | ||||
| 			JPanel buttonPane = new JPanel(); | ||||
| 			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); | ||||
| 			getContentPane().add(buttonPane, BorderLayout.SOUTH); | ||||
| 			{ | ||||
| 				JButton okButton = new JButton("OK"); | ||||
| 				okButton.addActionListener((evt) -> { | ||||
| 					try { | ||||
| 						credentials = new LoginCredentials(textField.getText(), passwordField.getPassword()); | ||||
| 						dispose(); | ||||
| 					} catch (NoSuchAlgorithmException e) { | ||||
| 						e.printStackTrace(); | ||||
| 					} | ||||
| 				}); | ||||
| 				okButton.setActionCommand("OK"); | ||||
| 				buttonPane.add(okButton); | ||||
| 				getRootPane().setDefaultButton(okButton); | ||||
| 			} | ||||
| 			{ | ||||
| 				JButton cancelButton = new JButton("Cancel"); | ||||
| 				cancelButton.addActionListener((evt) -> dispose()); | ||||
| 				cancelButton.setActionCommand("Cancel"); | ||||
| 				buttonPane.add(cancelButton); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		setModal(true); | ||||
| 		setVisible(true); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the {@link LoginCredentials} entered by the user, or {@code null} if | ||||
| 	 *         the dialog has been cancelled | ||||
| 	 * @since Envoy v0.3-alpha | ||||
| 	 */ | ||||
| 	public LoginCredentials getCredentials() { return credentials; } | ||||
| } | ||||
| @@ -71,15 +71,13 @@ public class Startup { | ||||
| 		EnvoyLog.setFileLevelBarrier(config.getFileLevelBarrier()); | ||||
| 		EnvoyLog.setConsoleLevelBarrier(config.getConsoleLevelBarrier()); | ||||
|  | ||||
| 		// Ask the user for their user name | ||||
| 		String userName = JOptionPane.showInputDialog("Please enter your username"); | ||||
| 		if (userName == null || userName.isEmpty()) { | ||||
| 			logger.severe("User name is not set or empty. Exiting..."); | ||||
| 			System.exit(1); | ||||
| 		} | ||||
| 		// Ask the user for their user name and password | ||||
| 		LoginCredentials credentials = new LoginDialog().getCredentials(); | ||||
|  | ||||
| 		// TODO: create dialog | ||||
| 		String pass = JOptionPane.showInputDialog("Enter password"); | ||||
| 		if (credentials == null) { | ||||
| 			logger.info("The login process has been aborted by the user. Exiting..."); | ||||
| 			System.exit(0); | ||||
| 		} | ||||
|  | ||||
| 		// Initialize the local database | ||||
| 		LocalDB localDB; | ||||
| @@ -99,18 +97,18 @@ public class Startup { | ||||
| 		Client client = new Client(); | ||||
| 		try { | ||||
| 			// Try entering online mode first | ||||
| 			client.onlineInit(new LoginCredentials(userName, pass.toCharArray())); | ||||
| 			client.onlineInit(credentials); | ||||
| 		} catch (Exception e1) { | ||||
| 			logger.warning("Could not connect to server. Trying offline mode..."); | ||||
| 			e1.printStackTrace(); | ||||
| 			try { | ||||
| 				// Try entering offline mode | ||||
| 				localDB.loadUsers(); | ||||
| 				User clientUser = localDB.getUsers().get(userName); | ||||
| 				User clientUser = localDB.getUsers().get(credentials.getName()); | ||||
| 				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.", | ||||
| 						"A connection to the server could not be established. Starting in offline mode.\n" + e1, | ||||
| 						"Connection error", | ||||
| 						JOptionPane.WARNING_MESSAGE); | ||||
| 			} catch (Exception e2) { | ||||
| @@ -132,7 +130,7 @@ public class Startup { | ||||
| 		} catch (Exception e) { | ||||
| 			e.printStackTrace(); | ||||
| 			JOptionPane.showMessageDialog(null, | ||||
| 					"Error while loading local database: " + e.toString() + "\nChats might not be stored locally.", | ||||
| 					"Error while loading local database: " + e + "\nChats might not be stored locally.", | ||||
| 					"Local DB error", | ||||
| 					JOptionPane.WARNING_MESSAGE); | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user