package org.sakaiproject.delegatedaccess.tool.pages; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.tree.TreeNode; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.extensions.markup.html.form.DateTextField; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.sakaiproject.delegatedaccess.model.NodeModel; /** * This is the shopping period date field for shopping period admins * * @author Bryan Holladay (holladay@longsight.com) * */ public class EditablePanelDate extends Panel{ SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy"); public EditablePanelDate(String id, IModel inputModel, final NodeModel nodeModel, final TreeNode node, final boolean startDate) { super(id); final DateTextField date = new DateTextField("dateTextField", inputModel, format.toPattern()){ @Override public boolean isVisible() { return nodeModel.isDirectAccess() && nodeModel.getNodeShoppingPeriodAdmin(); } }; date.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { DateTextField newDate = date; if(startDate){ nodeModel.setShoppingPeriodStartDate(date.getModelObject()); }else{ nodeModel.setShoppingPeriodEndDate(date.getModelObject()); } //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); } }); add(date); } }