package org.ovirt.engine.ui.common.widget.table; import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.idhandler.ProvidesElementId; import org.ovirt.engine.ui.common.widget.table.column.ColumnWithElementId; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.Header; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.ProvidesKey; /** * A {@link CellTable} which adds support for configuring column DOM element IDs through {@link ColumnWithElementId} * interface. * * @param <T> * Table row data type. */ public class ElementIdCellTable<T> extends ColumnResizeCellTable<T> implements HasElementId, ProvidesElementId { private String elementId = DOM.createUniqueId(); public ElementIdCellTable() { super(); } public ElementIdCellTable(int pageSize, ProvidesKey<T> keyProvider) { super(pageSize, keyProvider); } public ElementIdCellTable(int pageSize, CellTable.Resources resources, ProvidesKey<T> keyProvider, Widget loadingIndicator) { super(pageSize, resources, keyProvider, loadingIndicator); } public ElementIdCellTable(int pageSize, CellTable.Resources resources, ProvidesKey<T> keyProvider) { super(pageSize, resources, keyProvider); } public ElementIdCellTable(int pageSize, CellTable.Resources resources) { super(pageSize, resources); } public ElementIdCellTable(int pageSize) { super(pageSize); } public ElementIdCellTable(ProvidesKey<T> keyProvider) { super(keyProvider); } @Override public void insertColumn(int beforeIndex, Column<T, ?> col, Header<?> header, Header<?> footer) { super.insertColumn(beforeIndex, col, header, footer); configureElementId(col); } /** * Sets up the element ID for the given column, if the column implements {@link ColumnWithElementId}. */ protected void configureElementId(Column<T, ?> column) { configureElementId(column, null); } /** * Sets up the element ID for the given column, if the column implements {@link ColumnWithElementId}. * <p> * This method overrides the default column ID that will be part of the resulting DOM element ID. */ void configureElementId(Column<T, ?> column, String columnId) { if (column instanceof ColumnWithElementId) { ((ColumnWithElementId) column).configureElementId(elementId, columnId); } } @Override public void setElementId(String elementId) { this.elementId = elementId; } @Override public String getElementId() { return elementId; } }