package org.tessell.widgets.cellview;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.text.shared.SafeHtmlRenderer;
/**
* Factory methods for cellview-related classes.
*
* Uses GWT cells (DOM coupled) by default, call {@link StubCellsProvider#install()}
* to use stub cells.
*/
public class Cells {
private static CellsProvider provider;
static {
if (GWT.isClient()) {
setProvider(new GwtCellsProvider());
}
}
public static void setProvider(CellsProvider provider) {
Cells.provider = provider;
}
public static IsHeader<Object> newCompositeHeader(IsHeader<?>... headers) {
return new CompositeHeader(headers);
}
public static <T, C> IsColumn<T, C> newColumn(ColumnValue<T, C> value, Cell<C> cell) {
return provider.newColumn(value, cell);
}
public static <T, C> ColumnValue<T, C> constantValue(final C value) {
return new ColumnValue<T, C>() {
public C get(T object) {
return value;
}
};
}
public static <T> ColumnValue<T, T> identityValue() {
return new ColumnValue<T, T>() {
public T get(T object) {
return object;
}
};
}
public static <C> IsHeader<C> newHeader(HeaderValue<C> value, Cell<C> cell) {
return provider.newHeader(value, cell);
}
public static IsTextCell newTextCell() {
return provider.newTextCell();
}
public static IsSafeHtmlCell newSafeHtmlCell() {
return provider.newSafeHtmlCell();
}
public static IsClickableSafeHtmlCell newClickableSafeHtmlCell() {
return provider.newClickableSafeHtmlCell();
}
public static IsClickableTextCell newClickableTextCell() {
return provider.newClickableTextCell();
}
public static IsCheckboxCell newCheckboxCell() {
return provider.newCheckboxCell();
}
public static IsTextHeader newTextHeader(String text) {
return provider.newTextHeader(text);
}
public static IsSafeHtmlHeader newSafeHtmlHeader(SafeHtml html) {
return provider.newSafeHtmlHeader(html);
}
public static <C> IsCompositeCell<C> newCompositeCell(List<HasCell<C, ?>> cells) {
return provider.newCompositeCell(cells);
}
public static <T> IsColumn<T, ?> newCompositeColumn(HasCell<T, ?> c1, HasCell<T, ?> c2) {
List<HasCell<T, ?>> cells = new ArrayList<HasCell<T, ?>>();
cells.add(c1);
cells.add(c2);
return newColumn(Cells.<T> identityValue(), newCompositeCell(cells));
}
public static <T> IsColumn<T, ?> newCompositeColumn(HasCell<T, ?> c1, HasCell<T, ?> c2, HasCell<T, ?> c3) {
List<HasCell<T, ?>> cells = new ArrayList<HasCell<T, ?>>();
cells.add(c1);
cells.add(c2);
cells.add(c3);
return newColumn(Cells.<T> identityValue(), newCompositeCell(cells));
}
public static <T> IsColumn<T, ?> newCompositeColumn(HasCell<T, ?> c1, HasCell<T, ?> c2, HasCell<T, ?> c3, HasCell<T, ?> c4) {
List<HasCell<T, ?>> cells = new ArrayList<HasCell<T, ?>>();
cells.add(c1);
cells.add(c2);
cells.add(c3);
cells.add(c4);
return newColumn(Cells.<T> identityValue(), newCompositeCell(cells));
}
public static <T> IsColumn<T, ?> newCompositeColumn(HasCell<T, ?> c1, HasCell<T, ?> c2, HasCell<T, ?> c3, HasCell<T, ?> c4, HasCell<T, ?> c5) {
List<HasCell<T, ?>> cells = new ArrayList<HasCell<T, ?>>();
cells.add(c1);
cells.add(c2);
cells.add(c3);
cells.add(c4);
cells.add(c5);
return newColumn(Cells.<T> identityValue(), newCompositeCell(cells));
}
public static IsHyperlinkCell newHyperlinkCell() {
return provider.newHyperlinkCell();
}
public static <C> IsHtmlCell<C> newHtmlCell(SafeHtmlRenderer<C> renderer) {
return provider.newHtmlCell(renderer);
}
}