package org.ovirt.engine.ui.webadmin.section.login.presenter; import java.util.logging.Logger; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.ui.uicommonweb.models.LoginModel; import org.ovirt.engine.ui.webadmin.auth.SilentLoginData; import org.ovirt.engine.ui.webadmin.widget.HasEditorDriver; import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; import com.gwtplatform.mvp.client.PopupView; import com.gwtplatform.mvp.client.PresenterWidget; public class LoginPopupPresenterWidget extends PresenterWidget<LoginPopupPresenterWidget.ViewDef> { public interface ViewDef extends PopupView, HasEditorDriver<LoginModel> { void resetAndFocus(); void setErrorMessage(String text); void clearErrorMessage(); } private static final Logger logger = Logger.getLogger(LoginPopupPresenterWidget.class.getName()); private SilentLoginData silentLoginData; @Inject public LoginPopupPresenterWidget(EventBus eventBus, ViewDef view, LoginModel loginModel) { super(eventBus, view); getView().edit(loginModel); } public void setSilentLoginData(SilentLoginData silentLoginData) { this.silentLoginData = silentLoginData; } @Override protected void onBind() { super.onBind(); final LoginModel loginModel = getView().flush(); loginModel.getLoggedInEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { getView().clearErrorMessage(); } }); loginModel.getLoginFailedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { logger.warning("Login failed for user [" + loginModel.getUserName().getEntity() + "]"); getView().setErrorMessage(loginModel.getMessage()); // FIXME: Re-enable login properties (can't this be handled by the model itself when auth fails?) loginModel.getUserName().setIsChangable(true); loginModel.getPassword().setIsChangable(true); loginModel.getDomain().setIsChangable(true); loginModel.getLoginCommand().setIsExecutionAllowed(true); } }); } @Override protected void onReset() { super.onReset(); if (silentLoginData != null) { performSilentLogin(); } getView().resetAndFocus(); } void performSilentLogin() { getView().clearErrorMessage(); LoginModel loginModel = getView().flush(); loginModel.getUserName().setEntity(silentLoginData.getUserName()); loginModel.getPassword().setEntity(silentLoginData.getPassword()); loginModel.getDomain().setSelectedItem(silentLoginData.getDomain()); silentLoginData.setPassword(null); loginModel.Login(); } }