package net.databinder.components.tree.hib; import java.util.Collection; import javax.swing.tree.DefaultMutableTreeNode; import net.databinder.components.tree.data.DataTreeObject; import net.databinder.models.hib.HibernateListModel; import net.databinder.models.hib.HibernateObjectModel; import org.apache.wicket.markup.html.tree.ITreeState; /** * A {@link DataTree} in single selection mode (see {@link ITreeState}), with * methods to retrieve the selected node or its backing object. * * @author Thomas Kappler * * @param <T> * see {@link DataTree} */ public abstract class SingleSelectionDataTree<T extends DataTreeObject<T>> extends DataTree<T> { public SingleSelectionDataTree(String id, HibernateObjectModel rootModel) { super(id, rootModel); getTreeState().setAllowSelectMultiple(false); } public SingleSelectionDataTree(String id, HibernateListModel childrenModel) { super(id, childrenModel); getTreeState().setAllowSelectMultiple(false); } /** * Depends on the tree disallowing multiple selection, which we * configured in the constructor. * * @return the currently selected tree node if any, else null */ public DefaultMutableTreeNode getSelectedTreeNode() { @SuppressWarnings("unchecked") Collection<Object> selectedNodes = getTreeState().getSelectedNodes(); if (selectedNodes.isEmpty()) { return null; } DefaultMutableTreeNode selected = (DefaultMutableTreeNode) selectedNodes.iterator().next(); return selected; } /** * Return the currently selected user object (of type T). * * @return the one currently selected T if any, else null */ public T getSelectedUserObject() { DefaultMutableTreeNode selectedNode = getSelectedTreeNode(); if (selectedNode == null) { return null; } return getDataTreeNode(selectedNode); } }