Mercurial > hg > Database > Alice
comparison src/main/java/alice/topology/manager/keeparive/ListManager.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | aefbe41fcf12 |
comparison
equal
deleted
inserted
replaced
344:9f97ec18f8c5 | 345:8f71c3e6f11d |
---|---|
1 package alice.topology.manager.keeparive; | |
2 | |
3 import java.util.LinkedList; | |
4 | |
5 public class ListManager { | |
6 private LinkedList<TaskInfo> list = new LinkedList<TaskInfo>(); | |
7 | |
8 public LinkedList<TaskInfo> getTaskList() { | |
9 return list; | |
10 } | |
11 | |
12 public void addTask(TaskInfo newInfo) { | |
13 TaskExecuter exec = TaskExecuter.getInstance(); | |
14 TaskInfo nowTask = exec.getNowTask(); | |
15 if (nowTask == null) { // active task is nothing | |
16 add(newInfo); | |
17 } else { | |
18 long remainingTime = exec.getRemainingTime(); | |
19 if (remainingTime > newInfo.getSleepTime()) { | |
20 // active task is longer than newTask. | |
21 TaskInfo task = nowTask.clone(); | |
22 task.setSleepTime(remainingTime); | |
23 list.addFirst(task); | |
24 add(newInfo); | |
25 exec.ignore(); | |
26 } else { | |
27 // newTask is longer than active task. | |
28 newInfo.setSleepTime(newInfo.getSleepTime() - remainingTime); | |
29 add(newInfo); | |
30 } | |
31 } | |
32 show(); | |
33 } | |
34 | |
35 private void add(TaskInfo newInfo){ | |
36 int cnt = 0; | |
37 for (TaskInfo info : list){ | |
38 if (info.getSleepTime() < newInfo.getSleepTime()){ | |
39 newInfo.setSleepTime(newInfo.getSleepTime() - info.getSleepTime()); | |
40 } else if (info.getSleepTime() == newInfo.getSleepTime()){ | |
41 // newInfo.getSleepTime() - info.getSleepTime() must be Zero | |
42 newInfo.setSleepTime(0); | |
43 cnt++; | |
44 break; | |
45 } else if (info.getSleepTime() > newInfo.getSleepTime()){ | |
46 info.setSleepTime(info.getSleepTime() - newInfo.getSleepTime()); | |
47 break; | |
48 } | |
49 cnt++; | |
50 } | |
51 list.add(cnt, newInfo); | |
52 } | |
53 | |
54 public boolean deleteTask(TaskInfo task){ | |
55 boolean matchFlag = false; | |
56 int cnt = 0; | |
57 for (TaskInfo t: list){ | |
58 if (t.getType().equals(task.getType())){ | |
59 matchFlag = true; | |
60 if (cnt+1 < list.size() ){ // next task exists. | |
61 TaskInfo next = list.get(cnt+1); | |
62 next.setSleepTime(next.getSleepTime()+task.getSleepTime()); | |
63 } | |
64 list.remove(cnt); | |
65 break; | |
66 } else { | |
67 cnt++; | |
68 } | |
69 } | |
70 return matchFlag; | |
71 } | |
72 | |
73 public void show(){ | |
74 if (TaskExecuter.getInstance().getNowTask()!=null){ | |
75 System.out.print("NOW | "); | |
76 System.out.print(TaskExecuter.getInstance().getNowTask().getSleepTime()); | |
77 System.out.print(" | "); | |
78 } | |
79 for (TaskInfo info : list){ | |
80 System.out.print(info.getSleepTime()); | |
81 System.out.print(" | "); | |
82 } | |
83 System.out.println(); | |
84 } | |
85 } |