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 }