package org.tessell.widgets.cellview;
import static org.tessell.widgets.cellview.Cells.newSafeHtmlHeader;
import static org.tessell.widgets.cellview.Cells.newTextHeader;
import java.util.ArrayList;
import java.util.List;
import org.tessell.util.ObjectUtils;
import org.tessell.widgets.StubAbstractHasDataWidget;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.cellview.client.ColumnSortEvent;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.cellview.client.RowStyles;
public class StubAbstractCellTable<T> extends StubAbstractHasDataWidget<T> implements IsAbstractCellTable<T> {
private final List<IsColumn<T, ?>> columns = new ArrayList<IsColumn<T, ?>>();
private final List<IsHeader<?>> headers = new ArrayList<IsHeader<?>>();
private final List<IsHeader<?>> footers = new ArrayList<IsHeader<?>>();
private final ColumnSortList sortList = new ColumnSortList();
private RowStyles<T> rowStyles;
public StubAbstractCellTable() {
}
public StubAbstractCellTable(int pageSize) {
super(pageSize);
}
/** @return the stub headers for testing. */
public IsHeader<?> getHeader(int index) {
return headers.get(index);
}
/** @return the stub footers for testing. */
public IsHeader<?> getFooter(int index) {
return footers.get(index);
}
/** @return the stub column for testing. */
public StubColumn<T, ?> getColumn(int index) {
return (StubColumn<T, ?>) columns.get(index);
}
public String getValues(int displayedIndex) {
String values = "";
for (int i = 0; i < columns.size(); i++) {
values += ObjectUtils.toStr(getColumn(i).getValue(displayedIndex), "null");
if (i < columns.size() - 1) {
values += " || ";
}
}
return values;
}
@Override
public void addColumn(final IsColumn<T, ?> col) {
addColumn(col, (IsHeader<?>) null, (IsHeader<?>) null);
}
@Override
public void addColumn(final IsColumn<T, ?> col, final IsHeader<?> header) {
addColumn(col, header, null);
}
@Override
public void addColumn(final IsColumn<T, ?> col, final IsHeader<?> header, final IsHeader<?> footer) {
((StubColumn<T, ?>) col).setStubCellTable(this);
columns.add(col);
headers.add(header); // could be null
footers.add(footer); // could be null
}
@Override
public void redrawHeaders() {
redraw();
}
@Override
public void redrawFooters() {
redraw();
}
@Override
public void removeColumn(IsColumn<T, ?> col) {
removeColumn(columns.indexOf(col));
}
@Override
public void removeColumn(int index) {
columns.remove(index);
headers.remove(index);
footers.remove(index);
}
@Override
public int getColumnCount() {
return columns.size();
}
@Override
public IsColumn<T, ?> getIsColumn(int col) {
return columns.get(col);
}
@Override
public int getColumnIndex(IsColumn<T, ?> column) {
return columns.indexOf(column);
}
@Override
public ColumnSortList getColumnSortList() {
return sortList;
}
@Override
public HandlerRegistration addColumnSortHandler(ColumnSortEvent.Handler handler) {
return handlers.addHandler(ColumnSortEvent.getType(), handler);
}
@Override
public void addColumn(IsColumn<T, ?> col, String headerString) {
addColumn(col, newTextHeader(headerString));
}
@Override
public void addColumn(IsColumn<T, ?> col, SafeHtml headerHtml) {
}
@Override
public void addColumn(IsColumn<T, ?> col, String headerString, String footerString) {
addColumn(col, newTextHeader(headerString), newTextHeader(footerString));
}
@Override
public void addColumn(IsColumn<T, ?> col, SafeHtml headerHtml, SafeHtml footerHtml) {
addColumn(col, newSafeHtmlHeader(headerHtml), newSafeHtmlHeader(footerHtml));
}
@Override
public void setColumnWidth(IsColumn<T, ?> col, String width) {
}
@Override
public void setColumnWidth(IsColumn<T, ?> col, double width, Unit unit) {
}
@Override
public void setRowStyles(RowStyles<T> rowStyles) {
this.rowStyles = rowStyles;
}
public String getRowStyles(int i) {
return rowStyles.getStyleNames(getVisibleItem(i), i);
}
}