/[projects]/dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/TaskManager.java
ViewVC logotype

Contents of /dao/DaoAdresseVedligehold/src/main/java/dk/daoas/adressevedligehold/tasks/TaskManager.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2918 - (show annotations) (download)
Thu Feb 4 14:40:36 2016 UTC (8 years, 3 months ago) by torben
File size: 1947 byte(s)
Add posibility for removing done and aborted tasks
1 package dk.daoas.adressevedligehold.tasks;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.concurrent.ExecutorService;
8 import java.util.concurrent.Executors;
9
10 import dk.daoas.adressevedligehold.tasks.Task.TaskBean;
11 import dk.daoas.adressevedligehold.tasks.Task.TaskState;
12
13 public class TaskManager {
14
15 public static final String TASKMANAGER = "TASKMANAGER";
16
17 ExecutorService executor = Executors.newFixedThreadPool(1);
18
19 private int nextId = 1;
20
21
22 private ArrayList<Task> tasks = new ArrayList<Task>();
23 private HashMap<Integer, Task> taskIdMap = new HashMap<Integer,Task>();
24
25 private Task currentTask;
26
27 public synchronized List<TaskBean> getTasks() {
28 ArrayList<TaskBean> tmpList = new ArrayList<TaskBean>();
29 for (Task t : tasks) {
30 tmpList.add( t.getTaskBean() );
31 }
32
33 Collections.reverse(tmpList);
34
35 return tmpList;
36 }
37
38 public void setCurrentTask(Task task) {
39 this.currentTask = task;
40 }
41
42 public Task getCurrentTask() {
43 return this.currentTask;
44 }
45
46 public Task getTaskById(int id) {
47 return taskIdMap.get(id);
48 }
49
50 void shutDown() {
51 if (currentTask != null) {
52 currentTask.doAbort();
53 }
54
55 executor.shutdownNow();
56 }
57
58 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);
72
73 taskIdMap.put(id, newTask);
74 tasks.add(newTask);
75 executor.submit(newTask);
76 }
77
78 private synchronized int getNextTaskid() {
79 return nextId++;
80 }
81
82
83 }

  ViewVC Help
Powered by ViewVC 1.1.20