1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package triptracker.client.gps.ui;
21
22 import java.awt.GridLayout;
23 import java.awt.event.ActionListener;
24
25 import javax.swing.AbstractButton;
26 import javax.swing.BorderFactory;
27 import javax.swing.JButton;
28 import javax.swing.JComponent;
29 import javax.swing.JLabel;
30 import javax.swing.JOptionPane;
31 import javax.swing.JPanel;
32 import javax.swing.JTextField;
33
34 import triptracker.client.gps.core.GPSClientModel;
35 import triptracker.client.net.GPSSocketAdapter;
36 import triptracker.client.ui.Form;
37 import se.datadosen.component.RiverLayout;
38 import triptracker.core.ConnectionState;
39 import triptracker.core.Protocol;
40 import static triptracker.core.Utils.*;
41
42 public class LoginForm extends GPSSocketAdapter implements Form {
43 protected static int nameCount = 1;
44
45 protected final String name;
46
47 private final JPanel mainPanel, buttonPanel, loginPanel, loginBorderPanel;
48
49 private final JTextField userField, passField, hostField, portField;
50
51 protected final JButton loginButton, cancelButton;
52
53
54 private GPSClientModel model;
55
56 private GPSGui view;
57
58 /***
59 * The constructor creates a JPanel for the login information, and registers
60 * as a form on the <code>view</code>.
61 *
62 * @param view
63 * JComponent form manager
64 * @param model
65 * GPS model
66 */
67 public LoginForm(GPSGui view, GPSClientModel model) {
68 this(view, LoginForm.class.getClass().getName() + "-" + nameCount++,
69 model);
70 }
71
72 /***
73 * The constructor creates a JPanel for the login information, and registers
74 * as a form on the <code>view</code>. The form name should be unique for
75 * the given form manager.
76 *
77 * @param view
78 * parant JComponent form manager
79 * @param name
80 * unique form name
81 * @param model
82 * GPS model
83 */
84 public LoginForm(GPSGui view, String name, GPSClientModel model) {
85 this.name = name;
86 this.model = model;
87 this.view = view;
88
89 userField = new JTextField("trip", 15);
90 passField = new JTextField("track", 15);
91
92 hostField = new JTextField(Protocol.HOST, 15);
93 portField = new JTextField(Protocol.PORTNR + "", 15);
94
95 loginButton = new JButton("Log in", getImageIcon("loginIcon.gif"));
96 loginButton.setVerticalTextPosition(AbstractButton.BOTTOM);
97 loginButton.setHorizontalTextPosition(AbstractButton.RIGHT);
98
99 cancelButton = new JButton("Cancel", getImageIcon("icon_offline.gif"));
100 cancelButton.setVerticalTextPosition(AbstractButton.BOTTOM);
101 cancelButton.setHorizontalTextPosition(AbstractButton.RIGHT);
102
103 buttonPanel = new JPanel();
104 buttonPanel.setLayout(new GridLayout(1, 0));
105 buttonPanel.add(loginButton);
106 buttonPanel.add(cancelButton);
107
108 loginPanel = new JPanel();
109 loginPanel.setLayout(new RiverLayout());
110 loginPanel.setBorder(BorderFactory.createTitledBorder(null,
111 "Enter login settings"));
112 loginPanel.add("left", new JLabel("Username"));
113 loginPanel.add("tab hfill", userField);
114 loginPanel.add("br left", new JLabel("Password"));
115 loginPanel.add("tab hfill", passField);
116 loginPanel.add("p left", new JLabel("Hostname"));
117 loginPanel.add("tab hfill", hostField);
118 loginPanel.add("br left", new JLabel("Portname"));
119 loginPanel.add("tab hfill", portField);
120
121 loginBorderPanel = new JPanel();
122 loginBorderPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10,
123 10));
124 loginBorderPanel.add(loginPanel);
125
126 mainPanel = new JPanel();
127 mainPanel.setLayout(new RiverLayout());
128 mainPanel.add("center", new JLabel(getImageIcon("triptracker.png")));
129 mainPanel.add("p center", loginBorderPanel);
130 mainPanel.add("p center", buttonPanel);
131
132 setStatusMsg("Enter logon settings");
133
134 view.register(this);
135 new LoginController(model, this);
136 model.addSocketListener(this);
137 }
138
139 /***
140 * Register a listener on the login button.
141 *
142 * @param listener
143 */
144 public void addBtnListener(ActionListener listener) {
145 loginButton.addActionListener(listener);
146 cancelButton.addActionListener(listener);
147 }
148
149 /***
150 * Gets the formComponent
151 */
152 public JComponent getFormComponent() {
153 return mainPanel;
154 }
155
156 /***
157 * Gets the name
158 */
159 public String getName() {
160 return name;
161 }
162
163 /***
164 * Get username
165 *
166 * @return username
167 */
168 public String getUsername() {
169 return userField.getText();
170 }
171
172 /***
173 * Get password
174 *
175 * @return password
176 */
177 public String getPassword() {
178 return passField.getText();
179 }
180
181 /***
182 * Sets status message
183 *
184 * @param msg the message
185 */
186 public void setStatusMsg(String msg) {
187 view.setStatusMsg(msg);
188 }
189
190 /***
191 * Connection Update
192 */
193 @Override
194 public void connectionUpdate(ConnectionState state) {
195 switch (state) {
196 case CONNECTED:
197 setStatusMsg("Connected to server");
198 break;
199 case AUTH_SUCCESS:
200 setStatusMsg("Login verified");
201 if (model.getActiveRoute().getRouteId() != -1) {
202 model.setActiveRoute(model.getActiveRoute());
203 model.setRouteOnServer(model.getActiveRoute());
204 System.out.println("** Setting route " + model.getActiveRoute().getRouteId());
205 }
206 view.showMainForm();
207 break;
208 case AUTH_FAILED:
209 setStatusMsg("Login failed: Wrong username or password");
210 break;
211 case DISCONNECTED:
212 setStatusMsg("Disconnected from server");
213 break;
214 }
215 }
216
217 /***
218 * Get the active port
219 *
220 * @return port the port
221 */
222 public int getPort() {
223 return Integer.parseInt(portField.getText());
224 }
225
226 /***
227 * Get the hostname value
228 *
229 * @return hostname
230 */
231 public String getHostname() {
232 return hostField.getText();
233 }
234
235 /***
236 * Shows a warning dialog
237 *
238 * @param heading the heading for the dialog
239 * @param warning the warning to show in the dialog
240 */
241 public void showErrorDialog(String heading, String warning) {
242 JOptionPane.showMessageDialog(null, warning, heading,
243 JOptionPane.ERROR_MESSAGE);
244 }
245
246 /***
247 * Shows the main form
248 *
249 */
250 public void showMain() {
251 view.showMainForm();
252 }
253
254
255 public void refreshView() {}
256
257 public void setEnableControls(boolean enable) {
258 loginButton.setEnabled(enable);
259 hostField.setEditable(enable);
260 userField.setEditable(enable);
261 passField.setEditable(enable);
262 portField.setEditable(enable);
263 }
264 }