1 package nl.tudelft.goal.ut2004.visualizer.panels.connection; 2 3 import java.awt.Color; 4 import java.awt.event.ActionEvent; 5 import java.awt.event.ActionListener; 6 import java.awt.event.KeyAdapter; 7 import java.awt.event.KeyEvent; 8 import java.net.URI; 9 import java.net.URISyntaxException; 10 import java.util.prefs.Preferences; 11 12 import javax.swing.JButton; 13 import javax.swing.JLabel; 14 import javax.swing.JPanel; 15 import javax.swing.JTextField; 16 17 public class NotConnectedPanel extends JPanel { 18 19 private static final String SERVER_ADDRESS_KEY = "SERVER_ADDRESS"; 20 private static final String LOCAL_UT_SERVER = "ut://127.0.0.1:3001"; 21 private static Preferences preferences = Preferences.userNodeForPackage(NotConnectedPanel.class); 22 private final JTextField serverAddressField; 23 private final JLabel notice; 24 private IConnect serverConnectionPanel; 25 private final JButton connectButton; 26 27 public NotConnectedPanel(IConnect panel) { 28 this.serverAddressField = createServerAddressField(); 29 this.connectButton = createConnectButton(); 30 this.notice = createNotice(); 31 this.serverConnectionPanel = panel; 32 33 add(serverAddressField); 34 add(connectButton); 35 add(notice); 36 } 37 38 39 private JButton createConnectButton() { 40 JButton connectButton = new JButton("Connect"); 41 connectButton.addActionListener(new ActionListener() { 42 43 @Override 44 public void actionPerformed(ActionEvent e) { 45 tryConnectToServerAddress(); 46 } 47 }); 48 49 return connectButton; 50 } 51 52 private JTextField createServerAddressField() { 53 JTextField text = new JTextField(20); 54 String serverAddress = preferences.get(SERVER_ADDRESS_KEY, LOCAL_UT_SERVER); 55 text.setText(serverAddress); 56 57 text.addKeyListener(new KeyAdapter() { 58 59 @Override 60 public void keyReleased(KeyEvent e) { 61 if (e.getKeyCode() == KeyEvent.VK_ENTER) { 62 tryConnectToServerAddress(); 63 } 64 } 65 66 }); 67 68 return text; 69 } 70 71 private JLabel createNotice() { 72 JLabel notice = new JLabel(); 73 notice.setForeground(Color.BLUE); 74 return notice; 75 } 76 77 private void tryConnectToServerAddress() { 78 79 String serverAddress = serverAddressField.getText(); 80 URI serverURI; 81 try { 82 serverURI = new URI(serverAddress); 83 } catch (URISyntaxException e) { 84 notice.setText("A valid address has the form ut://<address>:<port>"); 85 return; 86 } 87 88 if (serverURI.getPort() == -1 || serverURI.getHost() == null) { 89 notice.setText("A valid address has the form ut://<address>:<port>"); 90 return; 91 } 92 93 notice.setText(""); 94 preferences.put(SERVER_ADDRESS_KEY, serverAddress); 95 serverConnectionPanel.connect(serverURI); 96 } 97 98 99 }