2 |
|
|
3 |
import java.util.ArrayList; |
import java.util.ArrayList; |
4 |
import java.util.Collections; |
import java.util.Collections; |
5 |
|
import java.util.HashMap; |
6 |
import java.util.List; |
import java.util.List; |
7 |
import java.util.concurrent.ExecutorService; |
import java.util.concurrent.ExecutorService; |
8 |
import java.util.concurrent.Executors; |
import java.util.concurrent.Executors; |
9 |
|
|
10 |
import dk.daoas.adressevedligehold.tasks.Task.TaskBean; |
import dk.daoas.adressevedligehold.tasks.Task.TaskBean; |
11 |
|
import dk.daoas.adressevedligehold.tasks.Task.TaskState; |
12 |
|
|
13 |
public class TaskManager { |
public class TaskManager { |
14 |
|
|
15 |
public static final String TASKMANAGER = "TASKMANAGER"; |
public static final String TASKMANAGER = "TASKMANAGER"; |
16 |
|
|
17 |
ExecutorService executor = Executors.newFixedThreadPool(1); |
ExecutorService executor = Executors.newFixedThreadPool(1); |
18 |
|
|
19 |
|
private int nextId = 1; |
20 |
|
|
21 |
|
|
22 |
private ArrayList<Task> tasks = new ArrayList<Task>(); |
private ArrayList<Task> tasks = new ArrayList<Task>(); |
23 |
|
private HashMap<Integer, Task> taskIdMap = new HashMap<Integer,Task>(); |
24 |
|
|
25 |
private Task currentTask; |
private Task currentTask; |
26 |
|
|
27 |
public List<TaskBean> getTasks() { |
public synchronized List<TaskBean> getTasks() { |
28 |
ArrayList<TaskBean> tmpList = new ArrayList<TaskBean>(); |
ArrayList<TaskBean> tmpList = new ArrayList<TaskBean>(); |
29 |
for (Task t : tasks) { |
for (Task t : tasks) { |
30 |
tmpList.add( t.getTaskBean() ); |
tmpList.add( t.getTaskBean() ); |
43 |
return this.currentTask; |
return this.currentTask; |
44 |
} |
} |
45 |
|
|
46 |
|
public Task getTaskById(int id) { |
47 |
|
return taskIdMap.get(id); |
48 |
|
} |
49 |
|
|
50 |
void shutDown() { |
void shutDown() { |
51 |
if (currentTask != null) { |
if (currentTask != null) { |
52 |
currentTask.doAbort(); |
currentTask.doAbort(); |
55 |
executor.shutdownNow(); |
executor.shutdownNow(); |
56 |
} |
} |
57 |
|
|
58 |
public void submitTask(Task newTask) { |
public synchronized void removeTask(Task removeTask) { |
59 |
|
if (removeTask.state == TaskState.STATE_ABORTED || removeTask.state == TaskState.STATE_DONE) { |
60 |
|
taskIdMap.remove( removeTask.getId() ); |
61 |
|
tasks.remove(removeTask); |
62 |
|
} else { |
63 |
|
throw new RuntimeException("Cant remove task in current state:" + removeTask.state); |
64 |
|
} |
65 |
|
} |
66 |
|
|
67 |
|
public synchronized void submitTask(Task newTask) { |
68 |
|
int id = getNextTaskid(); |
69 |
|
newTask.setId(id); |
70 |
|
|
71 |
newTask.setManager(this); |
newTask.setManager(this); |
72 |
|
|
73 |
|
taskIdMap.put(id, newTask); |
74 |
tasks.add(newTask); |
tasks.add(newTask); |
75 |
executor.submit(newTask); |
executor.submit(newTask); |
76 |
} |
} |
77 |
|
|
78 |
|
private synchronized int getNextTaskid() { |
79 |
|
return nextId++; |
80 |
|
} |
81 |
|
|
82 |
|
|
83 |
} |
} |