package org.ovirt.engine.ui.common.view;
import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
import org.ovirt.engine.ui.common.widget.table.ActionTable;
import org.ovirt.engine.ui.uicommonweb.models.HasEntity;
import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
/**
* Base class for form-based {@link AbstractSubTabPresenter} views.
*
* @param <T>
* Main tab table row data type.
* @param <M>
* Main model type.
* @param <D>
* Detail model type.
*/
public abstract class AbstractSubTabFormView<T, M extends ListWithDetailsModel, D extends HasEntity>
extends AbstractView implements AbstractSubTabPresenter.ViewDef<T> {
private final DetailModelProvider<M, D> modelProvider;
public AbstractSubTabFormView(DetailModelProvider<M, D> modelProvider) {
this.modelProvider = modelProvider;
}
protected D getDetailModel() {
return modelProvider.getModel();
}
@Override
public ActionTable<?> getTable() {
// Form-based sub tab views have no table widget associated
return null;
}
/**
* Call this to invoke the Element ID Framework's annotation processor.
* This will set IDs on all elements annotated with {@link WithElementId}.
* Only call after UIBinder.createAndBindUi() is called -- otherwise elements
* may still be null and thus cannot have an ID set.
* <p>
* A typical implementation is:
* <pre>ViewIdHandler.idHandler.generateAndSetIds(this);</pre>
*/
protected abstract void generateIds();
}