package net.thesocialos.client.presenter; import net.thesocialos.client.TheSocialOS; import net.thesocialos.client.helper.RPCXSRF; import net.thesocialos.client.service.UserService; import net.thesocialos.client.service.UserServiceAsync; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.History; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; public class RequestPasswordPresenter implements Presenter { Display display; private final UserServiceAsync userService = GWT.create(UserService.class); PopupPanel panel = new PopupPanel(true, true); public RequestPasswordPresenter(Display display) { this.display = display; panel.setHeight("130px"); panel.setWidth("271px"); } public interface Display { Widget asWidget(); Label getErrorLabel(); Button getButton(); TextBox getEmailText(); } @Override public void go(HasWidgets container) { panel.add(display.asWidget()); panel.center(); panel.show(); bind(); } private native boolean isValidEmail(String email) /*-{ var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid return !reg1.test(email) && reg2.test(email); }-*/; private void bind() { display.getErrorLabel().setText(""); display.getEmailText().setText(""); display.getButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub if (isValidEmail(display.getEmailText().getText())) { display.getErrorLabel().setText(""); sendEmail(display.getEmailText().getText()); } else display.getErrorLabel().setText(TheSocialOS.getConstants().error_Email()); } }); } private void sendEmail(final String email) { final Timer timer = new Timer() { @Override public void run() { panel.hide(); History.newItem("login"); display.asWidget().setVisible(false); } }; new RPCXSRF<Void>(userService) { @Override public void onFailure(Throwable caught) { display.getErrorLabel().setText(TheSocialOS.getMessages().error_EmailnotFound(email)); } @Override public void onSuccess(Void result) { // User registered succesfully display.getErrorLabel().setText(TheSocialOS.getConstants().passwordResetCorretly()); timer.schedule(4000); } @Override protected void XSRFcallService(AsyncCallback<Void> cb) { userService.sendResetPass(email, cb); } }.retry(3); } }