package org.tessell.widgets.cellview;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.user.cellview.client.Column;
public class StubColumn<T, C> extends Column<T, C> implements IsColumn<T, C>, StubCell.StubCellValue<C> {
private final ColumnValue<T, C> columnValue;
private StubAbstractCellTable<T> stubCellTable;
public StubColumn(final ColumnValue<T, C> columnValue, final Cell<C> cell) {
super(cell);
this.columnValue = columnValue;
((StubCell<C>) cell).setStubCellValue(this); // tell the stub about us
}
public void setStubCellTable(StubAbstractCellTable<T> stubCellTable) {
this.stubCellTable = stubCellTable;
}
@Override
public Column<T, C> asColumn() {
// lots of GWT APIs use column, so cheat and let us be considered as a real Column
return this;
}
@Override
public C getValue(int displayedIndex) {
T item = stubCellTable.getVisibleItem(displayedIndex);
return columnValue.get(item);
}
@Override
public void setValue(int displayedIndex, C value) {
T item = stubCellTable.getVisibleItem(displayedIndex);
columnValue.set(item, value);
}
@Override
public FieldUpdater<T, C> getFieldUpdater() {
return new FieldUpdater<T, C>() {
public void update(int index, T object, C value) {
columnValue.set(object, value);
}
};
}
@Override
public C getValue(T object) {
return columnValue.get(object);
}
@Override
public IsColumn<T, C> sorted() {
setSortable(true);
return this;
}
}