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 }