package org.ovirt.engine.ui.webadmin.section.main.view;
import org.ovirt.engine.ui.common.SubTableHeaderlessResources;
import org.ovirt.engine.ui.common.SubTableResources;
import org.ovirt.engine.ui.common.idhandler.WithElementId;
import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
import org.ovirt.engine.ui.common.view.AbstractView;
import org.ovirt.engine.ui.common.widget.table.SimpleActionTable;
import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.CellTable.Resources;
/**
* Base class for sub tab views that use {@link SimpleActionTable} directly.
*
* @param <I> Main tab table row data type.
* @param <T> Sub tab table row data type.
* @param <M> Main model type (extends ListWithDetailsModel)
* @param <D> Detail model type (extends SearchableListModel)
*/
public abstract class AbstractSubTabTableView<I, T, M extends ListWithDetailsModel, D extends SearchableListModel> extends AbstractView implements AbstractSubTabPresenter.ViewDef<I> {
private final SearchableDetailModelProvider<T, M, D> modelProvider;
@WithElementId
public final SimpleActionTable<T> table;
public AbstractSubTabTableView(SearchableDetailModelProvider<T, M, D> modelProvider) {
this.modelProvider = modelProvider;
this.table = createActionTable();
generateIds();
}
protected SimpleActionTable<T> createActionTable() {
return new SimpleActionTable<T>(modelProvider, getTableHeaderlessResources(), getTableResources(),
ClientGinjectorProvider.getEventBus(), ClientGinjectorProvider.getClientStorage()) {
{
if (useTableWidgetForContent()) {
enableHeaderContextMenu();
}
}
};
}
/**
* Returns {@code true} if table content is provided by the {@link #table} widget itself.
* Returns {@code false} if table content is provided by a custom widget, e.g. a tree.
*/
protected boolean useTableWidgetForContent() {
return true;
}
protected Resources getTableHeaderlessResources() {
return GWT.<Resources> create(SubTableHeaderlessResources.class);
}
protected Resources getTableResources() {
return GWT.<Resources> create(SubTableResources.class);
}
protected D getDetailModel() {
return modelProvider.getModel();
}
@Override
public SimpleActionTable<T> getTable() {
return table;
}
@Override
public void setMainTabSelectedItem(I selectedItem) {
// No-op since table-based sub tab views don't handle main tab selection on their own
}
protected abstract void generateIds();
}