package org.dcache.webadmin.view.util;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import java.util.UUID;
/**
* From the "Apache Wicket Cookbook".
*/
@SuppressWarnings("serial")
public abstract class CheckBoxColumn<T, S> extends AbstractColumn<T, S>
{
private final String uuid = UUID.randomUUID().toString().replace("-", "");
public CheckBoxColumn(IModel<String> displayModel)
{
super(displayModel);
}
public void populateItem(Item<ICellPopulator<T>> cellItem,
String componentId, IModel<T> rowModel)
{
cellItem.add(new CheckPanel(componentId,
newCheckBoxModel(rowModel)));
}
protected CheckBox newCheckBox(String id, IModel<Boolean> checkModel)
{
return new CheckBox("check", checkModel)
{
@Override
protected void onComponentTag(ComponentTag tag)
{
super.onComponentTag(tag);
tag.append("class", uuid, " ");
}
};
}
protected abstract IModel<Boolean> newCheckBoxModel(IModel<T> rowModel);
public Component getHeader(String componentId)
{
CheckPanel panel = new CheckPanel(componentId, new Model<Boolean>());
panel.get("check").add(new Behavior() {
@Override
public void onComponentTag(Component component, ComponentTag tag)
{
tag.put("onclick", "$('." + uuid + "').prop('checked', $(this).is(':checked'));");
}
});
return panel;
}
private class CheckPanel extends Panel
{
public CheckPanel(String id, IModel<Boolean> checkModel)
{
super(id);
add(newCheckBox("check", checkModel));
}
}
}