1   package com.atlassian.core.task;
2   
3   import java.util.*;
4   
5   /**
6    * A TaskManager implementation that manages multiple queues
7    */
8   public class DefaultMultiQueueTaskManager implements MultiQueueTaskManager
9   {
10      private Map queues = new HashMap();
11  
12      public DefaultMultiQueueTaskManager(String queueName, TaskQueue queue)
13      {
14          addTaskQueue(queueName, queue);
15      }
16  
17      public DefaultMultiQueueTaskManager(Map queues)
18      {
19          setTaskQueues(queues);
20      }
21  
22      public void addTaskQueue(String name, TaskQueue queue)
23      {
24          if(queues.keySet().contains(name))
25          {
26              throw new IllegalArgumentException("The queue specified already exists in the task manager");
27          }
28          queues.put(name, queue);
29      }
30  
31      public TaskQueue removeTaskQueue(String queueName, TaskQueue taskQueue, boolean flush)
32      {
33          TaskQueue queue = getTaskQueue(queueName);
34          if(queue!=null && flush)
35          {
36              queue.flush();
37          }
38          return queue;
39      }
40  
41      public TaskQueue getTaskQueue(String name)
42      {
43          return (TaskQueue)queues.get(name);
44      }
45  
46      public void setTaskQueues(Map queues)
47      {
48          Map.Entry entry;
49          for (Iterator iterator = queues.entrySet().iterator(); iterator.hasNext();)
50          {
51              entry = (Map.Entry)iterator.next();
52              addTaskQueue(entry.getKey().toString(), (TaskQueue)entry.getValue());
53          }
54      }
55  
56      public void addTask(String queueName, Task task)
57      {
58          getTaskQueue(queueName).addTask(task);
59      }
60  
61      public void flush(String queueName)
62      {
63          getTaskQueue(queueName).flush();
64      }
65  
66      public void flush()
67      {
68          for (Iterator iterator = queues.values().iterator(); iterator.hasNext();)
69          {
70              ((TaskQueue)iterator.next()).flush();
71          }
72      }
73  }