/[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 3030 - (hide annotations) (download)
Fri Apr 29 12:16:00 2016 UTC (8 years, 1 month ago) by torben
File size: 2118 byte(s)
only synchronize a subsection of getTask method
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 3030 public List<TaskBean> getTasks() {
28 torben 2838 ArrayList<TaskBean> tmpList = new ArrayList<TaskBean>();
29 torben 3030
30     synchronized(this) {
31     for (Task t : tasks) {
32     tmpList.add( t.getTaskBean() );
33     }
34 torben 2838 }
35    
36     Collections.reverse(tmpList);
37    
38     return tmpList;
39     }
40    
41     public void setCurrentTask(Task task) {
42     this.currentTask = task;
43     }
44    
45     public Task getCurrentTask() {
46     return this.currentTask;
47     }
48    
49 torben 2903 public Task getTaskById(int id) {
50     return taskIdMap.get(id);
51     }
52    
53 torben 2838 void shutDown() {
54     if (currentTask != null) {
55     currentTask.doAbort();
56     }
57    
58     executor.shutdownNow();
59     }
60    
61 torben 2918 public synchronized void removeTask(Task removeTask) {
62 torben 2928 if (removeTask.state == TaskState.STATE_QUEUED) {
63     removeTask.doAbort();
64     }
65    
66     if (removeTask.state == TaskState.STATE_ABORTED || removeTask.state == TaskState.STATE_DONE || removeTask.state == TaskState.STATE_QUEUED) {
67 torben 2918 taskIdMap.remove( removeTask.getId() );
68     tasks.remove(removeTask);
69 torben 2928 return;
70 torben 2918 }
71 torben 2928
72    
73     throw new RuntimeException("Cant remove task in current state:" + removeTask.state);
74    
75 torben 2918 }
76    
77 torben 2903 public synchronized void submitTask(Task newTask) {
78     int id = getNextTaskid();
79     newTask.setId(id);
80    
81 torben 2838 newTask.setManager(this);
82    
83 torben 2903 taskIdMap.put(id, newTask);
84 torben 2838 tasks.add(newTask);
85     executor.submit(newTask);
86     }
87    
88 torben 2903 private synchronized int getNextTaskid() {
89     return nextId++;
90     }
91    
92 torben 2838
93     }

  ViewVC Help
Powered by ViewVC 1.1.20