/** * */ package org.appfuse.webapp.client.ui.login; import org.appfuse.webapp.client.application.ApplicationResources; import org.appfuse.webapp.client.ui.users.signUp.SignUpPlace; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.CheckBox; import com.github.gwtbootstrap.client.ui.PasswordTextBox; import com.github.gwtbootstrap.client.ui.TextBox; import com.github.gwtbootstrap.client.ui.base.AlertBase; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NodeList; import com.google.gwt.editor.client.Editor; import com.google.gwt.editor.client.EditorDriver; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; /** * @author ivangsa * */ public class LoginViewImpl extends Composite implements LoginView, Editor<LoginView.LoginDetails> { interface Binder extends UiBinder<Widget, LoginViewImpl> { } private static Binder uiBinder = GWT.create(Binder.class); interface Driver extends SimpleBeanEditorDriver<LoginView.LoginDetails, LoginViewImpl> { } private final Driver driver = GWT.create(Driver.class); ApplicationResources i18n = GWT.create(ApplicationResources.class); private Delegate delegate; @UiField SimplePanel messages; @UiField TextBox username; @UiField PasswordTextBox password; @UiField Widget rememberMeControl; @UiField CheckBox rememberMe; @UiField Button loginButton; @UiField Element signupParaElement; @UiField Element passwordHintParaElement; @UiField Element requestRecoveryTokenElement; /** * */ public LoginViewImpl() { super(); initWidget(uiBinder.createAndBindUi(this)); driver.initialize(this); username.getElement().setAttribute("required", "required"); username.getElement().setAttribute("autofocus", "autofocus"); password.getElement().setAttribute("required", "required"); // signupParaElement.setInnerHTML(i18n.login_signup("#" + SignUpPlace.PREFIX + ":")); final HTMLPanel passwordHintHtml = new HTMLPanel(i18n.login_passwordHint()); final NodeList<Element> anchors = passwordHintHtml.getElement().getElementsByTagName("a"); final Element a = anchors.getItem(0); final Anchor link = new Anchor(a.getInnerHTML()); link.getElement().setId("signUpLink"); link.addClickHandler(new ClickHandler() { @Override public void onClick(final ClickEvent event) { delegate.onPasswordHintClick(); } }); passwordHintHtml.addAndReplaceElement(link, a); try {// fails on dev mode.. HTMLPanel.wrap(passwordHintParaElement).add(passwordHintHtml); } catch (final Throwable e) { e.printStackTrace(); } final HTMLPanel passwordRecoveryParaHtml = new HTMLPanel(i18n.updatePassword_requestRecoveryTokenLink()); final Element passwordRecoveryA = passwordRecoveryParaHtml.getElement().getElementsByTagName("a").getItem(0); final Anchor passwordRecoveryLink = new Anchor(passwordRecoveryA.getInnerHTML()); passwordRecoveryLink.getElement().setId("requestRecoveryTokenLink"); passwordRecoveryLink.addClickHandler(new ClickHandler() { @Override public void onClick(final ClickEvent event) { delegate.onRequestPasswordRecoveryClick(); } }); passwordRecoveryParaHtml.addAndReplaceElement(passwordRecoveryLink, passwordRecoveryA); try {// fails on dev mode.. HTMLPanel.wrap(requestRecoveryTokenElement).add(passwordRecoveryParaHtml); } catch (final Throwable e) { e.printStackTrace(); } } @Override public void setDelegate(final Delegate delegate) { driver.edit(new LoginDetails()); this.delegate = delegate; } @Override public void setMessage(final AlertBase alert) { messages.clear(); messages.add(alert); } @UiHandler("loginButton") void onLoginClick(final ClickEvent event) { delegate.onLoginClick(); } @UiHandler({ "username", "password" }) void defaultAction(final KeyDownEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { delegate.onLoginClick(); } } @Override public EditorDriver<LoginView.LoginDetails> getEditorDriver() { return driver; } @Override public void setRememberMeEnabled(final boolean rememberMeEnabled) { rememberMeControl.setVisible(rememberMeEnabled); } @Override public void setWaiting(final boolean wait) { loginButton.setEnabled(!wait); } }