package de.tud.kom.socom.web.client.login; import com.google.gwt.user.client.ui.RootPanel; import de.tud.kom.socom.web.client.AppController; import de.tud.kom.socom.web.client.baseelements.AbstractPresenter; import de.tud.kom.socom.web.client.baseelements.ViewWithErrorsInterface; import de.tud.kom.socom.web.client.eventhandler.LoginEventHandler; import de.tud.kom.socom.web.client.events.LoginErrorNetworkUserNotFoundEvent; import de.tud.kom.socom.web.client.events.LoginErrorWrongUserIDPasswortEvent; import de.tud.kom.socom.web.client.events.LoginEvent; import de.tud.kom.socom.web.client.events.LogoutEvent; import de.tud.kom.socom.web.client.util.RequestInformation; public class LoginPresenter extends AbstractPresenter implements LoginEventHandler { // this could implement a LoginPresenterInterface that is used by View to callback to presenter /** Interface for views for this NavigationPresenter to implemented **/ public interface LoginViewInterface extends ViewWithErrorsInterface { public void setLoginVisible(); /** accepts null, then no name and prefix text is displayed */ public void setLogoutVisible(String username); } private static LoginPresenter instance; private LoginViewInterface view; private LoginPresenter(AppController appController) { super(appController); getAppController().getEventHandler().addHandler(LoginEvent.TYPE, this); init(); } public static LoginPresenter getInstance(AppController appController) { if (instance == null) instance = new LoginPresenter(appController); return instance; } @Override public void init() { this.view = new LoginView(this); } @Override public void go(RootPanel targetPanel) { setTargetPanel(targetPanel); RequestInformation rq = getAppController().getRequestInformation(); if (rq.isLoggedIn()) { view.setLogoutVisible(null); } else view.setLoginVisible(); targetPanel.add(view.asWidget()); } public void onLoginButtonClicked() { // XXX: potential code for Async lazy loading.. see Section ' Code Splitting' in https://developers.google.com/web-toolkit/articles/mvp-architecture-2 (JK) LoginWindowPresenter.getInstance(getAppController()).go(getTargetPanel()); } public void onLogoutButtonClicked() { getAppController().getLoginManager().logout(); } @Override public void onLoginSuccessEvent(LoginEvent event) { view.setLogoutVisible(null); } @Override public void onLoginErrorNetworkUserNotFound( LoginErrorNetworkUserNotFoundEvent loginErrorNetworkUserNotFound) { // ignore } @Override public void onLoginErrorWrongUserIDPasswortEvent( LoginErrorWrongUserIDPasswortEvent loginErrorWrongUserIDPasswortEvent) { // ignore } @Override public void onLogoutEvent(LogoutEvent event) { view.setLoginVisible(); } @Override public void onLoginNetworkSuccessEvent(LoginEvent event) { view.setLogoutVisible(null); } }