package org.ovirt.engine.ui.common.widget.table.column;
import java.util.Comparator;
import org.ovirt.engine.ui.common.widget.table.cell.Cell;
import org.ovirt.engine.ui.common.widget.tooltip.ProvidesTooltipForObject;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.cellview.client.Column;
/**
* Base class for Columns that work with Cells that use the Element ID framework.
* Supports sorting (setting options for server-side and client-side sorting).
* Supports element-id framework.
* Supports tooltips.
*
* @param <T>
* Table row data type.
* @param <C>
* Cell data type.
*/
public abstract class AbstractColumn<T, C> extends Column<T, C> implements ColumnWithElementId, SortableColumn<T, C>,
ProvidesTooltipForObject<T> {
// Name of the field to sort by, or null for undefined sort order
// (applies in case of server-side sorting)
private String sortBy;
// Comparator for sorting table row data objects, or null for undefined sorting
// (applies in case of client-side sorting)
private Comparator<? super T> comparator;
// Custom title for use with ColumnContextMenu (optional)
private String contextMenuTitle;
public AbstractColumn(Cell<C> cell) {
super(cell);
}
public Cell<C> getCell() {
return (Cell<C>) super.getCell();
}
@Override
public void onBrowserEvent(Context context, Element elem, T object, NativeEvent event) {
getCell().setTooltipFallback(getTooltip(object));
super.onBrowserEvent(context, elem, object, event);
}
@Override
public void configureElementId(String elementIdPrefix, String columnId) {
getCell().setElementIdPrefix(elementIdPrefix);
getCell().setColumnId(columnId);
}
@Override
public void makeSortable(String sortBy) {
assert sortBy != null : "sortBy cannot be null"; //$NON-NLS-1$
this.sortBy = sortBy;
this.comparator = null;
setSortable(true);
}
@Override
public void makeSortable(Comparator<? super T> comparator) {
assert comparator != null : "comparator cannot be null"; //$NON-NLS-1$
this.sortBy = null;
this.comparator = comparator;
setSortable(true);
}
@Override
public String getSortBy() {
return sortBy;
}
@Override
public Comparator<? super T> getComparator() {
return comparator;
}
/**
* Default implementation of tooltip -- return null for no tooltip.
*
* Override this to set a tooltip for the column.
*
* @return the tooltip to show
*/
@Override
public SafeHtml getTooltip(T object) {
return null;
}
public String getContextMenuTitle() {
return contextMenuTitle;
}
/**
* Sets a custom title for use with table header context menu.
*
* @see org.ovirt.engine.ui.common.widget.table.ColumnResizeCellTable#enableHeaderContextMenu
*/
public void setContextMenuTitle(String contextMenuTitle) {
this.contextMenuTitle = contextMenuTitle;
}
}