package org.sakaiproject.delegatedaccess.tool.pages; import javax.swing.tree.TreeNode; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.util.string.Strings; import org.sakaiproject.delegatedaccess.model.NodeModel; import org.sakaiproject.delegatedaccess.util.DelegatedAccessConstants; /** * This is the panel that holds the checkbox for the TreeTable's access column * * @author Bryan Holladay (holladay@longsight.com) * */ public class EditablePanelCheckbox extends Panel { /** * Panel constructor. * * @param id * Markup id * * @param inputModel * Model of the text field */ private NodeModel nodeModel; private TreeNode node; /** * Creates a simple checkbox panel for TreeTable's access column. * @param id * @param inputModel * @param nodeModel * @param node */ public EditablePanelCheckbox(String id, IModel inputModel, final NodeModel nodeModel, final TreeNode node, final int type) { super(id); this.nodeModel = nodeModel; this.node = node; final CheckBox field = new CheckBox("checkboxField", inputModel){ @Override public boolean isVisible() { if(DelegatedAccessConstants.TYPE_SHOPPING_PERIOD_ADMIN == type){ return !nodeModel.getInheritedShoppingPeriodAdmin(); }else if(DelegatedAccessConstants.TYPE_ACCESS_SHOPPING_PERIOD_USER == type){ return nodeModel.getNodeShoppingPeriodAdmin(); }else{ return true; } } }; add(field); field.add(new AjaxFormComponentUpdatingBehavior("onClick") { protected void onUpdate(AjaxRequestTarget target) { //only update if its not an advanced option: if(DelegatedAccessConstants.TYPE_ADVANCED_OPT != type){ //toggle selection to trigger a reload on the current node ((BaseTreePage)target.getPage()).getTree().getTreeState().selectNode(node, !((BaseTreePage)target.getPage()).getTree().getTreeState().isNodeSelected(node)); //In order for the models to refresh, you have to call "expand" or "collapse" then "updateTree", //since I don't want to expand or collapse, I just call whichever one the node is already //Refreshing the tree will update all the models and information (like role) will be generated onClick if(((BaseTreePage)target.getPage()).getTree().getTreeState().isNodeExpanded(node)){ ((BaseTreePage)target.getPage()).getTree().getTreeState().expandNode(node); }else{ ((BaseTreePage)target.getPage()).getTree().getTreeState().collapseNode(node); } ((BaseTreePage)target.getPage()).getTree().updateTree(target); } } }); } }