001    package net.databinder.components.tree.hib;
002    
003    import javax.swing.tree.DefaultMutableTreeNode;
004    
005    import org.apache.wicket.ajax.AjaxRequestTarget;
006    import org.apache.wicket.ajax.markup.html.AjaxLink;
007    
008    
009    /**
010     * Add a new child to the selected tree node.
011     * 
012     * @author Thomas Kappler
013     */
014    public class DataTreeNewChildLink extends AjaxLink {
015    
016            private DataTree<?> tree;
017            private DefaultMutableTreeNode parentNode;
018    
019            public DataTreeNewChildLink(String id, DataTree tree, DefaultMutableTreeNode node) {
020                    super(id);
021                    this.tree = tree;
022                    this.parentNode = node;
023            }
024            
025            protected DefaultMutableTreeNode getParentNode() {
026                    return parentNode;
027            }
028    
029            @Override
030            public boolean isEnabled() {
031                    return getParentNode() != null;
032            }
033    
034            @Override
035            public void onClick(AjaxRequestTarget target) {
036                    DefaultMutableTreeNode newNode = tree.addNewChildNode(getParentNode());
037                    tree.getTreeState().selectNode(newNode, true);
038                    tree.repaint(target);
039                    tree.updateDependentComponents(target, newNode);
040            }
041            
042            public static class SingleSelection extends DataTreeNewChildLink {
043                    private SingleSelectionDataTree<?> tree;
044    
045                    public SingleSelection(String id, SingleSelectionDataTree<?> tree) {
046                            super(id, tree, null);
047                            this.tree = tree;
048                    }
049                    @Override
050                    protected DefaultMutableTreeNode getParentNode() {
051                            return tree.getSelectedTreeNode();
052                    }
053            }
054    }