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
10
11
12
13
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
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