/* * @(#)UserForm.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.datatype.User; 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.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.FileUpload; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler; import com.google.gwt.user.client.ui.FormPanel.SubmitEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitHandler; 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.MessageBoxConfig; import com.gwtext.client.widgets.Panel; import com.gwtext.client.widgets.TabPanel; import com.gwtext.client.widgets.WaitConfig; import com.gwtext.client.widgets.Window; import com.gwtext.client.widgets.event.ButtonListenerAdapter; import com.gwtext.client.widgets.form.Field; import com.gwtext.client.widgets.form.FormPanel; import com.gwtext.client.widgets.form.Label; import com.gwtext.client.widgets.form.MultiFieldPanel; import com.gwtext.client.widgets.form.NumberField; import com.gwtext.client.widgets.form.TextField; import com.gwtext.client.widgets.form.VType; import com.gwtext.client.widgets.form.event.TextFieldListenerAdapter; import com.gwtext.client.widgets.layout.ColumnLayoutData; /** * Formularfelder und Submit des Benutzers zur Registrierung. Implementiert das * Interface Form * * @author Georg Ortwein * @author Projekt Team 4711 * @version 0.3, 26.05.09 */ public class UserRegistrationForm implements Form { private HorizontalPanel horizontalPanel; private FormPanel formPanel; private MultiFieldPanel cityPanel, streetPanel; private NumberField txtbxZip; private TextField txtbxCity; private TextField txtbxLastName; private TextField txtbxFirstName; private TextField txtbxUsername; private TextField txtbxStreet; private NumberField txtbxNumber; private TextField txtbxPassword; private TextField txtbxPassword2; private TextField txtbxEmail2; private TextField txtbxEmail; private Button regButton; private MultiFieldPanel panel1; private MultiFieldPanel panel2; private MultiFieldPanel panel3; private MultiFieldPanel panel4; private MultiFieldPanel panel5; private TextField dummy; private Label txtbxUserFree; private MultiFieldPanel userFreePanel; private final Window window; private TextField hiddenText; /** * Initialisiert Formular Eingabefelder */ public UserRegistrationForm(TabPanel outerTabPanel) { { Panel panelContainer = new Panel(); panelContainer.setTitle("Registrieren"); horizontalPanel = new HorizontalPanel(); { formPanel = new FormPanel(); formPanel.setLabelAlign(Position.RIGHT); formPanel.setLabelWidth(100); formPanel.setBorder(false); formPanel.setFooter(true); formPanel.setMonitorValid(true); formPanel.setLabelAlign(Position.TOP); { txtbxFirstName = new TextField("Vorname", "text_field", 190); txtbxFirstName.setAllowBlank(false); txtbxFirstName.setTabIndex(1); txtbxFirstName .setBlankText("Bitte geben Sie ihren Vornamen ein"); txtbxUsername = new TextField("Benutzername", "text_field", 190); txtbxUsername.setAllowBlank(false); txtbxUsername.setMinLength(5); txtbxUsername .setMinLengthText("Der Benutzername muss mindestens 5 Zeichen lang sein"); txtbxUsername.setTabIndex(7); txtbxUsername .setBlankText("Bitte geben Sie ihren gewünschten Benutzernamen ein"); txtbxUsername.addListener(new TextFieldListenerAdapter() { public void onBlur(Field field) { if (txtbxUsername.isValid()) { checkUsername(txtbxUsername.getText()); } } }); txtbxUserFree = new Label(); txtbxUserFree.setText("Benutzername schon vergeben!"); txtbxUserFree.setVisible(false); panel1 = new MultiFieldPanel(); panel1.addToRow(txtbxFirstName, 250); panel1.addToRow(txtbxUsername, new ColumnLayoutData(1)); panel1.setBorder(false); userFreePanel = new MultiFieldPanel(); userFreePanel.addToRow(panel1, 460); userFreePanel.addToRow(txtbxUserFree, new ColumnLayoutData( 1)); userFreePanel.setBorder(false); formPanel.add(userFreePanel); txtbxLastName = new TextField("Nachname", "text_field", 190); txtbxLastName.setAllowBlank(false); txtbxLastName.setTabIndex(2); txtbxLastName .setBlankText("Bitte geben Sie ihren Nachnamen ein"); txtbxPassword = new TextField("Passwort", "text_field", 190); txtbxPassword.setAllowBlank(false); txtbxPassword.setTabIndex(8); txtbxPassword .setBlankText("Bitte geben Sie ihr gewünschtes Passwort ein <br>(mindestens acht Zeichen)"); txtbxPassword.setMinLength(8); txtbxPassword.setPassword(true); panel2 = new MultiFieldPanel(); panel2.addToRow(txtbxLastName, 250); panel2.addToRow(txtbxPassword, new ColumnLayoutData(1)); panel2.setBorder(false); formPanel.add(panel2); txtbxStreet = new TextField("Stra\u00DFe", "text_field", 165); txtbxStreet.setSize("145px", "20px"); txtbxStreet.setAllowBlank(false); txtbxStreet.setTabIndex(3); txtbxStreet .setBlankText("Bitte geben Sie ihre Stra\u00DFe und Hausnummer ein"); txtbxNumber = new NumberField("Nr.", "number_field", 40); // txtbxNumber.setHideLabel(true); txtbxNumber.setAllowDecimals(false); txtbxNumber.setAllowBlank(false); txtbxNumber.setTabIndex(4); txtbxNumber .setBlankText("Bitte geben Sie ihre Stra\u00DFe und Hausnummer ein"); streetPanel = new MultiFieldPanel(); streetPanel.addToRow(txtbxStreet, 150); streetPanel.addToRow(txtbxNumber, new ColumnLayoutData(1)); streetPanel.setBorder(false); txtbxPassword2 = new TextField("Passwort wdh.", "text_field", 190); txtbxPassword2.setAllowBlank(false); txtbxPassword2.setTabIndex(9); txtbxPassword2 .setBlankText("Bitte wiederholen Sie ihr Passwort"); txtbxPassword2.setPassword(true); panel3 = new MultiFieldPanel(); panel3.addToRow(streetPanel, 250); panel3.addToRow(txtbxPassword2, new ColumnLayoutData(1)); panel3.setBorder(false); formPanel.add(panel3); txtbxZip = new NumberField("Plz", "number_field", 50); txtbxZip.setAllowBlank(false); txtbxZip.setAllowDecimals(false); txtbxZip.setTabIndex(5); txtbxZip .setBlankText("Bitte geben Sie ihre Postleitzahl ein"); txtbxZip.setMinLength(5); txtbxZip.setMaxLength(5); txtbxZip .setMinLengthText("Die Postleitzahl muss aus 5 Ziffern bestehen"); txtbxZip .setMaxLengthText("Die Postleitzahl muss aus 5 Ziffern bestehen"); txtbxCity = new TextField("Wohnort", "text_field", 135); txtbxCity.setAllowBlank(false); // txtbxCity.setHideLabel(true); txtbxCity.setTabIndex(6); txtbxNumber .setBlankText("Bitte geben Sie ihren Wohnort ein"); cityPanel = new MultiFieldPanel(); cityPanel.addToRow(txtbxZip, 55); cityPanel.addToRow(txtbxCity, new ColumnLayoutData(1)); cityPanel.setBorder(false); txtbxEmail = new TextField("eMail", "text_field", 190); txtbxEmail.setAllowBlank(false); txtbxEmail.setTabIndex(10); txtbxEmail .setBlankText("Bitte geben Sie ihre eMail Adresse ein"); txtbxEmail.setVtype(VType.EMAIL); txtbxEmail.isValidateOnBlur(); panel4 = new MultiFieldPanel(); panel4.addToRow(cityPanel, 250); panel4.addToRow(txtbxEmail, new ColumnLayoutData(1)); panel4.setBorder(false); formPanel.add(panel4); dummy = new TextField("dummy", "text_field", 190); dummy.setVisible(false); dummy.setHideLabel(true); txtbxEmail2 = new TextField("eMail wdh.", "text_field", 190); txtbxEmail2.setAllowBlank(false); txtbxEmail2.setTabIndex(11); txtbxEmail2 .setBlankText("Bitte wiederholen Sie ihre eMail Adresse"); txtbxEmail2.setVtype(VType.EMAIL); txtbxEmail2.isValidateOnBlur(); panel5 = new MultiFieldPanel(); panel5.addToRow(dummy, 250); panel5.addToRow(txtbxEmail2, new ColumnLayoutData(1)); panel5.setBorder(false); formPanel.add(panel5); // // AB HIER FORM FÜR FILE UPLOAD final com.google.gwt.user.client.ui.FormPanel form = new com.google.gwt.user.client.ui.FormPanel(); form.setAction(GWT.getModuleBaseURL() + "UserImageUploadHandler"); // Because we're going to add a FileUpload widget, we'll // need to set the // form to use the POST method, and multipart MIME encoding. form .setEncoding(com.google.gwt.user.client.ui.FormPanel.ENCODING_MULTIPART); form .setMethod(com.google.gwt.user.client.ui.FormPanel.METHOD_POST); VerticalPanel panel = new VerticalPanel(); form.setWidget(panel); // Create a FileUpload widget. final FileUpload upload = new FileUpload(); upload.setName("uploadFormElement"); hiddenText = new TextField(); hiddenText.setName("uploadHiddenElement"); hiddenText.setVisible(false); panel.add(upload); panel.add(hiddenText); Button button2 = new Button("Submit"); button2.addListener(new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { if(validateImageExtension(upload.getFilename())) { form.submit(); } else { MessageBox.alert("Bitte wählen Sie ein Bild mit der Endung\n \"jpg\", \"png\" oder \"bmp\" aus."); } } }); // Add a 'submit' button. panel.add(button2); form.addSubmitHandler(new SubmitHandler() { public void onSubmit(SubmitEvent event) { if (upload.getFilename().length() == 0) { MessageBox .alert("The text box must not be empty"); event.cancel(); } else { MessageBox.show(new MessageBoxConfig() { { setMsg("Ihr Bild wird gespeichert, bitte warten..."); setProgressText("Speichern..."); setWidth(300); setWait(true); setWaitConfig(new WaitConfig() { { setInterval(200); } }); setAnimEl(regButton.getId()); } }); Timer timer = new Timer() { public void run() { MessageBox.hide(); System.out .println("Done, Your fake data was saved!"); } }; timer.schedule(8000); } } }); form.addSubmitCompleteHandler(new SubmitCompleteHandler() { public void onSubmitComplete(SubmitCompleteEvent event) { // When the form submission is successfully // completed, this event is // fired. Assuming the service returned a response // of type text/html, // we can get the result text here (see the // FormPanel documentation for // further explanation). MessageBox.alert(event.getResults()); } }); window = new Window(); window.setTitle("Bild hochladen"); window.setClosable(true); window.setWidth(600); window.setHeight(350); window.setPlain(true); window.add(form); window.setCloseAction(Window.HIDE); /* uploadWindowButton = new Button("Bild hochladen"); uploadWindowButton.addListener(new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { window.show(submitButton.getId()); } }); formPanel.add(uploadWindowButton); */ // //// ENDE FORMS FÜR FILE UPLOAD regButton = new Button("Registrieren"); regButton.setTabIndex(12); regButton.setFormBind(true); formPanel.addButton(regButton); regButton.addListener(new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { submit(); MessageBox.alert("Sie haben sich erfolgreich registriert."); SwapWeb.getTabPanel().remove("4"); } }); horizontalPanel.add(formPanel); panelContainer.add(horizontalPanel); outerTabPanel.add(panelContainer); } } } } public boolean validateImageExtension(String filename){ boolean isAllowdExt = false; int indexPoint = filename.lastIndexOf("."); int length = filename.length(); String extension = filename.substring(indexPoint+1, length); extension = extension.toLowerCase(); if (extension.equals("jpg") || extension.equals("png") || extension.equals("bmp")) { isAllowdExt = true; } return isAllowdExt; } // public boolean validate() { // if (formPanel.getForm().isValid()) { // // if (txtbxPassword.getText().length() < 8) { // MessageBox.alert("Fehler!", "Ihr Passwort ist zu kurz."); // txtbxPassword.reset(); // txtbxPassword2.reset(); // return false; // } else if (!validateEmail() && validatePassword()) { // MessageBox.alert("Fehler!", "eMails stimmen nicht �berein."); // return false; // } else if (!validatePassword() && validateEmail()) { // txtbxPassword.reset(); // txtbxPassword2.reset(); // MessageBox.alert("Fehler!", // "Passw&ooml;rter stimmen nicht �berein."); // return false; // } else if (!validateEmail() && !validatePassword()) { // txtbxPassword.reset(); // txtbxPassword2.reset(); // MessageBox.alert("Fehler!", // "Passw&ooml;rter und eMails stimmen nicht �berein."); // return false; // } else if (txtbxUserFree.isVisible()) { // MessageBox.alert("Fehler!", // "Der Benutzername ist schon vergeben."); // } else { // MessageBox.alert("kein Fehler", "Alles okay"); // return true; // } // } // return false; // } public boolean validateEmail() { if (txtbxEmail.getText().equals(txtbxEmail2.getText())) { return true; } else { return false; } } public boolean validatePassword() { if (txtbxPassword.getText().equals(txtbxPassword2.getText())) { return true; } else { return false; } } /** * Schickt die validierten Formulardaten an den UserManager, und wartet auf * Rueckmeldung */ public boolean submit() { // if (Validation.validateRegisterForm(this)) { // TODO // Sende Daten an Server User user = new User(); user = fillUser(user); System.out.println("test1"); UserManagerAsync userManager = GWT.create(UserManager.class); userManager.createUser(user, new AsyncCallback<Integer>() { public void onFailure(Throwable caught) { // :( System.out.println("neeee: " + caught.getMessage()); } public void onSuccess(Integer serverMsg) { // :) System.out.println("OK: " + serverMsg.toString()); if(serverMsg == 2){ MessageBox.alert("ACHTUNG: Sie sind nicht eingeloggt. Bitte Melden Sie sich an."); } else if (serverMsg > 2) { //formPanel.getForm().reset(); hiddenText.setRawValue(serverMsg.toString()); // window.show(regButton.getId()); } else if (serverMsg == 0){ MessageBox.alert("FEHLER: Ihr Profil konnte nicht angelegt werden."); } } }); // } return true; } private User fillUser(User user) { user.setFirstName(txtbxFirstName.getText()); user.setLastName(txtbxLastName.getText()); user.setStreet(txtbxStreet.getText()); user.setHouseNumber(txtbxNumber.getText()); user.setZip(txtbxZip.getText()); user.setCity(txtbxCity.getText()); user.setUsername(txtbxUsername.getText()); user.setPassword(txtbxPassword.getText()); user.setEmail(txtbxEmail.getText()); return user; } /** * sendet den eingegeben Benutzernamen an den Server, welcher �berpr�ft ob * dieser noch frei ist. Ist der Benutzername schon vergeben, wird das * textField txtbxUserFree sichtbar geschaltet, * * @param username */ public void checkUsername(String username) { // TODO rpc zum �berpr�fen ob der Benutzername noch frei ist // Sende Daten an Server UserManagerAsync userManager = GWT.create(UserManager.class); userManager.checkUsername(username, new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { // :( //MessageBox.alert("fehler"); } public void onSuccess(Boolean serverMsg) { // :) if (serverMsg) { txtbxUserFree.setVisible(true); } else { txtbxUserFree.setVisible(false); } } }); } }