1   package com.atlassian.core.task;
2   
3   import org.apache.log4j.Logger;
4   
5   import java.sql.Timestamp;
6   import java.util.Collection;
7   
8   /**
9    * Created by IntelliJ IDEA.
10   * User: Tomd
11   * Date: 26/04/2006
12   * Time: 11:17:36
13   * To change this template use File | Settings | File Templates.
14   */
15  public abstract class AbstractTaskQueue implements TaskQueue
16  {
17      private static final transient Logger log = Logger.getLogger(AbstractTaskQueue.class);
18      protected FifoBuffer buffer;
19  
20      private boolean flushing;
21      private Timestamp flushStarted;
22  
23  
24      public AbstractTaskQueue(FifoBuffer buffer)
25      {
26          this.buffer = buffer;
27      }
28  
29      public void flush()
30      {
31          if (flushing)
32              return;
33  
34          flushing = true;
35          flushStarted = new Timestamp(System.currentTimeMillis());
36  
37          try
38          {
39              Task task;
40              while ((task = (Task) buffer.remove()) != null)
41              {
42                  log.debug("Executing: " + task);
43                  try
44                  {
45                      task.execute();
46                  }
47                  catch (Exception e)
48                  {
49                      handleException(task, e);
50                  }
51              }
52          }
53          finally
54          {
55              flushing = false;
56              flushStarted = null;
57          }
58      }
59  
60      protected void handleException(Task task, Exception e)
61      {
62          log.error("Failed to execute task : " + task, e);
63      }
64  
65      public int size()
66      {
67          return buffer.size();
68      }
69  
70      public void addTask(Task task)
71      {
72          log.debug("Queued: " + task);
73          buffer.add(task);
74      }
75  
76      /**
77       * @deprecated use getTasks() instead.
78       */
79      public Collection getQueue()
80      {
81          return buffer.getItems();
82      }
83  
84      public boolean isFlushing()
85      {
86          return flushing;
87      }
88  
89      public Timestamp getFlushStarted()
90      {
91          return flushStarted;
92      }
93  
94      public void clear()
95      {
96          buffer.clear();
97      }
98  
99      public Collection getTasks()
100     {
101         return buffer.getItems();
102     }
103 }
104