View Javadoc

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   public abstract class AbstractTaskQueue implements TaskQueue
9   {
10      private static final transient Logger log = Logger.getLogger(AbstractTaskQueue.class);
11      protected FifoBuffer<Task> buffer;
12  
13      private boolean flushing;
14      private Timestamp flushStarted;
15  
16  
17      public AbstractTaskQueue(FifoBuffer<Task> buffer)
18      {
19          this.buffer = buffer;
20      }
21  
22      public void flush()
23      {
24          if (flushing)
25              return;
26  
27          flushing = true;
28          flushStarted = new Timestamp(System.currentTimeMillis());
29  
30          try
31          {
32              Task task;
33              while ((task = buffer.remove()) != null)
34              {
35                  log.debug("Executing: " + task);
36                  try
37                  {
38                      task.execute();
39                  }
40                  catch (Exception e)
41                  {
42                      handleException(task, e);
43                  }
44              }
45          }
46          finally
47          {
48              flushing = false;
49              flushStarted = null;
50          }
51      }
52  
53      protected void handleException(Task task, Exception e)
54      {
55          log.error("Failed to execute task : " + task, e);
56      }
57  
58      public int size()
59      {
60          return buffer.size();
61      }
62  
63      public void addTask(Task task)
64      {
65          log.debug("Queued: " + task);
66          buffer.add(task);
67      }
68  
69      /**
70       * @deprecated use getTasks() instead.
71       */
72      public Collection<Task> getQueue()
73      {
74          return buffer.getItems();
75      }
76  
77      public boolean isFlushing()
78      {
79          return flushing;
80      }
81  
82      public Timestamp getFlushStarted()
83      {
84          return flushStarted;
85      }
86  
87      public void clear()
88      {
89          buffer.clear();
90      }
91  
92      public Collection<Task> getTasks()
93      {
94          return buffer.getItems();
95      }
96  }
97