package de.tud.kom.socom.web.client.navigation;
import com.google.gwt.user.client.ui.RootPanel;
import de.tud.kom.socom.web.client.AppController;
import de.tud.kom.socom.web.client.baseelements.Presenter;
import de.tud.kom.socom.web.client.baseelements.ViewInterface;
import de.tud.kom.socom.web.client.eventhandler.GameChangeEventHandler;
import de.tud.kom.socom.web.client.eventhandler.LoginEventHandler;
import de.tud.kom.socom.web.client.events.GameChangeEvent;
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;
/**
* Presenter logic for navigation bar of website (#navigation).
* Singleton.
* @author jkonert
*
*/
// cannot extend AbstractController as view is not Error aware
public class NavigationPresenter implements Presenter, LoginEventHandler , GameChangeEventHandler
{ // this could implement a NavigationPresenterInterface to be used by views
/** Interface for views for this NavigationPresenter to implemented **/
public interface NavigationViewInterface extends ViewInterface
{
void setGamesVisibility(boolean visibility);
void setProfileVisibility(boolean visibility);
void setAdminVisibility(boolean visibility);
}
private static NavigationPresenter instance;
private AppController appController;
private NavigationViewInterface view;
private NavigationPresenter(AppController appController)
{
this.appController = appController;
appController.getEventHandler().addHandler(LoginEvent.TYPE, this);
appController.getEventHandler().addHandler(GameChangeEvent.TYPE, this);
init();
}
public static NavigationPresenter getInstance(AppController appController)
{
if (instance == null) instance = new NavigationPresenter(appController);
return instance;
}
@Override
public void init()
{
this.view = new NavigationView(this);
}
@Override
public void go(RootPanel targetPanel) {
RequestInformation rq = appController.getRequestInformation();
if (!rq.isLoggedIn())
{
view.setProfileVisibility(false);
}
if (!rq.getUserIsAdmin())
{
view.setAdminVisibility(false);
}
targetPanel.add(view.asWidget());
}
@Override
public void onLoginSuccessEvent(LoginEvent event) {
view.setProfileVisibility(true);
if (appController.getRequestInformation().getUserIsAdmin()) view.setAdminVisibility(true);
}
@Override
public void onLogoutEvent(LogoutEvent event) {
view.setAdminVisibility(false);
view.setProfileVisibility(false);
}
@Override
public void onLoginNetworkSuccessEvent(LoginEvent event) {
view.setProfileVisibility(true);
if (appController.getRequestInformation().getUserIsAdmin()) view.setAdminVisibility(true);
}
@Override
public void onLoginErrorNetworkUserNotFound(
LoginErrorNetworkUserNotFoundEvent loginErrorNetworkUserNotFound) {
// ignore
}
@Override
public void onLoginErrorWrongUserIDPasswortEvent(
LoginErrorWrongUserIDPasswortEvent loginErrorWrongUserIDPasswortEvent) {
// ignore
}
@Override
public void gameChanged(String newGame) {
//show only if default game is active
boolean show = newGame.equals(AppController.GAME_PART_DEFAULT);
view.setGamesVisibility(show);
}
}