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 }