/** 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;
   }
 }