package org.ovirt.engine.ui.webadmin.section.main.view; import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.webadmin.idhandler.WithElementId; import org.ovirt.engine.ui.webadmin.section.main.presenter.AbstractSubTabPresenter; import org.ovirt.engine.ui.webadmin.uicommon.model.SearchableDetailModelProvider; import org.ovirt.engine.ui.webadmin.view.AbstractView; import org.ovirt.engine.ui.webadmin.widget.table.OrderedMultiSelectionModel; import org.ovirt.engine.ui.webadmin.widget.table.SimpleActionTable; import com.google.gwt.core.client.GWT; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.cellview.client.LoadingStateChangeEvent.LoadingState; /** * Base class for table-based sub tab views. * * @param <I> * Main tab table row data type. * @param <T> * Sub tab table row data type. * @param <M> * Main model type. * @param <D> * Detail model type. */ 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 = new SimpleActionTable<T>(modelProvider, getTableHeaderlessResources(), getTableResources()); } protected Resources getTableHeaderlessResources() { return GWT.<Resources> create(SubTableHeaderlessResources.class); } protected Resources getTableResources() { return GWT.<Resources> create(SubTableResources.class); } @Override public void setMainTabSelectedItem(I selectedItem) { // No-op since table-based sub tab views don't handle main tab selection on their own } protected D getDetailModel() { return modelProvider.getModel(); } protected SimpleActionTable<T> getTable() { return table; } public interface SubTableHeaderlessResources extends CellTable.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/TabCellTableHeaderless.css" }) TableStyle cellTableStyle(); } public interface SubTableResources extends CellTable.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/TabCellTable.css" }) TableStyle cellTableStyle(); } @Override public OrderedMultiSelectionModel<?> getTableSelectionModel() { return getTable().getSelectionModel(); } @Override public void setLoadingState(LoadingState state) { getTable().setLoadingState(state); } }