/*
* @(#)LoginForm.java 20.04.09
*
* Copyright (c) 2008-2009 Project Team 4711
* All rights reserved.
*/
package ppj09.gwt.swapweb.client.gui;
import ppj09.gwt.swapweb.client.SwapWeb;
import ppj09.gwt.swapweb.client.serverInterface.UserManager;
import ppj09.gwt.swapweb.client.serverInterface.UserManagerAsync;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Hyperlink;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Position;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.KeyListener;
import com.gwtext.client.widgets.form.FormPanel;
import com.gwtext.client.widgets.form.MultiFieldPanel;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.layout.ColumnLayoutData;
/**
* Formularfelder und Submit des Login. Der Benutzer hat die Möglichkeit, seine
* Logindaten einzugeben. Diese Klasse implementiert das Interface Form.
*
* @author Christian Happ
* @author Projekt Team 4711
* @version 0.1, 04.05.09
*/
public class LoginForm implements Form {
/*
* Erstellt ein remote service proxy, um mit dem UserManager der Serverseite
* zu kommunizieren.
*/
private final UserManagerAsync userManager = GWT.create(UserManager.class);
private final UserManagerAsync userManagerGetSession = GWT
.create(UserManager.class);
private TextField txtbxUsername;
private FormPanel formPanel;
private TextField txtbxPassword;
private MultiFieldPanel multiPanel1;
private Button loginButton;
private Hyperlink lostPwHyperlink;
/**
* Initialisiert Formular Eingabefelder
*/
public LoginForm(TabPanel outerTabPanel) {
{
formPanel = new FormPanel();
formPanel.setLabelAlign(Position.TOP);
formPanel.setTitle("Login");
formPanel.setFooter(true);
formPanel.setMonitorValid(true);
formPanel.setBorder(false);
{
txtbxUsername = new TextField("Benutzername", "text_field", 190);
txtbxUsername.setAllowBlank(false);
txtbxUsername
.setBlankText("Bitte geben Sie ihren Benutzernamen ein");
txtbxUsername.setTabIndex(1);
txtbxUsername.focus();
txtbxUsername.addKeyListener(13, new KeyListener() {
public void onKey(int key, EventObject e) {
if (txtbxUsername.isValid() && txtbxPassword.isValid()) {
submit();
}
}
});
txtbxPassword = new TextField("Passwort", "text_field", 190);
txtbxPassword.setAllowBlank(false);
txtbxPassword.setPassword(true);
txtbxPassword.setBlankText("Bitte geben Sie ihr Passwort ein");
txtbxPassword.setMinLength(8);
txtbxPassword
.setMinLengthText("Das Passwort muss mindestens acht Zeichen lang sein");
txtbxPassword.setTabIndex(2);
txtbxPassword.addKeyListener(13, new KeyListener() {
public void onKey(int key, EventObject e) {
if (txtbxUsername.isValid() && txtbxPassword.isValid()) {
submit();
}
}
});
multiPanel1 = new MultiFieldPanel();
multiPanel1.addToRow(txtbxUsername, 210);
multiPanel1.addToRow(txtbxPassword, new ColumnLayoutData(1));
multiPanel1.setBorder(false);
formPanel.add(multiPanel1);
loginButton = new Button("Login");
loginButton.setFormBind(true);
loginButton.setTabIndex(3);
loginButton.addListener(new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
if (txtbxUsername.isValid() && txtbxPassword.isValid()) {
submit();
}
}
});
lostPwHyperlink = new Hyperlink("Passwort vergessen", false,
"newHistoryToken");
multiPanel1 = new MultiFieldPanel();
multiPanel1.addToRow(loginButton, 60);
multiPanel1.addToRow(lostPwHyperlink, new ColumnLayoutData(1));
multiPanel1.setBorder(false);
formPanel.add(multiPanel1);
}
outerTabPanel.add(formPanel);
}
}
/**
* Schickt die validierten Formulardaten an den UserManager und wartet auf
* Rueckmeldung
*/
public boolean submit() {
// Sende Daten an Server
String username = txtbxUsername.getText();
String password = txtbxPassword.getText();
userManager.loginRequest(username, password,
new AsyncCallback<Boolean>() {
public void onFailure(Throwable caught) {
// :(
MessageBox.alert("Benutzername oder Passwort falsch");
txtbxPassword.setRawValue("");
txtbxUsername.setRawValue("");
txtbxUsername
.markInvalid("Bitte geben Sie ihren Benutzernamen ein");
System.out.println("Benutzername oder Passwort falsch");
}
public void onSuccess(Boolean serverMsg) {
// :)
if (serverMsg) {
System.out.println("Eingeloggt");
SwapWeb.setLoggedin(txtbxUsername.getText());
SwapWeb.toggleMeinSwapWeb();
SwapWeb.getTabPanel().remove("3");
SwapWeb.getTabPanel().remove("3");
userManagerGetSession
.getUserSession(new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
System.out
.println("Fehler: LoginForm() getUserSession");
}
public void onSuccess(String result) {
// TODO Auto-generated method stub
SwapWeb
.setUserNameFromSession(result);
}
});
} else
MessageBox
.alert("Benutzername oder Passwort falsch");
txtbxPassword.setRawValue("");
txtbxUsername.setRawValue("");
txtbxUsername
.markInvalid("Bitte geben Sie ihren Benutzernamen ein");
System.out.println("Benutzername oder Passwort falsch");
}
});
return true;
}
}