package org.nocket.component.table.columns;
import java.util.UUID;
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.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;
// TODO: Auto-generated Javadoc
/**
* The Class CheckBoxColumn.
*
* @param <T> the generic type
*/
public abstract class CheckBoxColumn<T> extends DMDAbstractColumn<T> {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/** The uuid. */
protected final String uuid = UUID.randomUUID().toString().
replace("-", "");
/** The select checkbox js. */
protected final String selectCheckboxJS = "var val=$(this).attr('checked'); $('."
+ uuid
+ "').each(function() { if( 'checked' == val ) { $(this).attr('checked', val);} else {$(this).removeAttr('checked');} });";
/**
* Instantiates a new check box column.
*
* @param displayModel the display model
*/
public CheckBoxColumn(IModel<String> displayModel) {
super(displayModel);
}
/* (non-Javadoc)
* @see org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator#populateItem(org.apache.wicket.markup.repeater.Item, java.lang.String, org.apache.wicket.model.IModel)
*/
public void populateItem(Item<ICellPopulator<T>> cellItem,
String componentId, IModel<T> rowModel) {
cellItem.add(new CheckPanel(componentId, newCheckBoxModel(rowModel)));
}
/**
* New check box.
*
* @param id the id
* @param checkModel the check model
* @return the check box
*/
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, " ");
}
};
}
/**
* New check box model.
*
* @param rowModel the row model
* @return the i model
*/
protected abstract IModel<Boolean> newCheckBoxModel(IModel<T> rowModel);
/* (non-Javadoc)
* @see org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn#getHeader(java.lang.String)
*/
public Component getHeader(String componentId) {
CheckPanel panel = new CheckPanel(componentId, new
Model<Boolean>());
panel.get("check").add(getTableHeaderCheckboxBehavior());
return panel;
}
/**
* Gets the table header checkbox behavior.
*
* @return the table header checkbox behavior
*/
protected Behavior getTableHeaderCheckboxBehavior() {
return new Behavior() {
public void onComponentTag(Component component, ComponentTag
tag) {
tag.put("onclick", selectCheckboxJS);
}
};
}
/**
* The Class CheckPanel.
*/
private class CheckPanel extends Panel {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = 1L;
/**
* Instantiates a new check panel.
*
* @param id the id
* @param checkModel the check model
*/
public CheckPanel(String id, IModel<Boolean> checkModel) {
super(id);
add(newCheckBox("check", checkModel));
}
}
}