public void taskEvent(TaskEvent event) {
   synchronized (d_lock) {
     Task source = event.getSource();
     if (d_progress.containsKey(source)) {
       updateTaskProgress(source, event);
     }
   }
 }
 private void updateTaskProgress(Task source, TaskEvent event) {
   EventType type = event.getType();
   switch (type) {
     case TASK_FINISHED:
       d_progress.put(source, 1.0);
       break;
     case TASK_PROGRESS:
       d_progress.put(source, calcProgress((TaskProgressEvent) event));
       break;
     case TASK_RESTARTED:
     case TASK_STARTED:
       d_progress.put(source, 0.0);
     default:
       break;
   }
   setProgress(calcProgress());
   setDeterminate(calcDeterminate());
 }