package kornell.gui.client.presentation.profile.generic; import java.util.ArrayList; import java.util.List; import com.github.gwtbootstrap.client.ui.Modal; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; 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.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import kornell.api.client.Callback; import kornell.api.client.KornellSession; import kornell.core.to.UserInfoTO; import kornell.gui.client.KornellConstants; import kornell.gui.client.presentation.profile.ProfileView; import kornell.gui.client.util.forms.FormHelper; import kornell.gui.client.util.forms.formfield.KornellFormFieldWrapper; import kornell.gui.client.util.view.KornellNotification; import kornell.gui.client.util.view.LoadingPopup; public class GenericPasswordChangeView extends Composite implements ProfileView { interface MyUiBinder extends UiBinder<Widget, GenericPasswordChangeView> { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); private static KornellConstants constants = GWT.create(KornellConstants.class); private KornellSession session; private FormHelper formHelper; @UiField Modal passwordChangeModal; @UiField FlowPanel passwordChangeFields; @UiField Button btnOK; @UiField Button btnCancel; private UserInfoTO user; private KornellFormFieldWrapper modalNewPassword, modalNewPasswordConfirm; private List<KornellFormFieldWrapper> fields; private boolean initialized; public GenericPasswordChangeView() { initWidget(uiBinder.createAndBindUi(this)); } public void show(){ if(initialized) passwordChangeModal.show(); } public void initData(KornellSession session, UserInfoTO user) { this.session = session; this.user = user; formHelper = new FormHelper(); fields = new ArrayList<KornellFormFieldWrapper>(); passwordChangeFields.clear(); initialized = true; btnOK.setText("OK".toUpperCase()); btnCancel.setText("Cancelar".toUpperCase()); modalNewPassword = new KornellFormFieldWrapper(constants.newPassword(), formHelper.createPasswordTextBoxFormField(""), true); fields.add(modalNewPassword); passwordChangeFields.add(modalNewPassword); modalNewPasswordConfirm = new KornellFormFieldWrapper(constants.confirmPassword(), formHelper.createPasswordTextBoxFormField(""), true); fields.add(modalNewPasswordConfirm); passwordChangeFields.add(modalNewPasswordConfirm); passwordChangeFields.add(formHelper.getImageSeparator()); passwordChangeModal.setTitle(constants.changePasswordButton()); } private boolean validateFields() { if (!formHelper.isPasswordValid(modalNewPassword.getFieldPersistText())) { modalNewPassword.setError(constants.invalidPasswordTooShort()); } else if(modalNewPassword.getFieldPersistText().indexOf(':') >= 0){ modalNewPassword.setError(constants.invalidPasswordBadChar()); } if (!modalNewPassword.getFieldPersistText().equals(modalNewPasswordConfirm.getFieldPersistText())) { modalNewPasswordConfirm.setError(constants.passwordMismatch()); } return !checkErrors(); } @UiHandler("btnOK") void doOK(ClickEvent e) { formHelper.clearErrors(fields); if(validateFields()){ LoadingPopup.show(); session.user().changeTargetPassword(user.getPerson().getUUID(), modalNewPassword.getFieldPersistText(), new Callback<Void>() { @Override public void ok(Void to) { LoadingPopup.hide(); passwordChangeModal.hide(); KornellNotification.show(constants.confirmPasswordChange()); } }); } } @UiHandler("btnCancel") void doCancel(ClickEvent e) { passwordChangeModal.hide(); } private boolean checkErrors() { for (KornellFormFieldWrapper field : fields) if(!"".equals(field.getError())) return true; return false; } @Override public void setPresenter(Presenter presenter) { // TODO Auto-generated method stub } }