001 package net.databinder.components.tree.hib;
002
003 import java.util.Collection;
004
005 import javax.swing.tree.DefaultMutableTreeNode;
006
007 import net.databinder.components.tree.data.DataTreeObject;
008 import net.databinder.models.hib.HibernateListModel;
009 import net.databinder.models.hib.HibernateObjectModel;
010
011 import org.apache.wicket.markup.html.tree.ITreeState;
012
013
014
015 /**
016 * A {@link DataTree} in single selection mode (see {@link ITreeState}), with
017 * methods to retrieve the selected node or its backing object.
018 *
019 * @author Thomas Kappler
020 *
021 * @param <T>
022 * see {@link DataTree}
023 */
024 public abstract class SingleSelectionDataTree<T extends DataTreeObject<T>> extends DataTree<T> {
025
026 public SingleSelectionDataTree(String id, HibernateObjectModel rootModel) {
027 super(id, rootModel);
028 getTreeState().setAllowSelectMultiple(false);
029 }
030
031 public SingleSelectionDataTree(String id, HibernateListModel childrenModel) {
032 super(id, childrenModel);
033 getTreeState().setAllowSelectMultiple(false);
034 }
035
036 /**
037 * Depends on the tree disallowing multiple selection, which we
038 * configured in the constructor.
039 *
040 * @return the currently selected tree node if any, else null
041 */
042 public DefaultMutableTreeNode getSelectedTreeNode() {
043 @SuppressWarnings("unchecked")
044 Collection<DefaultMutableTreeNode> selectedNodes =
045 getTreeState().getSelectedNodes();
046 if (selectedNodes.isEmpty()) {
047 return null;
048 }
049 DefaultMutableTreeNode selected = (DefaultMutableTreeNode)
050 selectedNodes.iterator().next();
051 return selected;
052 }
053
054 /**
055 * Return the currently selected user object (of type T).
056 *
057 * @return the one currently selected T if any, else null
058 */
059 public T getSelectedUserObject() {
060 DefaultMutableTreeNode selectedNode = getSelectedTreeNode();
061 if (selectedNode == null) {
062 return null;
063 }
064 return getDataTreeNode(selectedNode);
065 }
066 }