/*******************************************************************************
* Copyright 2011 Antti Havanko
*
* This file is part of Motiver.fi.
* Motiver.fi is licensed under one open source license and one commercial license.
*
* Commercial license: This is the appropriate option if you want to use Motiver.fi in
* commercial purposes. Contact license@motiver.fi for licensing options.
*
* Open source license: This is the appropriate option if you are creating an open source
* application with a license compatible with the GNU GPL license v3. Although the GPLv3 has
* many terms, the most important is that you must provide the source code of your application
* to your users so they can be free to modify your application for their own needs.
******************************************************************************/
package com.delect.motiver.client.presenter;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.delect.motiver.client.AppController;
import com.delect.motiver.client.event.ConnectionErrorEvent;
import com.delect.motiver.client.event.InfoMessageEvent;
import com.delect.motiver.client.event.TabEvent;
import com.delect.motiver.client.event.handler.ConnectionErrorEventHandler;
import com.delect.motiver.client.event.handler.TabEventHandler;
import com.delect.motiver.client.presenter.InfoMessagePresenter.MessageColor;
import com.delect.motiver.client.presenter.LoginPresenter.LoginDisplay;
import com.delect.motiver.client.presenter.PreviewVideoPresenter.PreviewVideoDisplay;
import com.delect.motiver.client.service.MyServiceAsync;
import com.delect.motiver.client.view.Display;
import com.delect.motiver.client.view.LoginView;
import com.delect.motiver.client.view.PreviewVideoView;
import com.delect.motiver.shared.Constants;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
/**
* Index page when user is not logged in
*/
public class IndexPresenter extends Presenter {
/**
* Abstract class for view to extend
*/
public abstract static class IndexDisplay extends Display {
/**
* Returns container for footer.
* @return LayoutContainer
*/
public abstract LayoutContainer getFooterContainer();
/**
* Returns container for header.
* @return LayoutContainer
*/
public abstract LayoutContainer getHeaderContainer();
/**
* Returns container for info messages.
* @return LayoutContainer
*/
public abstract LayoutContainer getInfoContainer();
/**
* Returns container for preview video.
* @return LayoutContainer
*/
public abstract LayoutContainer getPreviewVideoContainer();
/**
* Returns container for sign in panel.
* @return LayoutContainer
*/
public abstract LayoutContainer getSignInContainer();
/**
* Returns container for messages.
* @return LayoutContainer
*/
public abstract LayoutContainer getMessageContainer();
/**
* Shows/hides progress box.
* @param show boolean
*/
public abstract void showProgressBox(boolean show);
}
private IndexDisplay display;
private LoginPresenter loginPresenter;
private PreviewVideoPresenter previewVideoPresenter;
/**
* Constructor for IndexPresenter.
* @param rpcService MyServiceAsync
* @param eventBus SimpleEventBus
* @param display IndexDisplay
*/
public IndexPresenter(MyServiceAsync rpcService, SimpleEventBus eventBus, IndexDisplay display) {
super(rpcService, eventBus);
this.display = display;
loginPresenter = new LoginPresenter(rpcService, eventBus, (LoginDisplay)GWT.create(LoginView.class));
previewVideoPresenter = new PreviewVideoPresenter(rpcService, eventBus, (PreviewVideoDisplay)GWT.create(PreviewVideoView.class));
}
@Override
public Display getView() {
return display;
}
@Override
public void onBind() {
//tab change handler
addEventHandler(TabEvent.TYPE, new TabEventHandler() {
@Override
public void onTabChanged(TabEvent event) {
switch(event.getIndex()) {
case 1:
// Window.Location.assign(Constants.URL_BLOG);
break;
default:
Window.Location.assign(Constants.URL_APP);
break;
}
}
});
//EVENT: connection error
addEventHandler(ConnectionErrorEvent.TYPE, new ConnectionErrorEventHandler() {
@Override
public void onError(ConnectionErrorEvent event) {
display.showProgressBox(false);
//show error message
eventBus.fireEvent(new InfoMessageEvent(MessageColor.COLOR_RED, AppController.Lang.NetworkError()));
}
});
}
@Override
public void onRun() {
loginPresenter.run(display.getSignInContainer());
previewVideoPresenter.run(display.getPreviewVideoContainer());
//remove token
History.newItem("", false);
}
@Override
public void onStop() {
display.showProgressBox(false);
if(previewVideoPresenter != null) {
previewVideoPresenter.stop();
}
if(loginPresenter != null) {
loginPresenter.stop();
}
}
}