package au.com.vaadinutils.crud.columnGenerators;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.Property.ValueChangeNotifier;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Table;
import com.vaadin.ui.Table.ColumnGenerator;
import com.vaadin.ui.VerticalLayout;
public class CheckboxColumnGenerator implements ColumnGenerator
{
private static final long serialVersionUID = 1L;
@Override
public Object generateCell(Table source, Object itemId, Object columnId)
{
// Need a layout to set center alignment on the checkbox.
// http://dev.vaadin.com/ticket/12027
final VerticalLayout layout = new VerticalLayout();
final CheckBox checkbox = new CheckBox();
layout.addComponent(checkbox);
layout.setComponentAlignment(checkbox, Alignment.MIDDLE_CENTER);
@SuppressWarnings("unchecked")
final Property<Boolean> property = source.getItem(itemId).getItemProperty(columnId);
checkbox.setValue(property.getValue());
checkbox.addValueChangeListener(new ValueChangeListener()
{
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event)
{
property.setValue((Boolean) event.getProperty().getValue());
}
});
((ValueChangeNotifier) property).addValueChangeListener(new ValueChangeListener()
{
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event)
{
checkbox.setValue((Boolean) event.getProperty().getValue());
}
});
return layout;
}
}