package org.ovirt.engine.ui.webadmin.section.main.presenter;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.webadmin.uicommon.model.MainModelProvider;
import org.ovirt.engine.ui.webadmin.uicommon.model.MainModelSelectionChangeEvent;
import com.google.gwt.event.shared.EventBus;
import com.gwtplatform.mvp.client.Presenter;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.ProxyEvent;
import com.gwtplatform.mvp.client.proxy.PlaceManager;
import com.gwtplatform.mvp.client.proxy.PlaceRequest;
import com.gwtplatform.mvp.client.proxy.Proxy;
import com.gwtplatform.mvp.client.proxy.RevealContentEvent;
/**
* Base class for main tab presenters.
*
* @param <T>
* Table row data type.
* @param <M>
* Main model type.
* @param <V>
* View type.
* @param <P>
* Proxy type.
*/
public abstract class AbstractMainTabPresenter<T, M extends SearchableListModel, V extends View, P extends Proxy<?>> extends Presenter<V, P> {
protected final PlaceManager placeManager;
protected final MainModelProvider<T, M> modelProvider;
public AbstractMainTabPresenter(EventBus eventBus, V view, P proxy,
PlaceManager placeManager, MainModelProvider<T, M> modelProvider) {
super(eventBus, view, proxy);
this.placeManager = placeManager;
this.modelProvider = modelProvider;
}
@Override
protected void revealInParent() {
RevealContentEvent.fire(this, MainTabPanelPresenter.TYPE_SetTabContent, this);
}
@Override
protected void onReveal() {
super.onReveal();
// Notify model provider that the tab has been revealed
modelProvider.onMainTabSelected();
}
@ProxyEvent
public void onMainModelSelectionChange(MainModelSelectionChangeEvent event) {
if (event.getMainModel() == modelProvider.getModel()) {
// Reveal main tab place when the corresponding model is selected
placeManager.revealPlace(getMainTabRequest());
}
}
/**
* Returns the place request associated with this main tab presenter.
*/
protected abstract PlaceRequest getMainTabRequest();
/**
* Controls the sub tab panel visibility.
*/
protected void setSubTabPanelVisible(boolean subTabPanelVisible) {
UpdateMainContentLayoutEvent.fire(this, subTabPanelVisible);
}
}