001    package nl.cwi.sen1.gui.plugin.data;
002    
003    import java.util.ArrayList;
004    import java.util.List;
005    
006    import javax.swing.tree.DefaultTreeSelectionModel;
007    import javax.swing.tree.TreePath;
008    
009    public class ModuleSelectionModel extends DefaultTreeSelectionModel {
010        public void addSelectionPaths(TreePath[] p) {
011            if (p == null)
012                return;
013    
014            p = filtered(p);
015    
016            super.addSelectionPaths(p);
017        }
018    
019        public void setSelectionPaths(TreePath[] p) {
020            if (p == null || p.length == 0) {
021                super.setSelectionPaths(p);
022                return;
023            }
024    
025            p = filtered(p);
026    
027            if (p.length > 0)
028                super.setSelectionPaths(p);
029        }
030    
031        private TreePath[] filtered(TreePath[] p) {
032            List<TreePath> l = new ArrayList<TreePath>(p.length);
033    
034            for (int i = 0; i < p.length; i++)
035                if (isSelectable(p[i]))
036                    l.add(p[i]);
037    
038            TreePath[] result = new TreePath[l.size()];
039    
040            l.toArray(result);
041    
042            return result;
043        }
044    
045        private boolean isSelectable(TreePath p) {
046            return ((ModuleTreeNode) p.getLastPathComponent()).isLeaf();
047        }
048    }