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
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