package klik.client.mvp.home;
import java.util.List;
import klik.client.MyCallback;
import klik.client.NameTokens;
import klik.client.dispatch.CachingDispatchAsync;
import klik.client.mvp.LayoutPresenter;
import klik.client.mvp.tabbar.TabBarPresenter;
import klik.client.mvp.unitbuttonbar.UnitsButtonBarPresenter;
import klik.client.mvp.unitelementlist.UnitElementListPresenter;
import klik.shared.event.SetupEvent;
import klik.shared.model.UnitStatusDto;
import klik.shared.rpc.RetrieveGreetingAction;
import klik.shared.rpc.RetrieveGreetingResult;
import com.google.gwt.event.shared.GwtEvent.Type;
import com.google.gwt.inject.client.AsyncProvider;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.HasUiHandlers;
import com.gwtplatform.mvp.client.Presenter;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.NameToken;
import com.gwtplatform.mvp.client.annotations.ProxyStandard;
import com.gwtplatform.mvp.client.proxy.ProxyPlace;
import com.gwtplatform.mvp.client.proxy.RevealContentEvent;
import com.gwtplatform.mvp.client.proxy.RevealContentHandler;
public class HomePresenter extends Presenter<HomePresenter.MyView, HomePresenter.MyProxy>
implements HomeUiHandlers {
public static final Type<RevealContentHandler<?>> TYPE_Content = new Type<RevealContentHandler<?>>();
public static final Type<RevealContentHandler<?>> TYPE_ButtonBar = new Type<RevealContentHandler<?>>();
public interface MyView extends View, HasUiHandlers<HomeUiHandlers> {
void setHeroUnitVisible(boolean visible);
void setHeroUnitMessage(String message);
void setSetupBtnVisible(boolean visible);
void setContentVisible(boolean visible);
}
@ProxyStandard
@NameToken(NameTokens.home)
public interface MyProxy extends ProxyPlace<HomePresenter> {
}
private final CachingDispatchAsync dispatcher;
private final AsyncProvider<HomeUnitsProvider> homeUnitsProvider;
@Inject
public HomePresenter(EventBus eventBus, MyView view, MyProxy proxy,
CachingDispatchAsync dispatcher, AsyncProvider<HomeUnitsProvider> homeUnitsProvider) {
super(eventBus, view, proxy);
this.dispatcher = dispatcher;
this.homeUnitsProvider = homeUnitsProvider;
getView().setUiHandlers(this);
}
@Override
protected void onBind() {
super.onBind();
dispatcher.execute(new RetrieveGreetingAction(), new MyCallback<RetrieveGreetingResult>(this) {
@Override
public void onSuccesss(RetrieveGreetingResult result) {
handleGreetingResult(result);
}
});
}
void handleGreetingResult(final RetrieveGreetingResult result) {
getView().setSetupBtnVisible(!result.isSetUp()); // hide setup button
if (result.getMessage() != null) { // show message if available
getView().setHeroUnitMessage(result.getMessage());
} else { // otherwise hide herounit
getView().setHeroUnitVisible(false);
}
if (result.getUnitList().size() > 0) {
homeUnitsProvider.get(new MyCallback<HomeUnitsProvider>(this) {
@Override
public void onSuccesss(HomeUnitsProvider result2) {
handleProvider(result.getUnitList(), result2);
}
});
}
}
void handleProvider(List<UnitStatusDto> unitList, HomeUnitsProvider result) {
addToSlot(TYPE_ButtonBar, (TabBarPresenter) result.get(HomeUnitsProvider.ID_TabBar).get());
addToSlot(TYPE_ButtonBar, (UnitsButtonBarPresenter) result.get(HomeUnitsProvider.ID_ButtonBar).get());
UnitElementListPresenter listPresenter = (UnitElementListPresenter) result.get(HomeUnitsProvider.ID_UnitList).get();
listPresenter.refresh(unitList);
setInSlot(HomePresenter.TYPE_Content, listPresenter);
getView().setContentVisible(true);
}
@Override
protected void revealInParent() {
RevealContentEvent.fire(this, LayoutPresenter.TYPE_SetContent, this);
}
@Override
public void onSetupClick() {
fireEvent(new SetupEvent(true));
}
}