Listing C


import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Iterator;

 public class Scheduler {
   
    private List todoList = new LinkedList();
   
    public long getTotalDuration() throws TaskException {
        long total = 0L;
        for (Iterator i=todoList.iterator(); i.hasNext(); ) {
            total += ((Task)(i.next())).getDuration();
        }
        return total;
    }

    public void main(String[] args) {
        Scheduler s = new Scheduler();
        s.todoList.add(new DownloadTask("http://google.com"));
        try {
            System.out.println(s.getTotalDuration());
        } catch (TaskException doh) {
            System.out.println("Unable to perform task");
            doh.printStackTrace();
        }
    }
 }

 class TaskException extends Exception {
    public TaskException(String msg, Throwable cause) {
        super(msg, cause);
    }
 }

 interface Task {
    long getDuration() throws TaskException;
 }

 class DownloadTask implements Task {

    private String url;

    public DownloadTask(String u) {
        url = u;
    }
   
    public long getDuration() throws TaskException {
        try {
            // this may throw an IOException
        } catch (IOException doh) {
            throw new TaskException("Couldn't download", doh);
        }
    }
 }