View Javadoc

1   /*
2    * Trip Tracker, a real-time position tracking system for the Internet.
3    * Copyright (C) 2006  Team Trip Tracker
4    *
5    * This program is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License as published by the
7    * Free Software Foundation; either version 2 of the License, or (at your
8    * option) any later version.
9    *
10   * This program is distributed in the hope that it will be useful, but
11   * WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13   * General Public License for more details.
14   *
15   * You should have received a copy of the GNU General Public License along
16   * with this program; if not, write to the Free Software Foundation, Inc.,
17   * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
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  	// private final JLabel messageField;
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); // TODO Move to properties file
90  		passField = new JTextField("track", 15); // TODO Move to properties file
91  
92  		hostField = new JTextField(Protocol.HOST, 15); // TODO Move to properties file
93  		portField = new JTextField(Protocol.PORTNR + "", 15); // TODO Move to properties file
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 	// Not used in this Form
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 }