Coverage report

  %line %branch
ca.spaz.task.TaskBar
0% 
0% 

 1  
 /*
 2  
  * Created on 4-Jun-2005
 3  
  */
 4  
 package ca.spaz.task;
 5  
 
 6  
 import java.awt.BorderLayout;
 7  
 import java.awt.event.*;
 8  
 import java.util.*;
 9  
 
 10  
 import javax.swing.*;
 11  
 import javax.swing.Timer;
 12  
 
 13  
 /**
 14  
  * A TaskBar is a Swing component that can safely run a Task in a background
 15  
  * thread, display progress of the task, interact with the task control,
 16  
  * and fire events to report task progress. 
 17  
  * 
 18  
  * @see Task
 19  
  * @see TaskListener
 20  
  * 
 21  
  * @author Aaron Davidson
 22  
  */
 23  0
 public class TaskBar extends JPanel {
 24  
    
 25  0
    private Task curTask;
 26  
    private JProgressBar progressBar;
 27  
    private JButton abortBtn;
 28  
    private Timer timer;
 29  0
    private boolean aborting;
 30  
    private ArrayList listeners;
 31  
    
 32  0
    public TaskBar() {      
 33  0
       setLayout(new BorderLayout(4,4));
 34  0
       add(getProgressBar(), BorderLayout.CENTER);
 35  0
       add(getAbortButton(), BorderLayout.EAST);
 36  0
    }
 37  
      
 38  0
    private JProgressBar getProgressBar() {
 39  0
       if (progressBar == null) {
 40  0
          progressBar = new JProgressBar(JProgressBar.HORIZONTAL);         
 41  0
          progressBar.setValue(0);
 42  0
          progressBar.setMinimum(0);
 43  0
          progressBar.setMaximum(100);
 44  
       }
 45  0
       return progressBar;
 46  
    }
 47  
    
 48  
    public JButton getAbortButton() {
 49  0
       if (abortBtn == null) {
 50  0
          abortBtn = new JButton("Stop");
 51  0
          abortBtn.setEnabled(false);
 52  0
          abortBtn.addActionListener(new ActionListener() {
 53  
             public void actionPerformed(ActionEvent e) {
 54  
                abortCurrentTask();
 55  
             }
 56  
          });
 57  
       }
 58  0
       return abortBtn;
 59  
    }
 60  
    
 61  
    public void abortCurrentTask() {
 62  0
       if (curTask != null) {
 63  0
          aborting = true;
 64  0
          curTask.abortTask();
 65  0
          progressBar.setString("Aborting...");                  
 66  
       }
 67  0
    }    
 68  0
    private Timer getTimer() {
 69  0
       if (timer == null) {
 70  0
          timer = new Timer(50, class="keyword">new ActionListener() {
 71  
             public void actionPerformed(ActionEvent e) {
 72  
                updateProgressBar();
 73  
             }
 74  
          });
 75  0
          timer.setCoalesce(true);
 76  0
          timer.setRepeats(true);
 77  
       }
 78  0
       return timer;
 79  
    }
 80  
    
 81  
    /**
 82  
     * Start the given task. 
 83  
     * 
 84  
     * @param t a Task to execute
 85  
     */
 86  
    public void executeTask(Task t) {
 87  0
       abortCurrentTask();
 88  0
       this.curTask = t;
 89  0
       fireTaskStarted();
 90  0
       getProgressBar().setValue(0);
 91  0
       getProgressBar().setStringPainted(true);
 92  0
       getAbortButton().setVisible(curTask.canAbortTask());
 93  0
       getAbortButton().setEnabled(curTask.canAbortTask());
 94  0
       Thread taskThread = new Thread(class="keyword">new Runnable() {
 95  
          public void run() {
 96  
             aborting = false;
 97  
             if (curTask != null) {
 98  
                curTask.run();
 99  
             }
 100  
             SwingUtilities.invokeLater(new Runnable() {
 101  
                public void run() {
 102  
                   getTimer().stop();
 103  
                   getProgressBar().setStringPainted(false);
 104  
                   if (aborting) {
 105  
                      fireTaskAborted();
 106  
                   } else {
 107  
                      fireTaskFinished();
 108  
                   }
 109  
                   // Ensure that the progress bar gets set to the right value.
 110  
                   if (getProgressBar().getValue() != 100) {
 111  
                      getProgressBar().setValue(0);
 112  
                   }
 113  
                   getAbortButton().setEnabled(false);
 114  
                   curTask = null;
 115  
                   getProgressBar().setStringPainted(false);
 116  
                }
 117  
             });
 118  
          }
 119  
       }, "TaskBar");
 120  0
       taskThread.start();
 121  0
       getTimer().start();
 122  0
    }
 123  
    
 124  0
    private void updateProgressBar() {
 125  0
       if (curTask != null && !aborting) {
 126  0
          getProgressBar().setValue(curTask.getTaskProgress());
 127  0
          getProgressBar().setString(curTask.getTaskDescription());
 128  
       }
 129  0
    }
 130  
 
 131  
    /**
 132  
     * Adds a task listener to this object to receive events on
 133  
     * a task's progress.
 134  
     * 
 135  
     * @param tl a task listener 
 136  
     */
 137  
    public synchronized void addTaskListener(TaskListener tl) {
 138  0
       if (null == listeners) {
 139  0
          listeners = new ArrayList();
 140  
       }
 141  0
       listeners.add(tl);
 142  0
    }
 143  
 
 144  
    /**
 145  
     * Remove a task listener from the TaskBar
 146  
     * 
 147  
     * @param tl a task listener 
 148  
     */
 149  
    public synchronized void removeTaskListener(TaskListener tl) {
 150  0
       if (listeners != null) {
 151  0
          listeners.remove(tl);
 152  
       }
 153  0
    }
 154  
    
 155  
    private synchronized void fireTaskStarted() {
 156  0
       if (listeners != null) {
 157  0
         Iterator iterator = listeners.iterator();
 158  0
         while (iterator.hasNext()) {
 159  0
            TaskListener tl = (TaskListener)iterator.next();
 160  0
            tl.taskStarted(curTask);
 161  0
         }
 162  
       }
 163  0
    }
 164  
 
 165  0
    private synchronized void fireTaskAborted() {
 166  0
       if (listeners != null) {
 167  0
         Iterator iterator = listeners.iterator();
 168  0
         while (iterator.hasNext()) {
 169  0
            TaskListener tl = (TaskListener)iterator.next();
 170  0
            tl.taskAborted(curTask);
 171  0
         }
 172  
       }
 173  0
    }
 174  
 
 175  0
    private synchronized void fireTaskFinished() {
 176  
       // Ensure that the progress bar gets set to the right value.
 177  0
       if (getProgressBar().getValue() != 100) {
 178  0
          getProgressBar().setValue(100);
 179  
       }
 180  0
       if (listeners != null) {
 181  0
         Iterator iterator = listeners.iterator();
 182  0
         while (iterator.hasNext()) {
 183  0
            TaskListener tl = (TaskListener)iterator.next();
 184  0
            tl.taskFinished(curTask);
 185  0
         }
 186  
       }
 187  0
    }
 188  
 
 189  
 
 190  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.