package de.tud.kom.socom.web.client.login;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
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.baseelements.viewerrors.ErrorServerUnknownErrorView;
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;
public class LoginWindowPresenter extends AbstractPresenter implements LoginEventHandler
{ // this could implement a LoginWindowInterface that is used by View to
// callback to presenter
private LoginWindowViewInterface view;
/** Interface for views for this Presenter to implemented **/
public interface LoginWindowViewInterface extends ViewWithErrorsInterface
{
void setLoginFocus();
void setVisibility(boolean visibility);
void setSNLoginButtonEnabled(boolean enable);
String getUserNameText();
String getPasswordText();
void clear();
}
private static LoginWindowPresenter instance;
private LoginWindowPresenter(AppController appController)
{
super(appController);
appController.getEventHandler().addHandler(LoginEvent.TYPE, this);
init();
}
public static LoginWindowPresenter getInstance(AppController appController)
{
if (instance == null)
instance = new LoginWindowPresenter(appController);
return instance;
}
@Override
public void init()
{
this.view = new LoginWindowView(this);
setView(view);
}
@Override
public void go(RootPanel targetPanel)
{
setTargetPanel(targetPanel);
// Widget viewWidget = view.asWidget();
// if (!viewWidget.isAttached())
// {
// targetPanel.add(viewWidget);
// }
view.setVisibility(true);
view.setLoginFocus();
String currentGame = getAppController().getRequestInformation().getCurrentGame();
String defaultGame = AppController.GAME_PART_DEFAULT;
this.view.setSNLoginButtonEnabled(!currentGame.equals(defaultGame));
}
@Override
public void onLoginSuccessEvent(LoginEvent event) {
view.setVisibility(false);
view.clear();
if (view.asWidget().isAttached())
view.asWidget().removeFromParent();
}
@Override
public void onLogoutEvent(LogoutEvent event) {
view.setVisibility(false);
view.clear();
if (view.asWidget().isAttached())
view.asWidget().removeFromParent();
}
@Override
public void onLoginErrorNetworkUserNotFound(
LoginErrorNetworkUserNotFoundEvent loginErrorNetworkUserNotFound) {
// TODO RH implement (JK)
// TODO JK add errormessages and methods to view (JK)
}
@Override
public void onLoginErrorWrongUserIDPasswortEvent(
LoginErrorWrongUserIDPasswortEvent loginErrorWrongUserIDPasswortEvent) {
// TODO RH implement (JK)
// TODO JK add errormessages and methods to view (JK)
}
public void onLoginButtonClicked() {
final String username = view.getUserNameText();
final String pw = view.getPasswordText();
if (username.length() == 0 || pw.length() <= 3)
{
Window.alert("Kein Benutzername oder zu kurzes Passwort.");
return;
}
getAppController().getLoginManager().login(username, pw);
}
public void onPasswordForgottenClicked() {
Window.alert("Leider noch nicht verfügbar."); // better completely make the link invisible...
}
public void onFacebookButtonClicked() {
view.setVisibility(false);
getAppController().getRPCFactory().getSocialNetworkService()
.getFacebookLoginUrl(getAppController().getRequestInformation().getCurrentGame(), new AsyncCallback<String>() {
@Override
public void onSuccess(String url) {
LoginOAuthWindowPresenter.getInstance(getAppController()).setOAuthLoginURL(url);
LoginOAuthWindowPresenter.getInstance(getAppController()).go(getTargetPanel());
LoginOAuthWindowPresenter.getInstance(getAppController()).show();
}
@Override
public void onFailure(Throwable caught) {
view.showError(new ErrorServerUnknownErrorView());
}
});
// LoginOAuthWindowPresenter.getInstance(getAppController())
// .setOAuthLoginURL(getAppController().getLoginManager().getNetworkLoginManager()
// .getOAuthLoginUrl(SocialMediaApplications.facebook));
// LoginOAuthWindowPresenter.getInstance(getAppController()).go(getTargetPanel());
// LoginOAuthWindowPresenter.getInstance(getAppController()).show();
}
public void onCloseButtonClicked() {
view.setVisibility(false);
}
@Override
public void onLoginNetworkSuccessEvent(LoginEvent event) {
// ignore
}
}