1   package com.atlassian.core.task;
2   
3   import org.apache.commons.collections.Buffer;
4   
5   import java.sql.Timestamp;
6   import java.util.Collection;
7   
8   import com.atlassian.core.task.Task;
9   
10  /**
11   * Represents a queue of Task objects.  Arbitary task objects can be queue and then flushed when necessary.
12   * The flush will cause all tasks in the queue to execute.
13   * @see com.atlassian.core.task.Task
14   *
15   * @author Ross Mason
16   */
17  public interface TaskQueue
18  {
19      /**
20       * Will execute every task in the queue
21       */
22      void flush();
23  
24      /**
25       * Obtains the current size of the queue
26       * @return the queue size
27       */
28      int size();
29  
30      /**
31       * Adds a task to the end of the queue
32       * @param task the task to add
33       */
34      void addTask(Task task);
35  
36      /**
37       * Returns true if the queue is currently flushing or false otherwise
38       * @return true if the queue is currently flushing or false otherwise
39       */
40      boolean isFlushing();
41  
42      /**
43       * Obtains the time when the queue started flushing. This returns null
44       * if the queue is not being flushed
45       * @return the time when the queue started flushing
46       */
47      Timestamp getFlushStarted();
48  
49      /**
50       * Throw away all the tasks in the queue
51       */
52      void clear();
53  
54      /**
55       * Get a Collection of the Tasks currently in the queue
56       */
57      Collection getTasks();
58  }