1 19 20 package org.netbeans.modules.tasklist.core; 21 22 import java.util.Iterator ; 23 import java.util.List ; 24 import java.util.logging.Level ; 25 import java.util.logging.Logger ; 26 import org.netbeans.modules.tasklist.core.filter.Filter; 27 import org.openide.nodes.FilterNode; 28 import org.openide.nodes.Node; 29 import org.openide.nodes.NodeMemberEvent; 30 31 36 final class FilteredTaskChildren extends FilterNode.Children { 37 private static final Logger LOGGER = TLUtils.getLogger( 38 FilteredTaskChildren.class); 39 40 static { 41 LOGGER.setLevel(Level.OFF); 42 } 43 44 private Filter filter; 45 private TaskListView view; 46 47 public FilteredTaskChildren(TaskListView view, Node n, Filter filter) { 48 super(n); 49 this.filter = filter; 50 this.view = view; 51 } 52 53 @Override 54 protected Node[] createNodes(Node key) { 55 if (!(key instanceof Node)) 56 return new Node[0]; 57 58 Node n = (Node) key; 59 Task task = TaskNode.getTask(n); 60 if (filter.accept(task)) { 61 org.openide.nodes.Children children; 62 if (n.getChildren() == org.openide.nodes.Children.LEAF) { 63 children = org.openide.nodes.Children.LEAF; 64 } else { 65 children = new FilteredTaskChildren(view, n, filter); 66 } 67 return new Node[] { new FilterTaskNode(n, children, false) }; 68 } 69 70 92 93 if (hasMatch(task)) { 96 org.openide.nodes.Children children; 99 if (n.getChildren() == org.openide.nodes.Children.LEAF) { 100 children = org.openide.nodes.Children.LEAF; 101 } else { 102 children = new FilteredTaskChildren(view, n, filter); 103 } 104 return new Node[] { 105 new FilterTaskNode(n, children, true) }; 106 } 107 108 return new Node[0]; 109 } 110 111 115 private boolean hasMatch(Task n) { 116 if (filter.accept(n)) 117 return true; 118 119 Iterator it = n.subtasksIterator(); 120 while (it.hasNext()) { 121 if (hasMatch((Task) it.next())) 122 return true; 123 } 124 return false; 125 } 126 127 public void filterChildrenAdded(NodeMemberEvent ev) { 128 super.filterChildrenAdded(ev); 129 if (view != null) { 130 view.updateFilterCount(); 131 } 132 } 133 134 public void filterChildrenRemoved(NodeMemberEvent ev) { 135 super.filterChildrenRemoved(ev); 136 if (view != null) { 137 view.updateFilterCount(); 138 } 139 } 140 } 141 | Popular Tags |