package com.akjava.gwt.lib.client.widget.cell;
import java.util.LinkedList;
import java.util.List;
import com.google.common.collect.Lists;
import com.google.gwt.cell.client.ActionCell;
import com.google.gwt.cell.client.ActionCell.Delegate;
import com.google.gwt.cell.client.Cell;
import com.google.gwt.cell.client.CompositeCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.cell.client.HasCell;
import com.google.gwt.user.cellview.client.Column;
public abstract class ActionCellGenerator<T> {
public Column<T,T> generateColumn(List<String> collection){
List<HasCell<T, ?>> cells = new LinkedList<HasCell<T, ?>>();
for(int i=0;i<collection.size();i++){
final int index=i;
cells.add(new ActionHasCell(collection.get(i), new Delegate<T>() {
@Override
public void execute(T object) {
executeAt(index,object);
}
}));
}
CompositeCell<T> cell = new CompositeCell<T>(cells);
return new Column<T, T>(cell) {
@Override
public T getValue(T object) {
return object;
}
};
}
public Column<T,T> generateColumn(final String firstLabel,final String secondLabel){
return generateColumn(Lists.newArrayList(firstLabel,secondLabel));
}
public abstract void executeAt(int index,T object);
private class ActionHasCell implements HasCell<T, T> {
private ActionCell<T> cell;
public ActionHasCell(String text, Delegate<T> delegate) {
cell = new ActionCell<T>(text, delegate);
}
@Override
public Cell<T> getCell() {
return cell;
}
@Override
public FieldUpdater<T, T> getFieldUpdater() {
return null;
}
@Override
public T getValue(T object) {
return object;
}
}
}