/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.server.admin.client.mvp.view.dialog; import static org.kaaproject.kaa.server.admin.shared.util.Utils.isEmpty; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import org.kaaproject.avro.ui.gwt.client.input.InputEvent; import org.kaaproject.avro.ui.gwt.client.input.InputEventHandler; import org.kaaproject.avro.ui.gwt.client.widget.AlertPanel; import org.kaaproject.avro.ui.gwt.client.widget.SizedTextBox; import org.kaaproject.avro.ui.gwt.client.widget.dialog.AvroUiDialog; import org.kaaproject.kaa.common.dto.admin.ResultCode; import org.kaaproject.kaa.server.admin.client.mvp.view.widget.KaaAdminSizedTextBox; import org.kaaproject.kaa.server.admin.client.util.HasErrorMessage; import org.kaaproject.kaa.server.admin.client.util.Utils; import org.kaaproject.kaa.server.admin.shared.services.KaaAuthServiceAsync; public class ResetPasswordDialog extends AvroUiDialog implements HasErrorMessage { private KaaAuthServiceAsync authService = KaaAuthServiceAsync.Util.getInstance(); private AlertPanel errorPanel; private AlertPanel messagePanel; private SizedTextBox usernameOrEmail; private Button sendResetPasswordLinkButton; private Listener listener; /** * Instantiates a new ResetPasswordDialog. */ public ResetPasswordDialog(Listener listener) { super(false, true); this.listener = listener; setWidth("500px"); setTitle(Utils.constants.resetPassword()); VerticalPanel dialogContents = new VerticalPanel(); dialogContents.setSpacing(4); setWidget(dialogContents); errorPanel = new AlertPanel(AlertPanel.Type.ERROR); errorPanel.setVisible(false); dialogContents.add(errorPanel); messagePanel = new AlertPanel(AlertPanel.Type.WARNING); messagePanel.setMessage(Utils.messages.resetPasswordMessage()); dialogContents.add(messagePanel); FlexTable table = new FlexTable(); table.setCellSpacing(6); int row = 0; Widget label = new Label(Utils.constants.usernameOrEmail()); label.addStyleName(Utils.avroUiStyle.requiredField()); usernameOrEmail = new KaaAdminSizedTextBox(255); table.setWidget(row, 0, label); table.setWidget(row, 1, usernameOrEmail); usernameOrEmail.addInputHandler(new InputEventHandler() { @Override public void onInputChanged(InputEvent event) { boolean valid = validate(); sendResetPasswordLinkButton.setEnabled(valid); } }); table.getCellFormatter().setHorizontalAlignment(row, 0, HasHorizontalAlignment.ALIGN_RIGHT); dialogContents.add(table); sendResetPasswordLinkButton = new Button( Utils.constants.sendResetPasswordLink(), new ClickHandler() { @Override public void onClick(ClickEvent event) { validateUsernameOrEmail(); } }); Button cancelButton = new Button(Utils.constants.cancel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { hide(); ResetPasswordDialog.this.listener.onCancel(); } }); addButton(sendResetPasswordLinkButton); addButton(cancelButton); sendResetPasswordLinkButton.setEnabled(false); } /** * Show reset password dialog. */ public static ResetPasswordDialog showResetPasswordDialog(Listener listener) { ResetPasswordDialog dialog = new ResetPasswordDialog(listener); dialog.center(); dialog.show(); return dialog; } private boolean validate() { return !isEmpty(usernameOrEmail.getValue()); } private void validateUsernameOrEmail() { String usernameOrEmailText = usernameOrEmail.getValue(); authService.checkUsernameOrEmailExists(usernameOrEmailText, new AsyncCallback<ResultCode>() { @Override public void onFailure(Throwable caught) { Utils.handleException(caught, ResetPasswordDialog.this); } @Override public void onSuccess(ResultCode result) { if (ResultCode.OK != result) { setErrorMessage(Utils.constants.getString(result.getResourceKey())); } else { sendResetPasswordLink(); } } }); } private void sendResetPasswordLink() { String usernameOrEmailText = usernameOrEmail.getValue(); authService.sendPasswordResetLinkByEmail(usernameOrEmailText, new AsyncCallback<ResultCode>() { @Override public void onFailure(Throwable caught) { Utils.handleException(caught, ResetPasswordDialog.this); } @Override public void onSuccess(ResultCode result) { if (ResultCode.OK != result) { setErrorMessage(Utils.constants.getString(result.getResourceKey())); } else { MessageDialog dialog = new MessageDialog(new MessageDialog.Listener() { @Override public void onOk() { hide(); listener.onSendResetPasswordLink(); } }, Utils.constants.resetLinkWasSent(), Utils.messages.resetPasswordLinkWasSent()); dialog.show(); dialog.center(); } } }); } @Override public void clearError() { errorPanel.setMessage(""); errorPanel.setVisible(false); } @Override public void setErrorMessage(String message) { errorPanel.setMessage(message); errorPanel.setVisible(true); } public interface Listener { public void onSendResetPasswordLink(); public void onCancel(); } }