package org.appfuse.webapp.client.application.utils.tables;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.ClickableTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.text.shared.SafeHtmlRenderer;
import com.google.gwt.user.cellview.client.Column;
public abstract class CustomColumn<T, V> extends Column<T, V> {
private static final SafeHtmlRenderer<Object> SAFE_HTML_RENDERER = new SafeHtmlRenderer<Object>() {
@Override
public SafeHtml render(Object object) {
return (object == null) ? SafeHtmlUtils.EMPTY_SAFE_HTML : SafeHtmlUtils.fromString(object.toString());
}
@Override
public void render(Object object, SafeHtmlBuilder appendable) {
appendable.append(render(object));
}
};
private SafeHtmlRenderer<V> renderer = (SafeHtmlRenderer<V>) SAFE_HTML_RENDERER;
private FieldUpdater<T, V> fieldUpdater;
private String propertyName;
private boolean sortable = false;
public CustomColumn(String propertyName) {
this(propertyName, false, null);
}
/**
* @param headerText
* @param sortable
*/
public CustomColumn(String propertyName, boolean sortable) {
this(propertyName, sortable, null);
}
/**
* @param anchorRenderer
* @param headerText
* @param valueUpdater
* @param sortable
*/
public CustomColumn(String propertyName, boolean sortable, FieldUpdater<T, V> fieldUpdater) {
super((Cell) new ClickableTextCell());
this.fieldUpdater = fieldUpdater;
this.sortable = sortable;
this.propertyName = propertyName;
setSortable(isSortable());
if (fieldUpdater != null) {
setFieldUpdater(fieldUpdater);
}
}
public abstract V getValue(T row);
public void render(Context context, T object, SafeHtmlBuilder sb) {
renderer.render(getValue(object), sb);
}
public FieldUpdater<T, V> getFieldUpdater() {
return fieldUpdater;
}
public String getPropertyName() {
return propertyName;
}
public boolean isSortable() {
return sortable;
}
}