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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2918 - (hide 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 torben 2838 package dk.daoas.adressevedligehold.tasks;
2    
3     import java.util.ArrayList;
4     import java.util.Collections;
5 torben 2903 import java.util.HashMap;
6 torben 2838 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 torben 2918 import dk.daoas.adressevedligehold.tasks.Task.TaskState;
12 torben 2838
13     public class TaskManager {
14    
15     public static final String TASKMANAGER = "TASKMANAGER";
16    
17     ExecutorService executor = Executors.newFixedThreadPool(1);
18 torben 2903
19     private int nextId = 1;
20 torben 2838
21    
22     private ArrayList<Task> tasks = new ArrayList<Task>();
23 torben 2903 private HashMap<Integer, Task> taskIdMap = new HashMap<Integer,Task>();
24 torben 2838
25     private Task currentTask;
26    
27 torben 2903 public synchronized List<TaskBean> getTasks() {
28 torben 2838 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 torben 2903 public Task getTaskById(int id) {
47     return taskIdMap.get(id);
48     }
49    
50 torben 2838 void shutDown() {
51     if (currentTask != null) {
52     currentTask.doAbort();
53     }
54    
55     executor.shutdownNow();
56     }
57    
58 torben 2918 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 torben 2903 public synchronized void submitTask(Task newTask) {
68     int id = getNextTaskid();
69     newTask.setId(id);
70    
71 torben 2838 newTask.setManager(this);
72    
73 torben 2903 taskIdMap.put(id, newTask);
74 torben 2838 tasks.add(newTask);
75     executor.submit(newTask);
76     }
77    
78 torben 2903 private synchronized int getNextTaskid() {
79     return nextId++;
80     }
81    
82 torben 2838
83     }

  ViewVC Help
Powered by ViewVC 1.1.20