/** Update task set dependencies */ private void updateTaskSetDependencies() { Collection sets = mTask2TaskSet.values(); for (Iterator it = sets.iterator(); it.hasNext(); ) { TaskSet set = (TaskSet) it.next(); if (!set.hasChecked) { set.hasChecked = true; set.getChildList().clear(); set.getParentList().clear(); for (Task task : set.getTaskList()) { for (Iterator tIt = task.getParentList().iterator(); tIt.hasNext(); ) { Task parent = (Task) tIt.next(); TaskSet parentSet = (TaskSet) mTask2TaskSet.get(parent); if (!set.getParentList().contains(parentSet) && set != parentSet) { set.getParentList().add(parentSet); } } for (Iterator tIt = task.getChildList().iterator(); tIt.hasNext(); ) { Task child = (Task) tIt.next(); TaskSet childSet = (TaskSet) mTask2TaskSet.get(child); if (!set.getChildList().contains(childSet) && set != childSet) { set.getChildList().add(childSet); } } } } } // within each method cleanTaskSetChecked(); }
/** * Add impact factor to a TaskSet * * @param set TaskSet * @param impact Impact Factor */ private void addImpact(TaskSet set, double impact) { /* * follow the path from set */ set.setImpactFafctor(set.getImpactFactor() + impact); int size = set.getParentList().size(); if (size > 0) { double avg = impact / size; for (TaskSet parent : set.getParentList()) { addImpact(parent, avg); } } }
/** * Gets the depth of a TaskSet * * @param set TaskSet * @return depth */ private int getDepth(TaskSet set) { if (mTaskSet2Depth.containsKey(set)) { return (Integer) mTaskSet2Depth.get(set); } else { int depth = 0; for (Iterator it = set.getParentList().iterator(); it.hasNext(); ) { TaskSet parent = (TaskSet) it.next(); int curDepth = getDepth(parent); if (curDepth > depth) { depth = curDepth; } } depth++; mTaskSet2Depth.put(set, depth); return depth; } }