private static boolean hasMatchedDescendant(final TaskProgress taskProgress,
                                                final Map<TaskId, Set<TaskProgress>> childTasksMap) {

        boolean result = false;
        if (taskProgress != null) {
            if (taskProgress.isMatchedInFilter()) {
                // This task is a match so return true

//            GWT.log(ClientDateUtil.toISOString(System.currentTimeMillis()) + ": "
//                    + (root != null ? root.getId().getId() : "null")
//                    + " " + (root != null ? root.getTaskName() : "null") + " - "
//                    + (taskProgress != null ? taskProgress.getId().getId() : "null")
//                    + " " + (taskProgress != null ? taskProgress.getTaskName() : "null")
//                    + " returning:" + true + "FILTERED OUT");

                result = true;
            } else {
                // See if any of this task's children are a match
                final Set<TaskProgress> childTasks = childTasksMap.get(taskProgress.getId());
                if (childTasks != null && !childTasks.isEmpty()) {
                    for (final TaskProgress childTask : childTasks) {
                        if (hasMatchedDescendant(childTask, childTasksMap)) {
                            result = true;
                            break;
                        }
                    }
//                GWT.log(ClientDateUtil.toISOString(System.currentTimeMillis()) + ": "
//                        + (root != null ? root.getId().getId() : "null")
//                        + " " + (root != null ? root.getTaskName() : "null") + " - "
//                        + (taskProgress != null ? taskProgress.getId().getId() : "null")
//                        + " " + (taskProgress != null ? taskProgress.getTaskName() : "null")
//                        + " returning:" + result + "HAS_MATCHED_KIDS");
                }
            }
        }
        return result;
    }
Return true if taskProgress is a match in the filter or one of its descendants is
stroom-core-client/src/main/java/stroom/task/client/presenter/TaskProgressUtil.java